Bonjour tout le monde !
Je vous explique mon problème et vous remercie par avance pour votre aide (après pas mal de recherches sur le net j’ai vu que la commande Foreach devrait résoude mon problème mais j’ai du mal à comprendre comment l’utiliser
Le but du formulaire est de lister tous les articles de la rubrique accessoires (avec la marque, prix, caracteristiques etc…) et modifier tout ce qu’il nous plait, et lorsqu’on clique sur submit, cela fait un update de tous les articles concernés dans la base sql
Voilà le code de list.php :
<?
$host="gnarkgnark.fr";
$db="burp";
$user="root";
$password="Oebr228";
$connect=mysql_connect($host, $user, $password);
mysql_select_db($db, $connect);
$select="Select * from contenu WHERE rubrique LIKE 'equipement_pilote' AND sous_rubrique LIKE 'accessoires'";
$query=mysql_query($select);
$rows=mysql_num_rows($query);
echo ''.$rows.'';
echo '';
echo '';
echo '
Ref de l\'article
MARQUE
';
$i=0;
WHILE ($data=mysql_fetch_array($query)) {
echo '
'.$data['id'].'
';
$i++;
}
echo '';
echo '';
mysql_close();
?>
Jusque là pas de problème ca m’affiche correctement les articles avec l’id, la marque et le prix, on modifie ce qu’il nous plait, et c’est après que j’ai du mal à comprendre comment récupérer mes valeurs
Voilà le code de la 2e page :
<?
$rows=$_REQUEST['rows'];
foreach ($_POST as $cle) {
echo ''.$cle.'
';
}
echo '
Nombre de lignes : '.$rows.'';
?>
Ca m’affiche l’id et la marque en vrac, ce que je ne sais pas c’est comment naviguer dans ce tableau pour par exemple que ca ne m’affiche que le $_REQUEST[‘marque’] pour faire un update dans la base sql
J’espère que j’aurais réussi à me faire comprendre j’ai du mal à m’expliquer lol
Merci pour votre aide
Si j’ai bien comprit ce que tu veux, c’est à toi de vérifier si la variable commence bien par marque :
<?
$rows=$_REQUEST['rows'];
foreach ($_POST as $cle => $valeur) {
if (substr($cle,0,6) == 'marque')
echo "{$cle} => {$valeur}<br>";
}
echo '<b>Nombre de lignes : '.$rows.'</b>';
?>
Edité le 29/10/2007 à 12:48
je viens de tester ton code et c’est exactement ca merci
par contre quelques petites questions : if (substr($cle,0,6) == ‘marque’) ca veut dire quoi exactement ?
est ce qu’il y’a une instruction courte qui permet de récupérer l’id, la marque, le prix etc… ou je suis obliger de faire un foreach pour chacune de ces valeurs ?
Faire un update SQL avec un foreach ne risque pas d’être lent et lourd ? (en imaginant qu’il y’a 100 produits d’un coup à mettre à jour il va faire 100 updates d’un coup
Si tu as une meilleure solution ou des conseils je suis preneur
Pour les updates, de toutes manières si tu as 100 produits à mettre à jour, tu devras faire 100 updates, non ?
Le “substr($cle,0,6)” retourne les 6 premiers caractères de la chaine.
Pour récuperer le prix et compagnie, tu peux faire comme ça :
<? $rows=$_REQUEST['rows']; foreach ($_POST as $cle => $valeur)
{
if (substr($cle,0,6) == 'marque')
{
echo "{$cle} => {$valeur}<br>";
$index = intval(substr($cle,6)); // Renvoie tous les caractères à partir du 6ème jusqu'à la fin. Intval s'assure qu'il s'agit d'un nombre
if ($index != 0) // pour être sur qu'on a bien lu le nombre)
{
echo 'Prix : ' . $_POST['prix' . $index] . '<br>';
}
}
} echo '<b>Nombre de lignes : '.$rows.'</b>';
?>
Après, c’est juste pour te donner l’idée générale, à toi de l’adapter à tes besoins (notamment le contrôle d’erreur au niveau de $index)
Edit : correction d’une petite erreur dans le script (accolades manquantes)
Edité le 29/10/2007 à 14:14
parfait merci beaucoup pour tes explications, je vais bosser là dessus cet aprem
Salut ! désolé à nouveau de te déranger, ta technique fonctionne très bien mais j’ai quand même un soucis
Je t’explique :
sur la page list.php j’ai un formulaire qui liste tous les produits de la rubrique accessoires et affiche en conséquence affiche 3 champs pour chaque produit de la rubrique accessoires :
- id (en hidden), Marque (input text) et Prix public (input text)
Donc je modifie les les marques et prix qui m’interessent et lorsque je clique sur le bouton submit je suis rediriger sur update.php et là commence le script suivant avec ton code :
<?
$host="gnark.gnark.fr";
$db="catalogue";
$user="root";
$password="Oebr228";
$connect=mysql_connect($host, $user, $password);
mysql_select_db($db, $connect);
$rows=$_REQUEST['rows'];
foreach ($_POST as $cle => $valeur)
{
if (substr($cle,0,6) == 'marque')
echo "
{$cle} donne {$valeur}
";
$marque=$valeur;
if (substr($cle,0,6) == 'prixpb')
echo "
{$cle} donne {$valeur}
";
$prixpb=$valeur;
if (substr($cle,0,2) == 'id')
echo "
{$cle} donne {$valeur}
";
$id=$valeur;
$update="UPDATE contenu SET marque='$marque', prix_public='$prixpb' WHERE id='$id'";
mysql_query($update);
}
?>
Comme tu dois t’en douter marque et prix public ont la même valeur que l’id et c’est justement ça mon problème
J’aurais plutôt dit quelque chose du genre :
<?
$host="gnark.gnark.fr";
$db="catalogue";
$user="root";
$password="Oebr228";
$connect=mysql_connect($host, $user, $password);
mysql_select_db($db, $connect);
$rows=$_REQUEST['rows'];
foreach ($_POST as $cle => $valeur)
{
if (substr($cle,0,6) == 'marque')
echo "<b>{$cle} donne {$valeur}<br></b>";
$marque=$valeur;
$index = intval(substr($cle,6));
$prixpb = $_POST['prixpb' . $index];
$id = $_POST['id' . $index];
$update="UPDATE contenu SET marque='$marque', prix_public='$prixpb' WHERE id='$id'";
mysql_query($update);
}
?>
Après, j’ai peut être pas comprit exactement ce que tu voulais
re
en lançant ton script j’ai pas mal d’erreurs genre Undefined index: id0 Et je vais essayer de t’expliquer mon soucis
En fait dans ton script d’après ce que j’ai compris il cherche la valeur id, prixpb à partir de “marque” ? Parce que en fait id, prixpb et marque sont 3 input text différents
Je vais bien réussir à me faire comprendre lol
En tout cas merci de ton aide