Affichage et modification avec PDO

flo39400 Messages postés 596 Date d'inscription   Statut Membre Dernière intervention   -  
flo39400 Messages postés 596 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je viens de commencer a me mettre au PHP avec l’utilisation du PDO.
Mais j'aimerai afficher et modifier les valeurs qu'il y a dans la table 'photo' qui est dans la base de donnée 'site1' .

Mais que je puisse sélectionner la ligne puis la modifier via un <input type='' />
Puis un bouton pour valider la modification.
Tous simplement.

Si il est possible d'avoir des explications sur la façon de procéder, merci d'avance.


A voir également:

2 réponses

Dialga.Java Messages postés 38 Date d'inscription   Statut Membre Dernière intervention   11
 
Tu peux le faire facilement avec un formulaire de type post ou get

<form method="post" action="">
<input type="text" name="input" />
</form>


puis tu récupère ça en haut de ta page :

$text = htmlspecialschars($_POST['input']);


$text contiendras le contenus de l'input.
le htmlspecialschars(...); sert à te protégé des failles "XSS"
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonsoir,

le htmlspecialschars(...); sert à te protégé des failles "XSS"

Ceci n'est plus nécéssaire puisqu'en PDO tu peux (dois ...) utiliser les requêtes préparées.

Par contre.. tu peux l'utiliser éventuellement lors de l'AFFICHAGE (pas pour l'insertion en bdd)
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

Comme l'indique Dialga il te faut un Formulaire. (il a par contre oublié le bouton).

Donc un truc du genre :

<?php
//Affichage des éventuelles erreurs php
error_reporting(E_ALL);

//connexion à ta BDD
  //ici tu fais un include de ton fichier de connexion en PDO
  // par exemple :
  require_once "cnxBdd.php";

//ensuite tu récupères PROPREMENT les variables AVANT de les utiliser
$input = !empty($_POST['input']) ? $_POST['input'] : NULL;

//traitement si input n'est pas vide (modification)
if($input){
  //insertion en BDD
  $sql = " UPDATE photo SET tonchamp=:input";
  $datas = array(":input"=>$input);

  //Execution de la requete
  try{
    $requete = $bdd -> prepare($sql) ;
    $requete->execute($datas) ;
  }catch(Exception $e){
    // en cas d'erreur :
     echo " Erreur ! ".$e->getMessage();
     echo " Les datas : " ;
    print_r($datas);
 }

}


?>

<html>
  <head>
    <title>ton site</title>
  </head>
  <body>
    <!-- Formulaire-->
   <form action="" method="post">
     <input name="input" value="">
      <input type="submit" name="valider" value="envoyer">
   </form>
  </body>
</html>


NB : Pour la connexion à la bdd (fichier cnxBdd.php) tu peux t'inspirer du code suivant :
 <?php
  //fichier de connexion à la bdd : cnxBdd.php
  try{
    $bdd =new PDO('mysql:host=localhost;dbname=mabdd;charset=utf8', 'user', 'password');
   $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
 } catch(PDOException $e) {
      die('Erreur : ' . $e->getMessage());
 }
?>



NB² : Pour la récupération "propre" des variables j'ai utilisé l'écriture ternaire.
voir ici pour l'explication :
https://forums.commentcamarche.net/forum/affich-37636387-php-notice-undefined-index




NB4 : Pour ce qui est d'afficher les données présentes dans la table.. pour ça il te suffit de faire une requête de type SELECT puis de boucler dessus pour afficher les données.
Par exemple :

 //Données en BDD
  $sql = " SELECT * FROM photo ";

  //Execution de la requete
  try{
    $requete = $bdd -> prepare($sql) ;
    $requete->execute() ;
    //on stocke le résultat dans un array
    $result = $requete->fetchAll();
  }catch(Exception $e){
    // en cas d'erreur :
     echo " Erreur ! ".$e->getMessage();
     echo " Les datas : " ;
    print_r($datas);
 }

// pour l'affichage.. on boucle sur l'array
foreach($result as $row){
  //ici tu code l'affichage.....
  // par exemple :
  print_r($row);

}



Voila.. tu as toutes les billes.
0
flo39400 Messages postés 596 Date d'inscription   Statut Membre Dernière intervention   21
 
Bonjour a vous jordane45,

je remarque que vous m'aider souvent.

Donc je vais essayer tous cela je reviens bientôt et merci pour tout.
0
flo39400 Messages postés 596 Date d'inscription   Statut Membre Dernière intervention   21
 
Voila ce que j'ai tester, bon j'ai une fatal erreur mais il affiche le résultat quand même.

<?php
session_start();


//Affichage des éventuelles erreurs php
error_reporting(E_ALL);

//connexion à ta BDD
  //ici tu fais un include de ton fichier de connexion en PDO
  // par exemple :
  require_once "cnxBdd.php";

//ensuite tu récupères PROPREMENT les variables AVANT de les utiliser
$input = !empty($_POST['input']) ? $_POST['input'] : NULL;

//traitement si input n'est pas vide (modification)
if($input){
  //insertion en BDD
  $sql = " UPDATE photo SET tonchamp=:input";
  $datas = array(":input"=>$input);

  //Execution de la requete
  try{
    $requete = $bdd -> prepare($sql) ;
    $requete->execute($datas) ;
  }catch(Exception $e){
    // en cas d'erreur :
     echo " Erreur ! ".$e->getMessage();
     echo " Les datas : " ;
    print_r($datas);
 }

}

//Données en BDD
  $sql = " SELECT * FROM photo ";

  //Execution de la requete
  try{
    $requete = $bdd -> prepare($sql) ;
    $requete->execute() ;
    //on stocke le résultat dans un array
    $result = $requete->fetchAll();
  }catch(Exception $e){
    // en cas d'erreur :
     echo " Erreur ! ".$e->getMessage();
     echo " Les datas : " ;
    print_r($datas);
 }

// pour l'affichage.. on boucle sur l'array
foreach($result as $row){
  //ici tu code l'affichage.....
  // par exemple :
  print_r($row);

}


?>

<html>
  <head>
    <title>Administration</title>
  </head>
  <body>
    <!-- Formulaire-->
   <form action="" method="post">
     <input name="input" placeholder="Adresse" value="<?php echo $row['adresse']; ?>">
      <input type="submit" name="valider" value="envoyer">
   </form>
  </body>
</html>



Après le résultat que j'ai:
stdClass Object ( [id] => 1 [position] => 0 [adresse] => personnage WOW.jpeg [text] => [format] => height='800' width='700' )
( ! ) Fatal error: Cannot use object of type stdClass as array in C:\wamp64\www\final\news\admin.php on line 69 Call Stack #TimeMemoryFunctionLocation10.0004244208{main}( )...\admin.php:0





Car vu que dans la table "photo" il y a plusieurs champs il faudrait faire un while avec les différant éléments et mettre dans

<select name="" size="1">
<option><?php echo $row['position'] $row['adresse'] $row['text']; ?></option>
</select>

Et un bouton pour valider le champs sélectionner et formulaire de modification sur $row['position'] $row['adresse'] $row['text'] $row['format']
0