Page 1 sur 1

la fonction Update

Posté : 16 avr. 2014, 09:21
par Sorekal
Bonjour à tous,

Je suis débutant en PHP (étant en première année de BTS) et je me retrouve sur un projet l'impliquant.

Alors, je suis chargé de créer un formulaire, assez important, (20 entrées) et lorsque je clic sur submit, ma base de données MySQL s'incrémente.

Jusqu'ici , ça va, j'y arrive.

Ensuite, on me demande d'afficher ce que contient la base de données, alors j'ai utiliser un select * from [la table], et j'affiche ceci sous forme de tableau.

j'y arrive encore une fois.

Maintenant le hic est qu'on me demande de pouvoir modifier l'affichage ( au cas ou un utilisateur se rend compte qu'il s'est trompé par exemple ) , alors j'ai utiliser un input dans mon echo ce qui me permet de pouvoir saisir du texte, puis j'ai utiliser update pour la modification. Ceci marche , cependant, la modification n'a lieu que sur la dernière ligne entrée dans la BDD.

Ex - imaginons que ces valeurs sont ma première ligne :

Bonjour Bonjour Bonjour
lorsque je fais mon Update, j'arrive à modifier la ligne.

Mais si j'ai

Bonjour Bonjour Bonjour
Bonjour Bonjour Bonjour

je ne peux modifier que la seconde ligne et la première est figé et le update n'est pas en compte.

Donc j'aimerai savoir s'il existe une fonction qui permette de pouvoir changer n'importe quelle case, n'importe ou dans l'affichage.

Merci pour votre aide .

Cordialement;

Sorekal

Re: la fonction Update

Posté : 16 avr. 2014, 10:57
par moogli
bonjour,

sans code on ne peux pas t'aider.

tous ce que je peux te dire, c'est qu'il y a de forte chances que tu n'effectue pas de boucle, ou que tu ne gère pas correctement le prédicat du where.

si tu as prévu des lignes avec champs de formulaire, il te faut utiliser la notation tableau pour nommer les champs (<input name="toto[]" />)
il te faut passer la clef primaire de chaque ligne dans le tableau (champs hidden).

Ensuite tu boucle sur l'un des tableau pour récupérer les données.

As tu envisagé une solution du type "fenêtre modale" ?(un bouton modifier, une fenêtre modale qui s'affiche au dessus avec les infos de la ligne et donc gérer qu'une seule modification)


@+

Re: la fonction Update

Posté : 16 avr. 2014, 11:26
par sorekal
Bonjour à toi ,

Merci pour la réponse, étant débutant, je n'ai pas beaucoup de bagage technique pour faire un code optimal , donc je bricole en quelque sorte .

voici mon code :
<?php

$req = mysql_query('select * from installhlr');



?>


<form action="modifhlr.php" method="POST">
    <?php
    while($dnn = mysql_fetch_array($req))
    {
        echo "<tr>";
        echo "<td class='left'><input type='hidden' name='id' value=".$dnn['id']."></td>";
        echo "<td class='left'><input type='text' name='type' value=".$dnn['type']."></td>";
        echo "<td class='left'><input type='text' name='priorite' value=".$dnn['priorite']."></td>";
        echo "<td class='left'><input type='text' name='date' value=".$dnn['date']."></td>";
        echo "<td class='left'><input type='text' name='tech' value=".$dnn['tech']."></td>";
        echo "<td class='left'><input type='text' name='mid' value=".$dnn['mid']."></td>";
        echo "<td class='left'><input type='text' name='offre' value=".$dnn['offre']."></td>";
        echo "<td class='left'><input type='text' name='loopback' value=".$dnn['loopback']."></td>";
        echo "<td class='left'><input type='text' name='ligne' value=".$dnn['ligne']."></td>";
        
        if ($dnn['statut'] == "RFT")
        {
            echo "<td class='left' style='background-color:green'><input type='text' name='statut' value=".$dnn['statut']."></td>";
        }
        else if ($dnn['statut'] == "FAILED")
        {
            echo "<td class='left' style='background-color:red'><input type='text' name='statut' value=".$dnn['statut']."></td>";
        }
        else if ($dnn['statut'] == "RFNI")
        {
            echo "<td class='left' style='background-color:orange'><input type='text' name='statut' value=".$dnn['statut']."></td>";
        }
        else if ($dnn['statut'] == "FAULT")
        {
            echo "<td class='left' style='background-color:grey'><input type='text' name='statut' value=".$dnn['statut']."></td>";
        }
        
        echo "<td class='left'><input type='text' name='cause' value=".$dnn['cause']."></td>";
        echo "<td class='left'><input type='text' name='statutoptedis' value=".$dnn['statutoptedis']."></td>";
        echo "<td class='left'><textarea name='commentaires'> ".$dnn['commentaires']."</textarea></td>";
        echo "<td class='left'><input type='text' name='semaine' value=".$dnn['semaine']."></td>";
        echo "<td class='left'><input type='text' name='techmer' value=".$dnn['techmer']."></td>";
        echo "<td class='left'><input type='text' name='autonomie' value=".$dnn['autonomie']."></td>";
        echo "<td class='left'><textarea name='comautonomie'> ".$dnn['comautonomie']."</textarea></td>";
        echo "<td class='left'><input type='text' name='defaillanceintegrateur' value=".$dnn['defaillanceintegrateur']."></td>";
        echo "<td class='left'><textarea name='comdefaillanceintegrateur'> ".$dnn['comdefaillanceintegrateur']."</textarea></td>";
        echo "<td class='left'><input type='text' name='repriserft' value=".$dnn['repriserft']."></td>";
        echo "<td class='left'><textarea name='comrepriserft'> ".$dnn['comrepriserft']."</textarea></td>";
        echo "<td> <input type='submit' name='form1' value='envoyer'></td>";
        echo "</tr>";
    } 
    ?>
    
ceci est mon affichage, avec des input donc pour pouvoir modifier

<?php


if (isset($_POST["form1"])) {
// On commence par récupérer les champs


if(isset($_POST['type']))      $type=$_POST['type'];
else      $type="";

if(isset($_POST['priorite']))      $priorite=$_POST['priorite'];
else      $priorite="";

if(isset($_POST['date']))      $date=$_POST['date'];
else      $date="";

if(isset($_POST['tech']))      $tech=$_POST['tech'];
else      $tech="";

if(isset($_POST['mid']))      $mid=$_POST['mid'];
else      $mid="";

if(isset($_POST['offre']))      $offre=$_POST['offre'];
else      $offre="";

if(isset($_POST['loopback']))      $loopback=$_POST['loopback'];
else      $loopback="";

if(isset($_POST['ligne']))      $ligne=$_POST['ligne'];
else      $ligne="";

if(isset($_POST['statut']))      $statut=$_POST['statut'];
else      $statut="";

if(isset($_POST['cause']))      $cause=$_POST['cause'];
else      $cause="";

if(isset($_POST['statutoptedis']))      $statutoptedis=$_POST['statutoptedis'];
else      $statutoptedis="";

if(isset($_POST['commentaires']))      $commentaires=$_POST['commentaires'];
else      $commentaires="";

if(isset($_POST['semaine']))      $semaine=$_POST['semaine'];
else      $semaine="";

if(isset($_POST['techmer']))      $techmer=$_POST['techmer'];
else      $techmer="";

if(isset($_POST['autonomie']))      $autonomie=$_POST['autonomie'];
else      $autonomie="";

if(isset($_POST['comautonomie']))      $comautonomie=$_POST['comautonomie'];
else      $comautonomie="";

if(isset($_POST['defaillanceintegrateur']))      $defaillanceintegrateur=$_POST['defaillanceintegrateur'];
else      $defaillanceintegrateur="";

if(isset($_POST['comdefaillanceintegrateur']))      $comdefaillanceintegrateur=$_POST['comdefaillanceintegrateur'];
else      $comdefaillanceintegrateur="";

if(isset($_POST['repriserft']))      $repriserft=$_POST['repriserft'];
else      $repriserft="";

if(isset($_POST['comrepriserft']))      $comrepriserft=$_POST['comrepriserft'];
else      $comrepriserft="";


$db = mysql_connect('localhost', 'root', '')  or die('Erreur de connexion '.mysql_error());

mysql_select_db('optedis',$db)  or die('Erreur de selection '.mysql_error());

$sql = "UPDATE  installhlr SET type='$type', priorite='$priorite',date='$date', tech='$tech', mid='$mid', offre='$offre', loopback='$loopback', ligne='$ligne', statut='$statut', cause='$cause', statutoptedis='$statutoptedis', commentaires='$commentaires', semaine='$semaine', techmer='$techmer', autonomie='$autonomie', comautonomie='$comautonomie', defaillanceintegrateur='$defaillanceintegrateur', comdefaillanceintegrateur='$comdefaillanceintegrateur', repriserft='$repriserft', comrepriserft='$comrepriserft' WHERE id = ".$_POST['id']."" ;

mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 

mysql_close(); 

header("location: installhlr.php");

}
    
?> 
celui ci est mon code pour le update.

Mon problème est que si j'ai 10 ligne afficher par exemple , je peux modifier la dernière , mais pas les 9 premières .

Merci pour votre aide :)

Re: la fonction Update

Posté : 16 avr. 2014, 13:17
par xTG
Le problème est donc bien celui soulevé par Moogli.
Tes inputs ont le même nom d'une itération de boucle à une autre.
Seul le dernier est donc pris en compte lors de l'envoi du formulaire.

Il faut utiliser une notation tableau pour avoir un index pour chaque itération.
Exemple :
$array = array(1,2,3,4,5,6);
foreach($array as $value)
  echo '<input type="text" name="valeur[]" value="' . $value . '" />';
Ainsi tu réceptionneras dans cet exemple $_POST['valeur'] qui est un tableau => $_POST['valeur'][0], $_POST['valeur'][1], ect.

Re: la fonction Update

Posté : 16 avr. 2014, 13:22
par moogli
Modération :
Sorekal :
Afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ

Re: la fonction Update

Posté : 16 avr. 2014, 14:39
par sorekal
Merci beaucoup, ça marche dorénavant!