Problème d'UPDATE bdd.

Bladoom

Bladoom Le 19 décembre 2016 à 19:50 (Édité le 25 janvier 2019 à 17:52)

Bonjour tout le monde!
Je suis en plein apprentissage du PHP et je bloque sur l'UPDATE de ma bdd.
Malheureusement en suivant l'un des tuto et en l'adaptant à mon site, celui ci ne modifie pas la BDD comme je le demande et me ressort le même texte que celui déjà présent et pourtant je n'ai pas d'erreurs.

Voilà donc index.php
<?php
$bdd = new PDO("mysql:host=localhost;dbname=pizzaforever;charset=utf8", "root", "root");
$articles = $bdd->query('SELECT * FROM carte ORDER BY prix');
?>
<!DOCTYPE html>
<html>
<head>
   <title>Accueil</title>
   <meta charset="utf-8">
</head>
<body>
   <ul>
      <?php while($a = $articles->fetch()) { ?>
      <li><a href="article.php?id=<?= $a['id'] ?>"><?= $a['nom'] ?></a> | <a href="redaction.php?edit=<?= $a['id'] ?>">Modifier</a> | <a href="supprimer.php?id=<?= $a['id'] ?>">Supprimer</a></li>
      <?php } ?>
   <ul>
</body>
</html>
redaction.php
<?php
$bdd = new PDO('mysql:host=localhost;dbname=pizzaforever;charset=utf8', 'root', 'root');
$mode_edition = 0;
if(isset($_GET['edit']) AND !empty($_GET['edit'])) {
   $mode_edition = 1;
   $edit_id = htmlspecialchars($_GET['edit']);
   $edit_article = $bdd->prepare('SELECT * FROM carte WHERE id = ?');
   $edit_article->execute(array($edit_id));
   if($edit_article->rowCount() == 1) {
      $edit_article = $edit_article->fetch();
   } else {
      die('Erreur : l\'article n\'existe pas...');
   }
}
if(isset($_POST['article_nom'], $_POST['article_message'])) {
   if(!empty($_POST['article_nom']) AND !empty($_POST['article_message'])) {
      
      $article_nom = htmlspecialchars($_POST['article_nom']);
      $article_message = htmlspecialchars($_POST['article_message']);
      if($mode_edition == 0) {
         $ins = $bdd->prepare('INSERT INTO carte (nom, message) VALUES (?, ?)');
         $ins->execute(array($article_nom, $article_message));
         $message = 'Votre article a bien été posté';
      } else {
         $update = $bdd->prepare('UPDATE carte SET nom = ?, message = ?, WHERE id = ?');
         $update->execute(array($article_nom, $article_message, $edit_id));
         header('Location: article.php?id='.$edit_id);
         $message = 'Votre article a bien été mis à jour !';
      }
   } else {
      $message = 'Veuillez remplir tous les champs';
   }
}
?>
<!DOCTYPE html>
<html>
<head>
   <title>Rédaction / Edition</title>
   <meta charset="utf-8">
