Forums Développement Multimédia

Aller au contenu

- - - - -

Insérer, modifier, supprimer des données en PHP

TUTO CODE

2 réponses à ce sujet

#1 LE CARROU

    Ceinture Blanche

  • Members
  • Pip
  • 3 messages

Posté 15 November 2017 - 17:10 PM

Bonjour,

Je suis nouveau sur ce site et grand débutant en programmation. Je travaille sous PHP/MySQL.

J'ai débuté le tuto de Qwix sur ce site bien qu'il date un peu (2006). Je l'ai suivi à la lettre et adapté en PDO et tout fonctionne nickel à l'exception des formulaires de suppression mais j'ai prévu d'y revenir plus tard.

Maintenant, j'essaie de l'adapter à mes propres données pour la saisie/modification. J'ai donc une table gbd_dat avec 9 variables toutes en vachar255 à l'exception de l'id et de non_rec qui sont de type int(11).

J'ai réussi à faire mes deux premiers formulaire insertion1.php et insertion2.php et je peux enregistrer des données en base. Par contre, je ne parviens pas à adapter le code pour la modification et j'ai les messages d'erreurs ci-suivants :
( ! ) Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de 'cor = '' in C:\wamp64\www\infos\modification3.php on line 58
( ! ) PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de 'cor = '' non_rec = 0 com = '' WHERE id = '33'' à la ligne 8 in C:\wamp64\www\infos\modification3.php on line 58

Je ne sais pas exactement où se situe le problème même si je pense que çà vient de la variable numérique non_rec. Quand je fait un var_dump($_POS[''non_rec"]) je vois que ma variable sort en texte '0' ; j'ai essayé de la passer en numérique avec intval($_POS[''non_rec"]) mais çà ne change rien.

modification1.php


<html>
  <head>
        <title>modification de données en PHP :: partie 1</title>
  </head>
<body>
<?php
//connection au serveur
try
{
// On se connecte à MySQL
$bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}

//requête SQL:
$sql = "SELECT * FROM gbd_dat ORDER BY pat, fic, que" ;

//exécution de la requête:
$result = $bdd->query($sql);

//affichage des données:
while ($donnees = $result->fetch(PDO::FETCH_ASSOC))
{
echo(
"<div align=\"center\">"
.$donnees['pat']." ".$donnees['fic']
." <a href=\"modification2.php?idPersonne=".$donnees['id']."\">modifier</a></div>\n"
) ;
}
?>
</body>
</html>
 

modification2.php


<html>
  <head>
        <title>modification de données en PHP :: partie 1</title>
  </head>
<body>
<?php
//connection au serveur
try
{
// On se connecte à MySQL
$bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}

//requête SQL:
$sql = "SELECT * FROM gbd_dat ORDER BY pat, fic, que" ;

//exécution de la requête:
$result = $bdd->query($sql);

//affichage des données:
while ($donnees = $result->fetch(PDO::FETCH_ASSOC))
{
echo(
"<div align=\"center\">"
.$donnees['pat']." ".$donnees['fic']
." <a href=\"modification2.php?idPersonne=".$donnees['id']."\">modifier</a></div>\n"
) ;
}
?>
</body>
</html>
 

modification3.php


<?php
//connection au serveur
try
{
// On se connecte à MySQL
$bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}

//récupération des valeurs des champs:
//numéro patient:
$patient = $_POST["pat"] ;
//Fiche:
$fiche = $_POST["fic"] ;
//Question:
$question = $_POST["que"] ;
//Description:
$description = $_POST["des"] ;
//Détails:
$details = $_POST["det"] ;
//Correction:
$correction = $_POST["cor"] ;
//Non récupérable:
$nonrecuperable = intval($_POST["non_rec"]) ;
//Commentaires :
$commentaires = $_POST["com"] ;
var_dump($_POST["pat"]) ;
var_dump($_POST["fic"]) ;
var_dump($_POST["que"]) ;
var_dump($_POST["des"]) ;
var_dump($_POST["det"]) ;
var_dump($_POST["cor"]) ;
var_dump($_POST["non_rec"]) ;
var_dump($_POST["com"]) ;

//récupération de l'identifiant de la personne:
$id = $_POST["id"] ;

//création de la requête SQL:
$sql = "UPDATE gbd_dat
                SET
                pat = '$patient',
         fic = '$fiche',
  que = '$question',
  des = '$description',
  det = '$details'
  cor = '$correction'
  non_rec = $nonrecuperable
  com = '$commentaires'
                WHERE id = '$id' "
;
//exécution de la requête SQL:
$requete = $bdd->query($sql);

//affichage des résultats, pour savoir si la modification a marchée:
if($requete)
{
        echo("La modification à été correctement effectuée") ;
}
else
{
        echo("La modification à échouée") ;
}
?>
 


#2 LE CARROU

    Ceinture Blanche

  • Members
  • Pip
  • 3 messages

Posté 15 November 2017 - 17:26 PM

pardon !
je viens de voir qu'il me manquait des virgule dans la requête...

#3 LE CARROU

    Ceinture Blanche

  • Members
  • Pip
  • 3 messages

Posté 16 November 2017 - 15:38 PM

Bonjour

j’ai bien compris le fonctionnement du code de Qwix et j’ai réussi à obtenir le même résultat après l’avoir adapté en PDO (codes ci-dessous).

  • On affiche les données de la base dans une page modification1.php ; On passe l’id de l’enregistrement à modifier par l’URL et on récupère ensuite l’id par la méthode GET sur la page suivante modification2.php?id. On a donc autant de boutons "modifier" redirigeant vers une page de modification2.php?id que d’enregistrement dans la table.

  • Les champs du formulaire modification2.php?id sont pré-remplis par une requête sur les données disponibles (value). L’utilisateur peut donc modifier et lorsqu’il clique sur modifier, les données du formulaire sont envoyées par méthode POST à une 3ème page modification3.php qui fait la mise à jour à l’aide d’une requête UPDATE avec un WHERE sur l’id.
Tout çà marche parfaitement même si j’ai bien compris qu’il faut l’optimiser pour la sécurité mais je verrai çà dans un second temps.
Ce que je veux faire maintenant, c’est faire des UPDATE multiples.
J’affiche les données de ma table sous forme de tableau ; Il faut donc que je passe plusieurs id.
Il me semble que la solution serait :

  • d’utiliser un array sur l’id (ligne 25 modification2.php) puis

  • parcourir l’array en faisant un while plutôt qu’un if (ligne 34 modification2.php). Mais là j’ai un peu de mal à concevoir le code. Il faut en plus que je "sorte" le bouton "Modifier" de la page modification2.php de la boucle pour que tout soit modifié d’un coup et pas seulement pour chaque enregistrement.

  • Enfin, dans ma page modification3.php (ligne 36), il faut que je boucle sur l’id pour mettre à jour tous les enregistrements de la page modification2.php.
Mais n’ayant jusqu’à présent jamais utilisé d’array, je n’arrive pas à mettre tout çà en place.
Si quelqu’un peut m’aider…

modification1.php


<html>
  <head>
    <title>modification de données en PHP :: partie 1</title>
  </head>
<body>
<?php
//connection au serveur
try
{
// On se connecte à MySQL
$bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}

//requête SQL:
$sql = "SELECT * FROM gbd_dat ORDER BY pat, fic, que" ;

//exécution de la requête:
$result = $bdd->query($sql);

//affichage des données:
while ($donnees = $result->fetch(PDO::FETCH_ASSOC))
{
echo(
"<div align=\"center\">"
.$donnees['pat']." ".$donnees['fic']
." <a href=\"modification2.php?idPersonne=".$donnees['id']."\">modifier</a></div>\n"
) ;
}
?>
</body>
</html>
 

modification2.php


<html>
  <head>
    <meta charset="utf-8" />
    <link rel="stylesheet" href="style.css" />
    <title>modification de données en PHP :: partie2</title>
  </head>
<body>
<?php
//connection au serveur
try
{
// On se connecte à MySQL
$bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}


//récupération de la variable d'URL,
//qui va nous permettre de savoir quel enregistrement modifier
$id  = $_GET["idPersonne"] ;

//requête SQL:
$sql = "SELECT * FROM gbd_dat WHERE id = ".$id ;

//exécution de la requête:
$result = $bdd->query($sql);

//affichage des données:
if($donnees = $result->fetch(PDO::FETCH_ASSOC))
{
?>
<form name="insertion" action="modification3.php" method="POST">
  <input type="hidden" name="id" value="<?php echo($id) ;?>">
  <table border="0" align="center" cellspacing="2" cellpadding="2">
    <tr align="center">
          <td>Patient</td>
          <td><input type="text" name="pat" value="<?php echo $donnees['pat'] ;?>"></td>
    </tr>
    <tr align="center">
          <td>Fiche</td>
          <td><input type="text" name="fic" value="<?php echo $donnees['fic'] ;?>"></td>
    </tr>
    <tr align="center">
          <td>Question</td>
          <td><input type="text" name="que" value="<?php echo $donnees['que'] ;?>"></td>
    </tr>
    <tr align="center">
          <td>Description</td>
          <td><input type="text" name="des" value="<?php echo $donnees['des'] ;?>"></td>
    </tr>
    <tr align="center">
          <td>Détails</td>
          <td><input type="text" name="det" value="<?php echo $donnees['det'] ;?>"></td>
    </tr>
    <tr align="center">
          <td>Corrections</td>
          <td><input type="text" name="cor" value="<?php echo $donnees['cor'] ;?>"></td>
    </tr>
    <tr align="center">
          <td>Non récupérable</td>
          <td><input type="number" name="non_rec" value="<?php echo $donnees['non_rec'] ;?>"></td>
    </tr>
    <tr align="center">
          <td>Commentaires</td>
          <td><input type="text" name="com" value="<?php echo $donnees['com'] ;?>"></td>
    </tr>
    <tr align="center">
          <td colspan="2"><input type="submit" value="modifier"></td>
    </tr>
  </table>
</form>
  <?php
  }//fin if
  ?>
</body>
</html>
 

modification3.php


<?php
//connection au serveur
try
{
// On se connecte à MySQL
$bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}

//récupération des valeurs des champs:
//numéro patient:
$patient = $_POST["pat"] ;
//Fiche:
$fiche = $_POST["fic"] ;
//Question:
$question = $_POST["que"] ;
//Description:
$description = $_POST["des"] ;
//Détails:
$details = $_POST["det"] ;
//Correction:
$correction = $_POST["cor"] ;
//Non récupérable:
$nonrecuperable = $_POST["non_rec"] ;
//Commentaires :
$commentaires = $_POST["com"] ;
//récupération de l'identifiant de la personne:
$id = $_POST["id"] ;

//création de la requête SQL:
$sql = "UPDATE gbd_dat
            SET
            pat = '$patient',
         fic = '$fiche',
  que = '$question',
  des = '$description',
  det = '$details',
  cor = '$correction',
  non_rec = $nonrecuperable,
  com = '$commentaires'
            WHERE id = '$id' "
;
//exécution de la requête SQL:
$requete = $bdd->query($sql);

//affichage des résultats, pour savoir si la modification a marchée:
if($requete)
{
    echo("La modification à été correctement effectuée") ;
}
else
{
    echo("La modification à échouée") ;
}
?>
 





Répondre à ce sujet



  

1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP