Page 1 sur 1

Variable Tableau dependante d'une table

Posté : 03 sept. 2008, 21:57
par PoDeZebi
Bonsoir,

voici mon code :
sur exoserie.php :
<?php
					
						while($val=mysql_fetch_array($query)) 
						{
					?>
							<tr>
							<td><?php echo $val['libTypeent'];?></td>
							<td><?php echo $val['libgroupe'];?></td>
							<td><?php echo $val['libexercice'];?></td>
							<td><<textarea name="serie[]" rows="6" cols="10"></textarea></td>
							</tr>
					<?php
						}
et sur exoserie2.php
$serie $_POST['serie'];
	if (is_array($serie)) foreach($serie as $id_serie) 
	{
		$sql="UPDATE series SET libserie=".$id_serie." WHERE ... ";
		$query = mysql_query($sql);
	}
Comme vous pouvez le voir mon WHERE reste vide !!! Tout simplement parce que je ne sais pas quoi mettre !

en fait j'ai une valeur libserie dependante de 2 autre valeur (idgroupe, idTypeent).
J'aimerais que la valeur que je rentre sur le exoserie.php vienne s'inserer dans ma table
Mais je ne vois pas du tout comment !

Merci de votre aide par avance

Posté : 03 sept. 2008, 22:19
par B.Moncef
Le textarea ne se comporte pas comme les checkbox quand tu lui mets un name="serie[]". Ce n'est pas la solution.
Tu peux récupérer les informations entrées dans le textarea, et les mettre dans un tableau en les séparant avec la fonction explode() par exemple. (un retour à la ligne entre chaque, un point, tout ce que tu veux)
Ensuite tu pourras boucler sur ton tableau comme tu veux.

Quelques remarques :
- Tu as un chevron en plus entre <td> et <textarea
- Protège tes variables avant de les insérer dans la BDD, avec mysql_real_escape_string() par exemple.
- Tu as quelques problèmes avec la syntaxe du php apparemment, tu as oublié un = entre $serie et $_POST... et ton bloc if/foreach n'est pas très clair (il marche bien ton code disposé comme ça ?)

Petite curiosité, ton pseudo ne serait pas écrit en maghrébin ? (dialecte marocain ou algérien ou autre ?)

Posté : 03 sept. 2008, 22:31
par Invité
mmm désolé je n'ai pas les connaissance pour le textarea je dois dire ...
voila Grosso modo ce que j'ai kan je fais une requete sql sur l'ensemble de mes champs, ca devrait t'aider :
idTypeent | id groupe | idexercice | libserie
1 1 4
1 1 8
1 2 5
(impossible d'aligner mes colone !!! désolé)
Comme tu peux le voir, j'ai une clé double sur idTypeent et idgroupe. l'idée c'est que la valeur de libserie pour chacune de ces lignes puisse s'inséré correctement !
Je t'avoue que l'histoire du Explode ne m'aide pas des masses ! je ne vois pas comment le mettre en oeuvre !

Effectivement le PHP, j'en fais beaucoup, mais pas régulierement donc, je ne suis pas tres pointu en la matière !
pour le chevron, c'est une petite faute de frappe oooops
Je prend note de ta remarque pour les variable, je vais essayer de voir comment installer ca !
aucun soucis avec mon if/foreach... que me conseils tu ???

mon pseudo est une vieille blague que je me traine depuis plus de 20 ans... la contraction de Peau De Zebi... et non aucune consonance oriental! désolé !

Posté : 03 sept. 2008, 23:20
par B.Moncef
Je crois que je suis passé totalement à côté du problème... désolé. Je répondrais ce soir quand je rentre.

Posté : 04 sept. 2008, 05:49
par B.Moncef
Alors reprenons, tu as une table dont la structure est celle affichée plus haut dans ton message.
Que veux-tu dire ici par "correctement" :
l'idée c'est que la valeur de libserie pour chacune de ces lignes puisse s'inséré correctement !
D'après ce que j'ai compris, après relecture, ce code devrait te convenir :
<?php

$result = array(
   0 => array(
            'libTypeent' => '1',
            'libgroupe' => '2'
   ),
   1 => array(
            'libTypeent' => '3',
            'libgroupe' => '4'
   )
);

echo '<form action="" method="post">';

foreach ($result as $key => $data) {
   echo '<textarea name="serie' . $data['libTypeent'] . $data['libgroupe'] . '"'
         . ' rows="6" cols="10"></textarea><br />';
}

echo '<input type="submit" name="submit" />';
echo '</form>';

$sql = '';
if (isset($_POST['submit'])) {
   foreach ($_POST as $name => $value) {
      if ($name != 'submit') {
         $libTypeent = (int) $name[strlen($name) - 2];
         $libgroupe = (int) $name[strlen($name) - 1];
         
         $sql .= '- UPDATE `ta_table` SET `libserie`= \'' . (int) $value . '\''
                  . ' WHERE `libTypeent` = ' . $libTypeent . ' AND `libgroupe` = ' . $libgroupe . '<br />';
      }
   }
   
   echo $sql;
}

?>
Teste le en local, et dis moi si les requêtes affichées à la fin sont bien celles que tu aimerais exécuter ?

PS : si tu veux tester avec des données venant directement de ta bdd, tu peux remplacer le tableau $result et la boucle foreach du début par le résultat de ta requête sql et une boucle while($data = ...)

Posté : 04 sept. 2008, 12:14
par PoDeZebi
mmm ca correspond bien !
Sauf que je verrais plutot passer les idTypeent et idgroupe (clé primaire correspondante au table typeent et groupe)
$result = array( 
   0 => array( 
            'idTypeent' => '1', 
            'idgroupe' => '2' 
   ), 
   1 => array( 
            'idTypeent' => '3', 
            'idgroupe' => '4' 
   ) 
Les requetes affiché par contre ne me donne pas le contenu complet de mon 'libserie'... juste le premier chiffre
si je rentre :
3x30
4x50

j'aurais SET 'libserie'='3' ...
par contre je ne vois pas du tout comment je vais faire transiter la valeur idtypeent et idgroupe depuis mon autre page...

Posté : 04 sept. 2008, 14:47
par PoDeZebi
Je viens de trouver une solution à mon problème...

dans le premier code :
<?php
					
while($val=mysql_fetch_array($query)) 
{
?>
<tr>
	<td><?php echo $val['libTypeent'];?></td>
	<td><input type="text" name="type[]" value="<?php echo $val['idTypeent']; ?>"></td>
	<td><?php echo $val['libgroupe'];?></td>
                <td><input type="text" name="grp[]" value="<?php echo $val['idgroupe']; ?>"></td>
	<td><?php echo $val['libexercice'];?></td>
	<td><input type="text" name="exo[]" value="<?php echo $val['idexercice']; ?>"></td>
	<td><textarea name="serie[]" rows="6" cols="10"></textarea></td>
</tr>
<?php
}
puis dans le 2em :
<?php
$type=$_POST['type'];
$grp=$_POST['grp'];
$exo=$_POST['exo'];
$serie=$_POST['serie'];	
	//Connexion à la base de donnée
	mysql_connect("localhost","root","root");
	mysql_select_db("Muscu");

	$val = count ($type);
	
   for($i=0 ; $i < $val ; $i++)
   {     
         $sql = "UPDATE series SET libserie ='".$serie[$i]."' 
		 WHERE idTypeent =".$type[$i]." 
		 AND idgroupe = ".$grp[$i]."
		 AND idexercice = ".$exo[$i]; 
		echo $sql."<p>";
		$query = mysql_query($sql);
	  } 
?>
Je suppose qu'il y a surement nettement mieux a faire !
En tout cas, là ca a l'air de marcher !
Si vous avez des suggestion je suis preneur !

Merci de votre aide

Posté : 05 sept. 2008, 06:16
par B.Moncef
Concernant mon code, je ne savais pas que libserie pouvait contenir autre chose que des chiffres, pour cela il aurait suffit de changer (int) $value pour mysql_real_escape_string($value).

Posté : 05 sept. 2008, 17:13
par AB
@PoDeZebi, comme l'a dit B.Moncef, il serait bien que tu protège tes données pour l'update avec la fonction mysql_real_escape_string().