Itérations boucle FOR

hx.jonathan
WRInaute discret
WRInaute discret
 
Messages: 162
Inscription: 2 Mar 2005

Itérations boucle FOR

Message le Jeu Aoû 09, 2007 13:52

Je fais une petite interface de maintenance pour site web.

J'ai une page qui affiche mes enregistrements et une autre qui me sert à mettre à jour les enregistrements dans ma base de données. L'ensemble fonctionne impeccablement sauf UNE chose.


Je voudrais que ma boucle (qui sert à faire l'UPDATE de ma table) boucle autant de fois qu'il y a d'enregistrement dans ma requête.

Je sais que cela doit se mettre dans:

Code: Tout sélectionner
for($i=1; $i< ICI;$i++)


avec une variable. Mais comme ma boucle est sur une autre page php que celle où j'affiche mes enregistrements, je ne sais pas trop.

D'avance merci à tous.

Voici mes deux pages :

AFFICHAGE :

Code: Tout sélectionner
       
//connexion BDD
connexion_DB('bd_club');

// REQUETE SQL
$res2 = mysql_query('SELECT * FROM activites');

print '<form method="POST" action=check.php>';

//boucle

$cpt=0;
while($row2 = mysql_fetch_array($res2))
{
$cpt++;

$ID_ACTIV=$row2['ID_ACTIV'];
$annee=$row2['annee'];

//affichage enregistrements

print "<input type='hidden' name='ID_ACTIV' size='1' value='$ID_ACTIV'></input>";
print "<input type='text' name= 'annee".$cpt."' size='5' value='$annee'></input>";



echo "<br />";
}
echo "<br />";
print '<div align="center"><input type="submit" name="envoie" VALUE="Enregistrer les modifications"></div>';
print '</form>';


mysql_close();
?>


MISE A JOUR :


Code: Tout sélectionner
<?php
include_once 'fonctions.php';

connexion_DB('bd_club');

if (isset($_POST['annee'])){

$annee=$POST_['annee'];

}


for($i=1; $i<4;$i++){

$VarDynAnnee='annee'.$i;




$sql = "UPDATE activites SET annee = '".$_POST[$VarDynAnnee]."'WHERE ID_ACTIV = '$i'";



echo "<br/>".$sql;

$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

}


header("Location:http://127.0.0.1/absence/index.php?page=03");


   
      
?>


lupuz
WRInaute discret
WRInaute discret
 
Messages: 212
Inscription: 15 Mar 2006

Message le Jeu Aoû 09, 2007 14:03

Tu peux faire un 'SELECT Count(*) FROM activites'

Qui te renvera la valeur de ton max pour ta boucle for.


erestrebian
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 460
Inscription: 15 Juin 2007

Message le Jeu Aoû 09, 2007 14:07

je te conseille deux choses dans ta première page :

change le nom de ton input, ça évite les confusion appelle le : idact[$cpt] et le second annee[$cpt], comme ça tu as deux variables-tableaux, ça me semble plus facile à gérer que beaucoup de variables.

ensuite tu peux rajouter un autre hidden dans lequel tu mets en valeur le $cpt, ce qui te permet de récupérer le nombre de fois qu'il faut que tu fasses ta boucle sur la page suivante.

si ça ne te convient pas tu peux toujours compter le nombre d'entrées qu'il y a dans le tableau annee[]....

hx.jonathan
WRInaute discret
WRInaute discret
 
Messages: 162
Inscription: 2 Mar 2005

Message le Jeu Aoû 09, 2007 14:50

Désolé mais j'ai essayé avec ton select count mais ça na marche pas.

J'ai fais ceci :

Code: Tout sélectionner
<?php
include_once 'fonctions.php';

connexion_DB('bd_club');

if (isset($_POST['annee'])){

$annee=$POST_['annee'];

}

$test= mysql_query('SELECT Count(*) FROM activites');


for($i=1; $i<$test;$i++){

$VarDynAnnee='annee'.$i;

echo $test;


$sql = "UPDATE activites SET annee = '".$_POST[$VarDynAnnee]."'WHERE ID_ACTIV = '$i'";



echo "<br/>".$sql;

$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

}


lupuz
WRInaute discret
WRInaute discret
 
Messages: 212
Inscription: 15 Mar 2006

Message le Jeu Aoû 09, 2007 15:45

Ton erreur est là :
Code: Tout sélectionner
...
$test= mysql_query('SELECT Count(*) FROM activites');


for($i=1; $i<$test;$i++){
...



mysql_query() te revoit une resource, pas une valeur que tu peux utiliser.
Il faut que tu la "traite" avant de l'utiliser, avec un mysql_fetch_row() par exemple.

ton code sera donc :
Code: Tout sélectionner
...
$test= mysql_query('SELECT Count(*) FROM activites');

$row = mysql_fetch_row($test)
for($i=1; $i<$row[0];$i++){
...


hx.jonathan
WRInaute discret
WRInaute discret
 
Messages: 162
Inscription: 2 Mar 2005

Message le Jeu Aoû 09, 2007 16:43

OK merci


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités