Transmission de données en method POST.
PHP Sql
Bonsoir.
çà fait quatre jours que je cherche et il me semble tourner sans fin autour du pot.
J'ai une table articles
Code:
1 2 3 4 5 6 7
| CREATE TABLE `articles` (
`id_article` int(11) NOT NULL,
`nom_article` varchar(255) NOT NULL,
`rayon_article` int(11) NOT NULL,
`type_article` varchar(20) NOT NULL,
`qte_article` int(11) NOT NULL DEFAULT '1'
) ENGINE=MyISAM DEFAULT CHARSET=latin1; |
dans un formulaire je liste tous les articles de ma table et pour chacun d'eux je rajoute un check box et un input type number.
mon rêve et de pouvoir ajouter une quantité à des articles que je sélectionne et des POSTER les raticles sélectionnés et leur quantité vers une liste de courses.
j'ai fait:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <form name="article" method="post" action="ajout_articles_courses.php">
<div class="screenonly" align="center"><input class="bouton" type="submit" name="ajout_article" value="Ajouter les produits cochés à la liste de courses"></div>
</th>
</table>
</tr>
<table class="table table-bordered table-condensed table-striped table-sm">
<thead><th></th><th>id_article</th><th>Article</th><th>Quantité</th><th>Type article</th></thead>
<tbody>
<?php while ($ligne = $resultat_art->fetch_assoc()): ?>
<tr>
<td>
<div class="screenonly"><input type='checkbox' name='ajout_article[]' value='<?=$ligne['id_article']?>'></td></div>
</td>
<td><?=$ligne['id_article'];?></td>
<td><?=$ligne['nom_article'];?></td>
<td><input type="number" name="quant_art"></td>
<td><?=$ligne['type_article'];?></td>
</tr>
<?php endwhile ?>
</tbody>
</table>
</form> |
A mon grand malheur, lorsque je poste mes données vers "ajout_articles_courses.php", tous les $ligne [quelquechose] passe et je les récupère dans la page destinataire, mais je ne sais pas faire passer la quantité que j'ai saisie dans l'input= number.
çà faiit quatre jours et quatre nuit que je suis là-dessus et ,même en période de confinement, je commence à trouve le temps long :(:(:(
Si quelqu'un pouvait m'aider....
Je vous remercie d'avance
Bonne soirée
Merci pour votre aide. Mais la quantité articles n'est toujours pas transmise dans le POST
Je veux d'abord vous remercier pour votre aide et la rapidité de votre réponse. Mais je dois mal m'y prendre.
J'ai changé mon code comme vous me l'avez conseillé.
il devient donc
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <form name="article" method="post" action="ajout_articles_courses.php">
<div class="screenonly" align="center"><input class="bouton" type="submit" name="ajout_article" value="Ajouter les produits cochés à la liste de courses"></div>
</th>
</tr>
<table class="table table-bordered table-condensed table-striped table-sm">
<thead><th></th><th>id_article</th><th>Article</th><th>Quantité</th><th>Type article</th></thead>
<tbody>
<?php while ($ligne = $resultat_art->fetch_assoc()): ?>
<tr>
<td>
<div class="screenonly"><input type='checkbox' name='ajout_article[<?=$ligne['id_article'];?>]' value='<?=$ligne['id_article']?>'></td></div>
</td>
<td><?=$ligne['id_article'];?></td>
<td><?=$ligne['nom_article'];?></td>
<td><input type="number" name="quant_art[<?=$ligne['id_article'];?>]"></td>
<td><?=$ligne['type_article'];?></td>
</tr>
<?php endwhile ?>
</tbody>
</table>
</form> |
Je coche par exemple la case de l'article 'Ail' et je mets la quantité à 5.
Dans la page destination, "ajout_articles_courses.php", avant même de tenter une quelconque requête d'insertion, je fais un var_dump() du $_POST['ajout_article']
Code:
1 2 3 4 5 6 7
| $tableau = array();
if(!empty($_POST['ajout_article'])){
foreach($_POST['ajout_article'] as $valeur){
array_push($tableau,$valeur);
echo $valeur,'<br />';
}
var_dump($tableau); |
Je reçois:
Citation:
Array ( [0] => ingred [1] => 236 [2] => Ail [3] => Légumes [4] => 415 )
[0]type_article [1] id_article [2]nom_article [3]rayon_article [4]ordre_rayon
j'ai besoin de toutes ces infos pour la suite de mon traitement.
Mais la quantité de l'article (5 en l’occurrence) ne passe toujours pas :(:(
Je suis à l'écoute de tout conseil que vous pourriez me donner
En vous remerciant d'avance,
Cordialement
remerciements pour tes renseignements.
Je continue à chercher comment je peux récupérer ma quantité article.
J'espère que le code que j'ai modifié sur tes conseils me met sur la voie....
Quant au tableau que j'utilise, en fait je liste la totalité des articles que j'ai dans ma base et je laisse à mon épouse la possibilité de cocher de 1 à n articles pour ensuite pouvoir les rajouter à sa liste de commissions, d'où l'utilisation du array avant de procéder à l'insert dans ma table commissions.
je pensais que toutes les variables que je déclarais dans entre les balises
<form name="article" method="post" action="ajout_articles_courses.php">
et
.
.
</form>
étaient postées.
Il doit y avoir des subtilités que je ne maitrise pas...
Je te remercie pour tes réponses et je te souhaite un bon week-end
Merci de l'interêt que tu portes à mon problème.
Pour résumer:
j'ai une table d'articles
Code:
1 2 3 4 5 6 7
|
CREATE TABLE `articles` (
`id_article` int(11) NOT NULL,
`nom_article` varchar(255) NOT NULL,
`rayon_article` int(11) NOT NULL,
`type_article` varchar(20) NOT NULL,
) ENGINE=MyISAM DEFAULT CHARSET=latin1; |
il y a plus de 300 articles
je liste ces articles et je voudrais que mon épouse puisse sélectionner ceux dont elle a besoin et rajouter une quantité (1 , 2, 3.....)
Ensuite, je poste les articles cochés pour les insérer (et seulement les articles sélectionnés) dans une table commissions. J'affiche ensuite le contenu de cette table et j'imprime.
Tout se passe à merveille sauf que la quantité rajoutée ne passe pas.
pour poster les articles saisis (et, je l'espérais, les quantités saisies)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
<table class="table table-bordered table-condensed table-striped table-sm">
<thead><th></th><th>id_article</th><th>Article</th><th>Quantité</th><th>Type article</th></thead>
<tbody>
<?php while ($ligne = $resultat_art->fetch_assoc()): ?>
<tr>
<td>
<div class="screenonly"><input type='checkbox' name='ajout_article[<?=$ligne['id_article'];?>]' value='<?=$ligne['id_article']?>'></td></div>
</td>
<td><?=$ligne['id_article'];?></td>
<td><?=$ligne['nom_article'];?></td>
<td><input type="number" name="quant_art[<?=$ligne['id_article'];?>]"></td>
<td><?=$ligne['type_article'];?></td>
</tr>
<?php endwhile ?>
</tbody> |
Pour récupérer les articles sélectionner, j'utilise un array()
Code:
1 2 3 4 5 6 7 8 9 10 11
|
$tableau = array();
if(!empty($_POST['ajout_article'])){
foreach($_POST['ajout_article'] as $valeur){
array_push($tableau,$valeur);
echo $valeur,'<br />';
}
echo '<br />';
var_dump($tableau); |
A ce niveau-là, dans le var_dump(), je vois toutes les infos dont j'ai besoin sauf, évidemment, la quantité (la source de mes problèmes).
ensuite, pour l'INSERT dans ma table commissions
je fais une requête croisée pour récupérer les infos qui vont bien et j'insère.
Tout se passe hyper bien. Sauf que la quantité n'est pas passée puisque déjà elle n'apparaissait pas dans mon var_dump().
Dans ma requete j'ai le renseigne le champ 'commission_quantite' à 1 parce que, pour l'instant, je ne sais pas récupérer la quantité saisie par mon épouse.
Code:
1 2 3 4 5 6 7 8 9 10
|
foreach($_POST['ajout_article'] as $valeur){
$requete="SELECT a.type_article, a.id_article, a.nom_article, r.nom_rayon, r.ordre_rayon FROM articles a JOIN rayon r ON a.rayon_article = r.id_rayon where id_article = '$valeur'";
$result = $db->query($requete);
while($row =$result->fetch_row()){
$sql = "INSERT INTO commissions (commission_article, commission_quantite, commission_rayon_id, commission_date) VALUES ( '$row[2]' , 1,$row[4], CURDATE())";
$db->query($sql);
}
} |
Tout marche très bien mais.....
Je voudrais simplement pouvoir renseigner le champs commission_quantite par la valeur saisie dans mon premier formulaire et pas par la valeur par défaut 1 que j'ai mises parce que je ne sais pas récupérer la dite quantité saisie.
En te remerciant par avance de l’intérêt que tu porteras à mon problème...
Encore une fois, remerciements infinis pour ton aide.
Dans un premier temps, je veux te remercier pour ton excellent travail que tu as eu la gentillesse de commenter.
J'ai désormais compris qu'il ne faut pas inclure de requête dans une boucle et qu'il vaut mieux faire appel à des requêtes préparées.
A partir d'aujourd'hui, j'aurais une petite pensée pour toi chaque fois que j'utiliserai des requêtes préparées...
Je suis super content parce que maintenant, grâce à toi, je vois ma quantité article que tu récupères par $quant_art = $_POST['quant_art'][$id_article];.
Cependant, et je suis un peu gêné de faire encore appel à toi, la définition de la variable $row = $res_article->fetch_row() me fait apparaître le message d'erreur
Citation:
Fatal error: Call to undefined method mysqli_stmt::fetch_row() in
Code:
1 2 3 4 5 6 7 8 9
| // 2a- SELECT article
// Lecture des marqueurs
$res_article->bind_param('i', $id_article); // i = nombre entier
// Exécution de la requête
$res_article->execute();
$row = $res_article->fetch_row(); // (1 seul résultat/article à récupérer ici)
$nom_article = $row['nom_article']; // ou $row[0];
$ordre_rayon = $row['ordre_rayon']; // ou $row[1]; |
J'ai essayé de me dépatouiller en Googlisant, mais sans succès....
En tous les cas, je te remercie infiniment pour ta bienveillance et j'espère, un jour, pouvoir à mon tour aider des gens en difficulté comme tu le fais si bien...
çà marche enfin !!! MILLE FOIS MERCI !!!
çà marche enfin.... je te suis infiniment reconnaissant de ton aide.
En m'inspirant de tout ce que tu m'as dit, je récupère enfin mon article et la quantité saisie.
J'ai gardé ma requête qui, pour l'instant, n'est pas préparée et j'y ai intégré tous tes conseils et ton aide et çà marche enfin.
Mode code est donc:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
$tableau = array();
if(!empty($_POST['ajout_article'])){
echo 'Les valeurs des cases cochées sont :<br />';
foreach($_POST['ajout_article'] as $id_article){
array_push($tableau,$id_article);
echo $id_article,'<br />';
}
}
foreach($_POST['ajout_article'] as $id_article){
$requete="SELECT a.type_article, a.id_article, a.nom_article, r.nom_rayon, r.ordre_rayon FROM articles a JOIN rayon r ON a.rayon_article = r.id_rayon where id_article = '$id_article'";
$result = $db->query($requete);
$quant_art = $_POST['quant_art'][$id_article];
while($row =$result->fetch_row()){
$sql = "INSERT INTO commissions (commission_article, commission_quantite, commission_rayon_id, commission_date) VALUES ( '$row[2]' , $quant_art,$row[4], CURDATE())";
$db->query($sql);
}
} |
çà fonctionne impeccable. je suis fou de joie et je te remercie ......
Je la passe en requête préparée pour le fun et en challenge perso.... et je commence à chercher un bon tuto PDO pour mon prochain projet