Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1144 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP/SQL] Mettre à jour des données dans un tableau array

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP/SQL] Mettre à jour des données dans un tableau array

n°1758892
Tots
Posté le 12-07-2008 à 22:54:17  profilanswer
 

Bonjour à tous !
 
Je  débute et je suis confronté à mon premier gros souci !
 
Avec php et MySQL, je veux réaliser, pour le travail, un catalogue de réactifs de laboratoires aidant à gérer les stocks au quotidien.
 
 Dans ma BDD j'ai une table "réactifs" avec deux champs :
- un champ "nom" (le nom de chaque réactifs)
- un champ "quantite" (le volume disponible pour chacun de ces réactifs)
 
Je souhaiterais qu'une page php affiche un tableau avec trois colonnes. Une première colonne "nom", une seconde "quantité initiale" (ces deux colonnes listeraient ni plus ni moins les données présents dans ma BDD avec les variables "nom" et "quantite" ) et enfin une troisième colonne "quantité à retrancher" qui présenterait une zone formulaire <input type="text"/>.
 
Si un réactif a été utilisé, l'utilisateur indique le volume utilisé dans cette zone de saisi... Si le réactif n'a pas été utilisé, cette zone reste sans information... Après envoi du formulaire, cette même page se recharge avec mise à jour des quantités pour les réactifs utilisés.
 
Faire un tableau qui listerait les noms et quantités des réactifs ne me pose pas de souci, c'est cette troisième colonne qui me bloque complétement...
 
Merci beaucoup aux personnes qui pourront m'aider !!!
 
Cordialement,
 
Thomas
 
 
 
 
 
 
Voilà la structure que j'ai pour le moment pour cette page :
 
 

Code :
  1. <form method="post" action="majcatalogue.php">
  2. <table>
  3.     <tr>
  4.         <td>nom du réactif</td>
  5.         <td>quantité<br />initiale</td>
  6.         <td>quantité<br />utilisée</td>
  7.     </tr>
  8. <?php
  9. // Là tout ce qui va bien pour se connecter à la BDD
  10. $reponse = mysql_query("SELECT * FROM reactifs WHERE quantite>0 ORDER BY nom" );
  11. while ($donnees = mysql_fetch_array($reponse))
  12. {
  13. echo "<tr>";
  14.     echo "<td>";
  15.         echo $donnees['nom'];
  16.     echo "</td>";
  17.     echo "<td>";
  18.         echo $donnees['quantite'];
  19.     echo "</td>";
  20.     echo "<td>";
  21.         // endroit ou il faut afficher la zone de saisi "text" permettant la mise à jour de $quantite à  l'envoi du formulaire... C'est là que je bloque :(
  22.     echo "</td>";
  23. echo "</tr>";
  24. }
  25. ?>
  26. </table>
  27. <input type="submit" /> <input type="reset" />
  28. </form>


mood
Publicité
Posté le 12-07-2008 à 22:54:17  profilanswer
 

n°1758921
SICKofitAL​L
misanthrope
Posté le 13-07-2008 à 00:09:42  profilanswer
 

Code :
  1. echo "<td>";
  2. echo "<input type='text' id='$nom' name='$nom' value='$quantite' />";
  3. echo "</td>";


 
un truc comme ca  :??:

Message cité 1 fois
Message édité par SICKofitALL le 13-07-2008 à 00:10:03

---------------
We deserve everything that's coming...
n°1758928
Tots
Posté le 13-07-2008 à 00:39:16  profilanswer
 

SICKofitALL a écrit :

un truc comme ca  :??:


 
Non... trop simple ;)
C'est la première chose que j'ai testé mais ça marche pô...
 
Merci quand même pour ton aide... Si d'autres personnes ont des idées, je suis toujours preneur ! ;)


Message édité par Tots le 13-07-2008 à 00:39:34
n°1759856
Tots
Posté le 15-07-2008 à 18:12:56  profilanswer
 

Merci pour ta réponse...
 
Mais il manque quelque chose... J'ai un tableau array associatif... Un tableau avec X lignes pour X réactifs présents dans la table..., et chaque ligne du tableau offre la possibilité de mettre à jour la quantité qui se reporte au réactif de la dite ligne...
 
Comment je peux automatiser le where reactif='nom du reactif' ? (d'ailleurs transformé en where id='id du reactif', ça sera peut être plus simple de jongler avec des chiffres puisque j'ai un champ id dans ma table)
 