</head>
<body>
   <form method="POST">
      <input type="text" name="article_nom" placeholder="nom"<?php if($mode_edition == 1) { ?> value="<?= 
      $edit_article['nom'] ?>"<?php } ?> /><br />
      <textarea name="article_message" placeholder="message de l'article"><?php if($mode_edition == 1) { ?><?= 
      $edit_article['message'] ?><?php } ?></textarea><br />
      <input type="submit" value="Envoyer l'article" />
   </form>
   <br />
   <?php if(isset($message)) { echo $message; } ?>
</body>
</html>
Et article.php
<?php
$bdd = new PDO('mysql:host=localhost;dbname=pizzaforever;charset=utf8', 'root', 'root');
if(isset($_GET['id']) AND !empty($_GET['id'])) {
   $get_id = htmlspecialchars($_GET['id']);
   $article = $bdd->prepare('SELECT * FROM carte WHERE id = ?');
   $article->execute(array($get_id));
   if($article->rowCount() == 1) {
      $article = $article->fetch();
      $titre = $article['nom'];
      $contenu = $article['message'];
   } else {
      die('Cet article n\'existe pas !');
   }
} else {
   die('Erreur');
}
?>
<!DOCTYPE html>
<html>
<head>
   <title>Accueil</title>
   <meta charset="utf-8">
</head>
<body>
   <h1><?= $titre ?></h1>
   <p><?= $contenu ?></p>
</body>
</html>
J'espère que vous aurez compris mon problème et vous remercie d'avance pour toute l'aide que vous pourrez m'apporter 😀 !
DarkYT_

DarkYT_ Le 19 décembre 2016 à 20:15

Salut, possible d'avoir un screen de ta bdd plz?
Bladoom

Bladoom Le 19 décembre 2016 à 20:38

`carte` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nom` varchar(255) NOT NULL,
  `message` varchar(255) NOT NULL,
  `genre` varchar(255) NOT NULL,
  `prix` int(11) NOT NULL,
  `image` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=65 DEFAULT CHARSET=latin1;
Voila la structure de ma base "carte".
DarkYT_

DarkYT_ Le 19 décembre 2016 à 21:41

Je crois, je ne suis pas sûr, que c'est parceque tes champs de ta bdd ne sont pas en NULL par défaut, ce qu'il faudrais faire pour éviter qu'il y ai un pb si tu ne les remplis pas. Met les donc en NULL par defaut et dis moi si ca marche pcq je ne vois que ca
Bladoom

Bladoom Le 19 décembre 2016 à 21:51

Bien vu, je viens d'essayer mais malheureusement l'UPDATE ne fonctionne toujours pas
DarkYT_

DarkYT_ Le 19 décembre 2016 à 22:18

Après ton $update, fais un var_dump de $article_nom et $article_message et $edit_id pour voir si ce que tu envoi est bien modifié et si ca vient de ta bdd ou de ton code
Bladoom

Bladoom Le 20 décembre 2016 à 14:07 (Édité le 20 décembre 2016 à 14:08)

C:\wamp641\www\pizza\admin\essai\redaction.php:27:string 'Essai' (length=5)
C:\wamp641\www\pizza\admin\essai\redaction.php:27:string 'Essai, essai.' (length=13)
C:\wamp641\www\pizza\admin\essai\redaction.php:27:string '8' (length=1)
Après avoir entré les données dans le formulaire voila ce qu'il me sort, avec " Votre article a bien été mis à jour ! " Pourtant rien ne change.. Je ne comprend vraiment pas..
DarkYT_

DarkYT_ Le 20 décembre 2016 à 17:31

Et c'est bien le texte modifié ou alors c'est le texte d'avant la modif ?
Bladoom

Bladoom Le 20 décembre 2016 à 18:12

C'est bien le texte modifié, récupérer par le var_dump. D’où mon incompréhension qu'il ne les enregistres pas
Bladoom

Bladoom Le 20 décembre 2016 à 19:39 (Édité le 20 décembre 2016 à 19:40)

J'ai essayer d'une autre manière d'UPDATE ma BDD mais rien n'y fait.

La page qui affiche les produits avec l'option de modification :
<?php

$bdd = new PDO('mysql:host=localhost;dbname=pizzaforever;charset=utf8', 'root', 'root');


$reponse = $bdd->query('SELECT * FROM carte ORDER BY genre ');



while ($produits = $reponse->fetch())
{
?>
<table>
<th><?php echo $produits['nom']; ?></th>
<th><?php echo $produits['message']; ?></th>
<th><?php echo $produits['genre']; ?></th>
<th><?php echo $produits['prix']; ?></th>
<th><img width="100px" height="100px" src="photo/<?php echo $produits['image'];?>"/></th>
<th><a href="modification2.php?id='<?php echo $produits['id'];?>'">Modifier</a></th>
</table>
<?php
}
?> 
Celle qui permet d'entré les nouvelles données :
<?php

$bdd = new PDO('mysql:host=localhost;dbname=pizzaforever;charset=utf8', 'root', 'root');

$req = $bdd->prepare('SELECT * FROM carte WHERE id='.$_GET['id'] );
$req->execute();
while ($produits = $req->fetch())
{
?>
<form name="modification" action="modification3.php" method="post">
<input type="hidden" name="id" value="<?php echo($_GET['id']) ;?>">
<table border="0" align="center" cellspacing="2" cellpadding="2">
<tr align="center">
<td>Nom de produit</td>
<td><input type="text" name="nom" value="<?php echo($produits['nom']) ;?>"></td>
</tr>
<tr align="center">
<td>message</td>
<td><input type="text" name="message" value="<?php echo($produits['message']) ;?>"></td>
</tr>
<tr align="center">
<td>genre</td>
<td><input type="text" name="genre" value="<?php echo($produits['genre']) ;?>"></td>
</tr>
<tr align="center">
<td>prix</td>
<td><input type="text" name="prix" value="<?php echo($produits['prix']) ;?>"></td>
</tr>
<tr align="center">
<td>Image</td>
<td><input type="file" name="image" value="<?php echo($produits['image']) ;?>"></td>
</tr>
<tr align="center">
<td colspan="2"><input type="submit" value="modifier" name="modifier"></td>
</tr>
</table>
</form>

<?php
}
?>

Et enfin la page contenant l'UPDATE :
<?php


  
if (isset($_POST['nom']) AND $_POST['nom'] !== "")
    {  
  


  if (isset($_POST['message']) AND $_POST['message'] !== "")

       {


         if (isset($_POST['genre']) AND $_POST['genre'] !== "")
            {    
           


             if (isset($_POST['prix']) AND $_POST['prix'] !== "")
                {
                    
                if (isset($_POST['image']) AND $_POST['image'] !== "")
                    {



try
        {
            $bdd=new PDO('mysql:host=localhost;pizzaforever', 'root', 'root');
        
        


    
    $req = $bdd->prepare('UPDATE carte SET nom = :nouveau_nom, message = :nouveau_message, genre = :nouveau_genre, prix = :nouveau_prix, image = :nouvelle_image WHERE nom = :nom ');
        
    $req->execute(array( 
            'nouveau_nom' => $_POST['nom'],
            'nouveau_message' => $_POST['message'],
            'nouveau_genre' => $_POST['genre'],
            'nouveau_prix' => $_POST['prix'],
            'nouvelle_image' => $_POST['image']
            ));            
       }
  catch(Exception $e)
    {
      die('Erreur:'.$e->getMessage());
    }
  $req->closeCursor();
          
          }
            }
            }
      
       }
  
  echo'<p> votre présentation a bien été modifiée</p>';
    }

 else
    {      
  echo '<p>Vous n\'avez pas remplis touts les champs demandés</p>';
  }
  header('Location: modifier.php');
?>
Pourtant toujours aucune erreur..
DarkYT_

DarkYT_ Le 20 décembre 2016 à 20:01

@PrimFX help please parceque la je seche
TheOldNoob

TheOldNoob Le 20 décembre 2016 à 20:06

Salut l'ami,

En local, pour accéder a ta bdd, il n'y a pas de mot de passe, a moins que tu n'ai rajouter root comme mot de passe le second champs doit donc être vide
Bladoom

Bladoom Le 20 décembre 2016 à 20:42 (Édité le 20 décembre 2016 à 20:43)

Hello TheOldNoob !
J'ai effectivement ajouté un "root" pour le mot de passe en localhost
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte