Page 1 sur 3

Je n'arrive pas à récuper les données d'un tableau

Posté : 15 déc. 2010, 12:28
par pat01200
Bonjour le forum,

j'ai créé un site (que je teste pour l'instant en local) destiné à collecter des commandes de produits par des utilisateurs groupés au sein d'une même entreprise. Sur une page, j'ai un tableau dans lequel la 1ère colonne fait apparaître les noms des utilisateurs (ceux d'une même entreprise), les autres colonnes leur permettant par des input text d'indiquer la quantité de produits que chacun souhaite commander. Voici mon code php:
<?php

$k = 0;
$req_clients=mysql_query("SELECT * FROM utilisateurs LEFT JOIN clients ON clients.cli_util=utilisateurs.util_id JOIN produits ON clients.cli_id=produits.prod_cli JOIN cli_ville ON clients.cli_id=cli_ville.cli_ville_cli JOIN villes ON cli_ville.cli_ville_ville=villes.ville_id WHERE util_societe='".$soc['soc_id']."' ORDER BY util_nom, util_prenom");
while($row_clients = mysql_fetch_assoc($req_clients))
{
				if ($k==0)
				{$fond="#EEEEEE";}
				else
				{$fond="#FFFFFF";}
				echo "<tr bgcolor='".$fond."'>";

				echo "<td class='simpleg' height='30'><a href=\"resultat_client.php?client=".$row_clients['util_id']."\" alt=\"Voir la fiche compl&egrave;te de ".$row_clients['util_nom']." ".$row_clients['util_nom']."\" title=\"Voir la fiche compl&egrave;te de ".$row_clients['util_nom']." ".$row_clients['util_nom']."\">".$row_clients["util_civilite"]." <strong>".$row_clients["util_prenom"]." ".$row_clients["util_nom"]."</strong></td>";
				echo "<td class='simpleg' height='10'>";
				echo "</td>";
				$req_commande = mysql_query ("SELECT * FROM commande WHERE commande.commande_cli='".$row_clients['cli_id']."'");
				while($comm = mysql_fetch_assoc($req_commande))
				{				
				{echo "<td class='simplec'><input type='text' name='service' id='service' size='15' value='".$comm['commande_nom_service']."'/></td>";											
							
				echo "<td class='simplec'><input type='text' name='prod1' style='text-align:center' size='2' value='".$comm['commande_prod1']."' /></td>";
				echo "<td class='simplec'><input type='text' name='prod2' style='text-align:center' size='2' value='".$comm['commande_prod2']."' /></td>";						
				echo "<td class='simplec'><input type='text' name='prod3' style='text-align:center' size='2' value='".$comm['commande_prod3']."' /></td>";
				echo "<td class='simplec'><input type='text' name='prod4' style='text-align:center' size='2' value='".$comm['commande_prod4']."' /></td>";
				echo "<td class='simplec'><input type='text' name='prod5' style='text-align:center' size='2' value='".$comm['commande_prod5']."' /></td>";}
				}				
				
				$cli_id_fiche=$row_clients['cli_id'];
				$cli_fiche=$row_clients['util_civilite']." ".$row_clients['util_prenom']." ".$row_clints['util_nom'];
				
				
				$k = 1 - $k;
}
?>
Mon problème : je n'arrive pas à récupérer les commandes de chacun dans ma base MySql. j'ai essayé ceci sans succès :
if ((isset($_POST['prod1'])) AND (is_numeric($_POST['prod1'])))
{
$prod1 = mysql_query("UPDATE commande SET commande_prod1='".ent_pos($_POST['prod1'])."' WHERE commande_ent='".$ent['ent_id']."' commande_cli='".$clients['cli_id']."'");
}
Quelqu'un aurait-il une solution ?
Merci d'avance à tous ceux qui voudront bien m'aider !

Re: Je n'arrive pas à récuper les données d'un tableau

Posté : 15 déc. 2010, 12:47
par xTG
Il manque un AND entre les deux couples de valeurs dans ton WHERE.
Rajoutes des instructions de debug et tu ne resteras pas planté ainsi devant ce genre d'étourderies. ;)

Pour l'exemple il suffirai de rajouter or die(mysql_error()) à la fin de la commande mysql_query() pour détecter toute erreur de syntaxe.

Re: Je n'arrive pas à récuper les données d'un tableau

Posté : 15 déc. 2010, 12:49
par stealth35
Pour l'exemple il suffirai de rajouter or die(mysql_error()) à la fin de la commande mysql_query() pour détecter toute erreur de syntaxe.
ou mieux activer le mysql.trace_mode
ini_set('mysql.trace_mode', true);

Re: Je n'arrive pas à récuper les données d'un tableau

Posté : 15 déc. 2010, 18:38
par pat01200
Merci, mais même avec le "AND", ça ne marche pas...
ma formule enregistre la valeur de la dernière ligne et l'affuble à tous les utilisateurs !
Où est l'erreur ou la subtilité de syntaxe ?

Re: Je n'arrive pas à récuper les données d'un tableau

Posté : 15 déc. 2010, 20:01
par xTG
Que donnes ceci :
echo "UPDATE commande SET commande_prod1='".ent_pos($_POST['prod1'])."' WHERE commande_ent='".$ent['ent_id']."' commande_cli='".$clients['cli_id']."'";

Re: Je n'arrive pas à récuper les données d'un tableau

Posté : 16 déc. 2010, 10:36
par pat01200
Ca n'est toujours pas bon...

II n'y a visiblement que la dernière ligne du tableau qui semble être prise en compte, et je ne comprends toujours pas pourquoi !

Re: Je n'arrive pas à récuper les données d'un tableau

Posté : 16 déc. 2010, 11:55
par xTG
Bon solvons déjà un problème.
C'est quoi la dernière ligne du tableau pour toi ? Un n-uplet de la table ou bien l'index prod5 du tableau $_POST ?

Et tu ne m'as toujours pas donné ce que renvoyais le echo. ^^

Re: Je n'arrive pas à récuper les données d'un tableau

Posté : 16 déc. 2010, 12:07
par pat01200
Ben pour moi, la dernière ligne du tableau c'est la commande du dernier client (dans l'ordre alphabétique) de l'entreprise. En fait, avec les scripts que j'ai utilisés, il n'y a que cette commande qui semble être prise en compte lorsque l'on clique sur le bouton valider.

Re: Je n'arrive pas à récuper les données d'un tableau

Posté : 16 déc. 2010, 12:52
par xTG
En relisant le code et avec tes informations pour m'éclairer j'ai compris.

Tu fais une boucle pour récupérer les résultats de la requête $req_commande.
Sauf que dans cette boucle tu affiches des input avec un nom fixe. Ce qui fait que si tu parcours 10 fois la boucle tu auras bien 10 affichages mais avec le même nom.
Donc seul le dernier input est traité.

Solution : faire varier le nom des inputs en y concaténant par exemple l'id de l'enregistrement concerné.

Re: Je n'arrive pas à récuper les données d'un tableau

Posté : 16 déc. 2010, 13:05
par pat01200
Merci xTG, je crois avoir compris ton raisonnement, mais concrètement, je ne vois vas comment faire varier le nom des inputs comme tu dis : est ce la valeur (value) que je dois modifier ou le nom (name) ? Pourrais-tu me donner un exemple ?

Re: Je n'arrive pas à récuper les données d'un tableau

Posté : 16 déc. 2010, 17:23
par xTG
Admettons que je récupères de ma base de donnée une suite de valeur que je veux ensuite modifier.
Toutes ces valeurs sont des n-uplet différents, mon formulaire travaille donc avec plusieurs input qui selon la logique possède le même nom.
Chaque n-uplet est caractérisé par une valeur unique (ou un coupe, c'est la clé primaire). Donc le but est d'insérer cette valeur dans le nom afin d'obtenir des noms compréhensibles et uniques.
while( $r = mysql_fetch_***($requete) )
{
  echo "<input type=\"***\" name=\"nomduchamps_{$r['cle_primaire']}\" value=\"{$r['valeur']}\" />";
}
Sur cet exemple de codage du nom du champs il suffit à la réception de couper la chaîne suivant le caractère "_" pour obtenir l'identifiant du n-uplet à modifier. :)

Re: Je n'arrive pas à récuper les données d'un tableau

Posté : 16 déc. 2010, 17:37
par pat01200
Merci pour le tuyau, j'essaierai ça demain...

Re: Je n'arrive pas à récuper les données d'un tableau

Posté : 17 déc. 2010, 16:35
par pat01200
Bonjour xTG bojour le forum,

désolé mais j'ai trituré ton script un peu dans tous les sens, sans succès. Tes \, tes { et autres signes que je n'ai pas compris, m'ont aussi pas mal désorienté... enfin bref : je suis toujours planté complet !
Lorsque je te demandais hier de me donner un exemple, j'espérais que tu utilises mes propres noms de champ et de requête, en gros que tu me transformes mon code original en un code qui fonctionne et que je puisse reproduire. Est-ce trop abusé que de te demander de me faire quelque chose avec ça à transformer:
$req_commande = mysql_query ("SELECT * FROM commande WHERE commande.commande_cli=' ".$row_clients['cli_id']." ' ");
while($comm = mysql_fetch_assoc($req_commande))
{
echo "<input type='text' name='commande_prod1' value=' ".$comm['commande_prod1]." '/>";
}
merci d'avance de te pencher sur mon cas

Re: Je n'arrive pas à récuper les données d'un tableau

Posté : 17 déc. 2010, 20:56
par xTG
Les caractères qui te gênent sont des caractères d'échappement ou de protection. :)
Tu utilises dans ton code des ' pour les paramètres html, ce qui n'est pas très bon en fait même si le navigateur les interprète au final. Il faut utiliser des " .
Cela se comprend en général lorsqu'on fait une faute de syntaxe de par la coloration :
echo "<input type=\"***\" name=\"nomduchamps_{$r['cle_primaire']}\" value=\"{$r['valeur']}\" />";
echo "<input type="***" name="nomduchamps_$r['cle_primaire']" value="$r['valeur']" />";
Quand aux {} c'est pour indiquer que tout ce qui se trouve au milieu est la variable. Car sinon on s'arrêterai à l'interprétation de $r et on perdrait donc l'index du tableau.
while($comm = mysql_fetch_assoc($req_commande))
{
echo "<input type=\"text\" name=\"commande_prod1-{$comm['id_commande']}\" value=\"{$comm['commande_prod1']}\" '/>";
}
Et l'interprétation de l'input :
foreach($_POST as $index => $valeur) // parcours de tous les champs renvoyés
{
  $tab = explode("-",$index); // on coupe l'index sur le caractère -
  if( count($tab) == 2 && $tab[0] == "commande_prod1" )
  {
    $id_commande = $tab[1];
    echo "Commande numéro $id_commande : $valeur\n";
  }
}

Re: Je n'arrive pas à récuper les données d'un tableau

Posté : 03 janv. 2011, 14:55
par pat01200
Bonjour xTG, Bonjour le Forum et Meilleurs Voeux à tous !

Voilà, j'ai essayé pendant mes vacances, mais en reprenant le boulot ce matin, je ne suis guère plus avancé. Si ma page "commande" affiche bien les produits de chacun, je n'arrive toujours pas à enregistrer de nouvelles commandes avec le code
foreach($_POST as $index => $valeur)
{
$tab = explode("-",$index);
if( count($tab) == 2 && $tab[0] == "commande_prod1" )
{
$id_commande = $tab[1];
echo "Commande numéro $id_commande : $valeur\n";
}
}

Est-ce par que je dois modifier certains mots en fonction de mes tables MySql, est-ce que c'est parce que mon bouton "valider" utilise une méthode POST ?...etc
Bref, j'ai toujours besoi d'aide !