En faite, à l'envoi du formulaire, il faudrait associer l'id et la quantité à retrancher pour le réactif à mettre à jour... Et ça c'est déjà au delà de mes faibles connaissance de débutant ! :)
 
Merci pour votre aide !
 
Cordialement,
 
Thomas
 
 
PS : Voici mon code pour le moment... Ca n'a pas bcp avancé...  
 

Code :
  1. <form action="majtest.php" method="post">
  2.    <table>
  3.       <tr>
  4.          <th>nom</th>
  5.          <th>quantité<br/> initiale</th>
  6.          <th>quantité<br/>utilisée</th>
  7.       </tr>
  8.  
  9.  
  10.        <?php
  11.  
  12.           mysql_connect("localhost", "root", "" ); // Connexion à MySQL
  13.           mysql_select_db("fish" ); // Sélection de la base coursphp
  14.   
  15.           $reponse = mysql_query("SELECT * FROM sondes WHERE quantite>0 ORDER BY chrom1" ); // Requête SQL
  16.   
  17.           mysql_close(); // Déconnexion de MySQL
  18.   
  19.   
  20.   
  21. while ($donnees = mysql_fetch_array($reponse))
  22. {
  23. ?>
  24.    <tr>
  25.       <td>
  26.       <?php echo $donnees['nom']; ?>
  27.       </td>
  28.       <td>
  29.       <?php echo $donnees['quantite']; ?>
  30.       </td>
  31.       <td>
  32.       <input type="text" name="quantite_utilisee" id="quantite_utilisee" size="3" />
  33.       <input type="submit" value="Modifier" />
  34.       </td>
  35.    </tr>
  36. <?php
  37. }
  38. ?>
  39.    </table>
  40.  
  41. </form>

n°1759897
esox_ch
Posté le 15-07-2008 à 18:34:42  profilanswer
 

Salut, là ton machin il marchera jamais, parce que tu as X boutons "Modifier" alors que t'as un seul form .. Du coups t'envoie toujours tout ton tableau alors que tu veux envoyer une seule ligne..
 
Moi ce que je fais dans ce genre de cas, c'est que je crée 1 form par ligne :
 

Code :
  1. while(..)
  2. {
  3. ?>
  4.    <tr>
  5.       <td>
  6.       <?php echo $donnees['nom']; ?>
  7.       </td>
  8.       <td>
  9.       <?php echo $donnees['quantite']; ?>
  10.       </td>
  11.       <td>
  12.       <form action="majtest.php" method="post">
  13.      <input type="hidden" name="id" value="<?=$donnees['id]?>"/>
  14.       <input type="text" name="quantite_utilisee" id="quantite_utilisee" size="3" />
  15.       <input type="submit" value="Modifier" />
  16. </form>
  17.       </td>
  18.    </tr>
  19. <?
  20. }


 
De cette manière tu passes au formulaire un champ ID contenant l'ID de ta ligne.
Après quand tu reçois ton form t'auras plus qu'à faire une requête du style :
 
UPDATE sondes quantite = $_POST['quantite_utilisee'] where id = $_POST['id];
 
P.S: La requête telle que je te l'ai écrite là c'est pour te donner la voie, tu dois impérativement sécuriser les string avant sinon ta bdd risque de se retrouver à plat ventre si un méchant passe par là.
Si t'as mysqli installé sur ton serveur utilise ça :
http://php.oregonstate.edu/manual/ [...] repare.php

n°1759966
Tots
Posté le 15-07-2008 à 21:49:59  profilanswer
 

Voilà !!! Ouf !!!
 
Mon code n'est surement pas parfait mais ça marche !
 
Merci esox_ch d'avoir mit le doigt sur plusieurs soucis, ça m'a bien aidé ! (ne serait-ce que ce problème de balises <form></form> mal placées)
 
Pour dire à quel point je suis débutant, je n'avais pas du tout pensé à utiliser les formulaires cachés pour récupérer facilement les infos manquantes, c'est ça qui m'a complètement débloqué...
 
Voici le code que j'ai "trouvé" :
 
Pour le tableau :

<?php
while ($donnees = mysql_fetch_array($reponse))
{
?>
<tr>
   <td>
      <?php echo $donnees['nom']; ?>
   </td>
   <td>
      <?php echo $donnees['quantite']; ?>
   </td>
   <td>
      <form action="majtest.php" method="post">
      <input type="text" name="quantite_utilisee" size="3" />
      <input type="hidden" name="id" value="<?php echo $donnees['id']; ?>" />
      <input type="hidden" name="quantite" value="<?php echo $donnees['quantite']; ?>" />
      <input type="submit" value="Modifier" />
      </form>
   </td>
</tr>
<?php
}
?>


 
 
Et en tête de page pour recevoir et traiter les variables envoyées par le formulaire :

// Pour la sécurité :
 
$quantite = mysql_real_escape_string(htmlspecialchars($_POST['quantite']));
$quantite_utilisee = mysql_real_escape_string(htmlspecialchars($_POST['quantite_utilisee']));
 
 
// Pour la mise à jour du volume disponible :
 
$newquantite=$quantite-$quantite_utilisee;
     
if ($newquantite < 0)
{
   $newquantite = 0;
}
     
mysql_query("UPDATE sondes SET quantite='" . $newquantite . "' WHERE id='" . $_POST['id'] . "'" );


 
Merci à vous qui avez pris le temps de me répondre !
 
Cordialement,
 
Thomas

n°1760213
esox_ch
Posté le 16-07-2008 à 12:46:08  profilanswer
 

T'as oublié de sécuriser $_POST['id']

n°1760229
Profil sup​primé
Posté le 16-07-2008 à 13:23:54  answer
 

ce serais bof qu'on puisse mettre à jour toute ta table en un coup :/

n°1760495
esox_ch
Posté le 16-07-2008 à 19:05:28  profilanswer
 

C'est pas le cas, avec ce qu'il a écrit, il mettra à jour une ligne à la fois :o
Et puis de toutes façon, quoi que tu mettes à jour, si tu sécurises pas lîd, moi je te poste joli truc style  => '1;Requete Mechante style truncate users; --  
Et toi t'es dans la merde

n°1760502
Profil sup​primé
Posté le 16-07-2008 à 19:15:10  answer
 

bah en faisant une condition toujours vraie :
WHERE id='1' or '1'='1

mood
Publicité
Posté le 16-07-2008 à 19:15:10  profilanswer
 

n°1760531
Tots
Posté le 16-07-2008 à 20:08:44  profilanswer
 

Effectivement l'id est passé à l'as dans la sécurisation... L'oubli est maintenant réparé !
 
Sinon juste pour info ce programme servira a remplacer une pauvre page excel (donc déjà accessible et "ruinable" par quiconque en aurait envi) et cela restera en intranet donc bon niveau sécurité, j'ai pas besoin de pousser le truc comme un dingue... Ceci étant dis, je ne peux pas reprocher à qq'un de sensibiliser le débutant que je suis à la sécurisation de son script ! Merci donc à vous ! :)
 
Cordialement,
 
Thomas

n°1760604
esox_ch
Posté le 16-07-2008 à 23:03:28  profilanswer
 


 
My bad.. J'ai justement choisi l'exemple qu'il faut pas.
Celà dit, c'est vraiment un cas "isolé" dans le seul qu'à ce que j'en sait (et apparemment la doc semble aller dans le même sens) mysql_query est la seule fonction qui n'execute qu'une seule requête (rien n'est dit pour mysqli_query, et j'ai pas de php sous la main).  
En outre tous les autres SGBD (Postgres et SQLite en tous cas) sont susceptibles d'exécuter plusieurs requêtes à la suite.. En tous cas reste le fait qu'on peut modifier la portée de la requête en concaténant, comme dit par luc@as un 1' && 1=1  
 
Mais merci de ta correction  :jap:


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP/SQL] Mettre à jour des données dans un tableau array

 

Sujets relatifs
[php] pb avec valeurs d'un tableauActiver 2 fonctions en safe_mod dans PHP
condition where : recherche par mot clé[SQL Server] Outrepasser la limite des 8000 bytes pour OpenQuery
quel programme pour traiter des données dans excel?[postgresql] chemin de la base de données
[PHP] Acceder a un fichier depuis n'importe qu'elle page d'un site ?[PHP-MySQL] Problème récupération dernier ID d'une table.
PHP - Galerie Photo 
Plus de sujets relatifs à : [PHP/SQL] Mettre à jour des données dans un tableau array


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR