Transmission de plusieurs valeurs depuis un formulaire

Résolu/Fermé
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 - Modifié par crapoulou le 14/02/2015 à 21:35
Whismeril Messages postés 19040 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 9 mai 2024 - 25 févr. 2015 à 08:39
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 :

<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 !


3 réponses

Utilisateur anonyme
14 févr. 2015 à 20:50
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
0
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 20
Modifié par emrh le 14/02/2015 à 21:02
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...
0
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

<?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
0
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 20 > Utilisateur anonyme
19 févr. 2015 à 23:22
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 :

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...
0
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 20
Modifié par emrh le 21/02/2015 à 17:38
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 :


<?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 !
0
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 20 > emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024
Modifié par emrh le 25/02/2015 à 08:44
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é :

<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 !
0
Whismeril Messages postés 19040 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 9 mai 2024 932 > emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024
25 févr. 2015 à 08:33
Bonjour merci de poster ta réponse.

--
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
14 févr. 2015 à 21:04
'lut, pour ta gouverne, l'extension MySQL et ses fonctions
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.
0
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 20
14 févr. 2015 à 21:11
Je te remercie de ta réponse...

Je pense que tant que je ne me serai pas mis sérieusement à PDO je ne posterai
plus de question dans aucun forum car on me répond toujours la même chose...
Il faut dire que je tends le bâton pour me faire battre !
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225 > emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024
14 févr. 2015 à 21:13
Il faut dire que je tends le bâton pour me faire battre !
C'est pas une menace non plus, juste un avertissement. L'extension MySQL souffre depuis le début de gros problème de design de toute façon...
0
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 20 > ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021
Modifié par emrh le 14/02/2015 à 21:18
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...
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225 > emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024
14 févr. 2015 à 21:18
J'ai mentionné MySQLi, c'est pas pour rien ;)
0