Transmission de plusieurs valeurs depuis un formulaire
Résolu
emrh
Messages postés
427
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonsoir,
Je voudrai faire un truc tout bête mais je n'arrive pas à tourner mon code pour y arriver, alors je vous expose mon problème.
J'ai une table de 2 colonnes (désignation et prix) alimentée par une base de données.
Seul le champ prix est modifiable par l'intermédiaire d'un <input>.
Comment je peux transmettre à ma page "modif_tarif.php" les valeurs
tarifs ?
Voici le code actuel de la page qui récupère les corrections de prix :
J'avais pensé transmettre une variable de session $i comme compteur de lignes et sur la page "modif_tarif.php" utiliser une boucle "for", mais ça me semble pas propre et je suis sûr qu'il y a plus simple !
Merci d'avance pour votre aide !
Je voudrai faire un truc tout bête mais je n'arrive pas à tourner mon code pour y arriver, alors je vous expose mon problème.
J'ai une table de 2 colonnes (désignation et prix) alimentée par une base de données.
Seul le champ prix est modifiable par l'intermédiaire d'un <input>.
Comment je peux transmettre à ma page "modif_tarif.php" les valeurs
tarifs ?
Voici le code actuel de la page qui récupère les corrections de prix :
<form method="post" action="modif_tarif.php"> <table> <caption>Chambres présentes dans la base : </caption> <thead> <!-- En-tête du tableau --> <tr> <th>Désignation</th> <th>Prix TTC</th> </tr> </thead> <tbody> <!-- Corps du tableau --> <?php $i=0; while ($donnees = mysql_fetch_array($sql)) { $i++; ?> <tr> <td> <?php echo $donnees['chambre'] ;?> </td> <td> <input name="<?php echo $i ;?>" value="<?php echo $donnees['prix'] ;?>" /> </td> </tr> <?php } $_SESSION['$i']=$i; ?> </tbody> </table> <input type="submit" value="Valider"> <input type="reset" value="Ré initialiser" /> </form>
J'avais pensé transmettre une variable de session $i comme compteur de lignes et sur la page "modif_tarif.php" utiliser une boucle "for", mais ça me semble pas propre et je suis sûr qu'il y a plus simple !
Merci d'avance pour votre aide !
A voir également:
- Transmission de plusieurs valeurs depuis un formulaire
- Whatsapp formulaire opposition - Guide
- Formulaire de réclamation facebook - Guide
- Formulaire de reclamation instagram - Guide
- Confirmer le nouvel envoi du formulaire err_cache_miss - Forum Webmastering
- Problème avec Google Chrome - Forum Google Chrome
3 réponses
Bonjour,
pas facile de comprendre ce que tu veux dire - enfin pour moi - Qu'entends-tu par " ... valeur tarif " ?
si c'est juste pour ajouter un entier incrémenté de 1 pour chaque ligne de ta table, tu peux le faire dans ton fichier de traitement .php
Cdt
pas facile de comprendre ce que tu veux dire - enfin pour moi - Qu'entends-tu par " ... valeur tarif " ?
si c'est juste pour ajouter un entier incrémenté de 1 pour chaque ligne de ta table, tu peux le faire dans ton fichier de traitement .php
Cdt
Merci ludobabs de t'interresser à mon problème...
En image c'est mieux :

Je veux envoyer à "modif_tarif.php" les éventuels champs modifié, tout en conservant les autres bien sûr et corriger ma base de données

Je voudrai modifier la chambre à 14€ pour la mettre à 104 € par exemple. Les champs des noms de chambres ne sont pas modifiables...
En image c'est mieux :

Je veux envoyer à "modif_tarif.php" les éventuels champs modifié, tout en conservant les autres bien sûr et corriger ma base de données

Je voudrai modifier la chambre à 14€ pour la mettre à 104 € par exemple. Les champs des noms de chambres ne sont pas modifiables...
tu ne dois pas utiliser l'index primaire ( id ) de ta table comme indice d'identification d'une chambre, en effet, si un jour tu dois exporter ta table ( structure et données / ou juste données ), ou que tu l'optimises, ou n'importe quoi d'autre, les lignes vides de ta table ne seront pas copiées et donc l'id ne correspondra plus. Je te conseille de rajouter un champ id_chambre qui lui sera une donnée pure ( ce ne sera pas un index ) tu peux mettre ce champ en auto-increment.
dans les grandes lignes :
dans ton formulaire
ta mise à jour se ferait comme ça dans modif_tarif.php,
C'est le principe, en espérant que ça puisse t'aider
dans les grandes lignes :
dans ton formulaire
<?php while ($donnees = mysql_fetch_array($sql)) { ?> <tr> <td> <?php echo $donnees['chambre'] ;?> </td> <td> <input name="<?php echo $donnees['id_chambre']; ?>" value="<?php echo $donnees['prix'] ;?>" /> </td> </tr> <?php } ?>
ta mise à jour se ferait comme ça dans modif_tarif.php,
while ($test = mysql_fetch_array($_POST)) { UPDATE `ma_table` SET `prix`= $test['prix'] WHERE `id_chambre`= $test['id_chambre']; } ?>
C'est le principe, en espérant que ça puisse t'aider
Je te remercie ludobabs pour ton aide...
J'ai donc ajouté comme tu l'expliques une colonne dans ma bdd "id_chambre".
J'ai ensuite rempli manuellement chacun des champs en attribuant le même
n° id_chambre que id, car pour l'instant il n'y a que peu d'éléments...
J'ai ensuite recopié ton code pour le formulaire, tout s'affiche bien, par contre pour
la modification des prix, sur la page modif_tarif.php j'ai l'erreur suivante :
Parse error: syntax error, unexpected '`' in /homepages/.../modif_tarif.php on line 25
Voici le code :
Je n'ai jamais été foutu de comprendre quand mettre un ` ou un ' ou un "...
J'ai tout essayé et je me demande, si finalement, compte tenu de la faible
quantité de dynamisme sur ce site, il ne serait pas judicieux de passer
finalement à PDO...
J'ai donc ajouté comme tu l'expliques une colonne dans ma bdd "id_chambre".
J'ai ensuite rempli manuellement chacun des champs en attribuant le même
n° id_chambre que id, car pour l'instant il n'y a que peu d'éléments...
J'ai ensuite recopié ton code pour le formulaire, tout s'affiche bien, par contre pour
la modification des prix, sur la page modif_tarif.php j'ai l'erreur suivante :
Parse error: syntax error, unexpected '`' in /homepages/.../modif_tarif.php on line 25
Voici le code :
while ($test = mysql_fetch_array($_POST)) {
UPDATE `tarifs` SET `prix`= $test['prix'] WHERE `id_chambre`= $test['id_chambre'];
}
Je n'ai jamais été foutu de comprendre quand mettre un ` ou un ' ou un "...
J'ai tout essayé et je me demande, si finalement, compte tenu de la faible
quantité de dynamisme sur ce site, il ne serait pas judicieux de passer
finalement à PDO...
Bon, me revoilà avec cette fois ci PDO,
Je bloque toujours pour la mise à jour de ma base de donnée, car j'ai pas trouvé
(ou mal cherché) sur Internet comment modifier UN champs dans PLUSIEURS enregistrements....
Voici mon code formulaire qui lui fonctionne :
Merci d'avance pour votre aide !
Je bloque toujours pour la mise à jour de ma base de donnée, car j'ai pas trouvé
(ou mal cherché) sur Internet comment modifier UN champs dans PLUSIEURS enregistrements....
Voici mon code formulaire qui lui fonctionne :
<?php
include ('connexion.php');
// Requête :
$sql = 'SELECT * FROM tarifs';
// Exécution :
$req = $DB->query($sql);
// Récupération des données
while ($data=$req->fetch(PDO::FETCH_OBJ)) { ?>
<tr>
<td><?php echo $data->chambre ;?></td>
<td><input name="<?php echo $donnees['id_chambre'] ;?>" value="<?php echo $data->prix ;?>" /> </td>
</tr>
<?php
}
?>
Merci d'avance pour votre aide !
Je viens poster ici la réponse à ma question car j'ai horreur de parcourir les forums
et tomber sur des post correspondant pile à ma question mais non résolu !
Voici donc le formulaire corrigé :
et le traitement de la page modif_tarif.php :
(Edit : N'oubliez pas de placer des closeCursor(); sur vos requêtes en bas de page)
En espérant que cela puisse aider quelqu'un !
Merci à tous ceux qui ont essayé de m'aider,
Merci à Carouge10 sur grafikart.fr pour avoir résolu mon problème !
et tomber sur des post correspondant pile à ma question mais non résolu !
Voici donc le formulaire corrigé :
<form method="post" action="modif_tarif.php">
<table>
<caption>Chambres présentes dans la base : </caption>
<thead> <!-- En-tête du tableau -->
<tr>
<th>Désignation</th>
<th>Prix TTC</th>
</tr>
</thead>
<tbody> <!-- Corps du tableau -->
<?php
// Récupération des données
while ($data=$req->fetch(PDO::FETCH_OBJ)) { ?>
<tr>
<td><?= $data->chambre ;?></td>
<td><input name="prix_chambre_<?= $data->id_chambre ;?>" value="<?= $data->prix ;?>" /> </td>
</tr>
<?php
}
?>
</tbody>
</table>
<input type="submit" value="Valider">
<input type="reset" value="Ré initialiser" />
</form>
et le traitement de la page modif_tarif.php :
// Requête : Permet de récupérer l'id des chambres pour modifier leur prix
$sql = 'SELECT id_chambre FROM tarifs';
// Exécution :
$req = $DB->query($sql);
// Préparation de la requête avec des marqueurs (?) pour modifier le prix des chambres
$req_update = $DB->prepare('UPDATE `tarifs` SET `prix`= ? WHERE `id_chambre`= ?');
// Tant que nous avons des chambres...
while ($data=$req->fetch(PDO::FETCH_OBJ)) {
// Création d'une variable contenant le nom de l'input où contenu le prix
// en fonction de l'id de la chambre
$prix_chambre = "prix_chambre_".$data->id_chambre;
// Exécution de la requête UPDATE et remplaçant dans l'ordre les marqueurs
// Le 1er marqueur (?) correspont au prix donc à $_POST[$prix_chambre],
// le 2ème correpond à l'id de la chambre
$req_update->execute(array($_POST[$prix_chambre], $data->id_chambre));
}
(Edit : N'oubliez pas de placer des closeCursor(); sur vos requêtes en bas de page)
En espérant que cela puisse aider quelqu'un !
Merci à tous ceux qui ont essayé de m'aider,
Merci à Carouge10 sur grafikart.fr pour avoir résolu mon problème !
'lut, pour ta gouverne, l'extension MySQL et ses fonctions
Cela s'explique par le fait que cette extension ne dispose pas de requêtes préparées, menant très fréquemment a des possibilités d'injection SQL, autrement dit à la modification ou destruction de ta BDD par n'importe qui.
Aussi, le dit module n'est plus mis à jour, donc toute faille de sécurité découverte dedans ne sera pas corrigée.
Regarde du coté de PDO; ou de l'extension MySQLi qui a l'avantage d'avoir un style de code proche du module MySQL.
mysql_*est obsolète et donc à ne plus utiliser, encore moins pour l'apprentissage de l'utilisation de BDD.
Cela s'explique par le fait que cette extension ne dispose pas de requêtes préparées, menant très fréquemment a des possibilités d'injection SQL, autrement dit à la modification ou destruction de ta BDD par n'importe qui.
Aussi, le dit module n'est plus mis à jour, donc toute faille de sécurité découverte dedans ne sera pas corrigée.
Regarde du coté de PDO; ou de l'extension MySQLi qui a l'avantage d'avoir un style de code proche du module MySQL.
Je le sais déjà....hélas,
(cf la réponse de Xavierdu34 sur https://forums.commentcamarche.net/forum/affich-31438375-remplir-un-array-a-partir-d-une-bdd
Mais pour l'instant je dois reconnaître que PDO me gonfle, me semble moins compréhensible et m'oblige à taper 10 lignes là ou j'en tapais 2 !
Edit : les forums sont pleins de "vieilles" aides en mysql, j'ai du mal à trouver des réponses aux questions que je me pose sur du PDO...
(cf la réponse de Xavierdu34 sur https://forums.commentcamarche.net/forum/affich-31438375-remplir-un-array-a-partir-d-une-bdd
Mais pour l'instant je dois reconnaître que PDO me gonfle, me semble moins compréhensible et m'oblige à taper 10 lignes là ou j'en tapais 2 !
Edit : les forums sont pleins de "vieilles" aides en mysql, j'ai du mal à trouver des réponses aux questions que je me pose sur du PDO...