Bonjour,

Voila je rencontre un petit problème avec mon code. C'est une page editer.php ça récupère des données d'une base à partir d'un tableau qui récapitule l'ensemble des entrée.
A partir de là je peux modifier le contenu récupéré et l'enregister de retour(expression Bretonne) dans la base.
Doute sur : unlink ?
Message d'erreur dans le log php de MAMP :

[20-Jun-2017 22:15:19 Europe/Berlin] PHP Warning:  PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in /Applications/MAMP/htdocs/panier/admin/editer.php on line 71
[20-Jun-2017 22:15:19 Europe/Berlin] PHP Notice:  Undefined variable: donnees in /Applications/MAMP/htdocs/panier/admin/editer.php on line 95
[20-Jun-2017 22:15:19 Europe/Berlin] PHP Notice:  Undefined variable: donnees in /Applications/MAMP/htdocs/panier/admin/editer.php on line 101
[20-Jun-2017 22:15:19 Europe/Berlin] PHP Notice:  Undefined variable: donnees in /Applications/MAMP/htdocs/panier/admin/editer.php on line 105
[20-Jun-2017 22:15:19 Europe/Berlin] PHP Notice:  Undefined variable: donnees in /Applications/MAMP/htdocs/panier/admin/editer.php on line 109
[20-Jun-2017 22:15:19 Europe/Berlin] PHP Notice:  Undefined variable: donnees in /Applications/MAMP/htdocs/panier/admin/editer.php on line 113
[20-Jun-2017 22:20:45 Europe/Berlin] PHP Notice:  Undefined variable: donnees in /Applications/MAMP/htdocs/panier/admin/editer.php on line 95
[20-Jun-2017 22:20:45 Europe/Berlin] PHP Notice:  Undefined variable: donnees in /Applications/MAMP/htdocs/panier/admin/editer.php on line 101
[20-Jun-2017 22:20:45 Europe/Berlin] PHP Notice:  Undefined variable: donnees in /Applications/MAMP/htdocs/panier/admin/editer.php on line 105
[20-Jun-2017 22:20:45 Europe/Berlin] PHP Notice:  Undefined variable: donnees in /Applications/MAMP/htdocs/panier/admin/editer.php on line 109
[20-Jun-2017 22:20:45 Europe/Berlin] PHP Notice:  Undefined variable: donnees in /Applications/MAMP/htdocs/panier/admin/editer.php on line 113

L'UPDATE ne fonctionne pas je met le code entien de la page :

<?php  require 'inc/header.php'; ?>
<?php  require_once 'bdd.php'; ?>
<?php 
$upload_Dir = '../img/produits/' ;

if (isset($_GET['id'])) {
    $id = $_GET['id'];
    $reponse = $bdd->query("SELECT * FROM products WHERE id = ".$id);
    $reponse->execute();
    if ($reponse->rowcount()) {
        $donnees = $reponse->fetch(PDO::FETCH_ASSOC);
    }else{
        $error = "Impossible de récupérer les données !";
    }

}

// selection d'une nouvelle image si l'utilisateur en selectionne une différente
if (isset($_POST['modifier'])) {
    $name = $_POST['name'];
    $description = $_POST['description'];
    $priceJ = $_POST['priceJ'];
    $priceA = $_POST['priceA'];

    $imgName = $_FILES['image']['name'];
    $imgTmp = $_FILES['image']['tmp_name'];
    $imgSize = $_FILES['image']['size'];

    if (empty($name)) {
        $error = 'Renseigner le nom du produit';
    }elseif (empty($description)) {
        $error = 'mettre une description du produit';
    }elseif (empty($priceJ)) {
        $error = 'Renseigner un prix enfant';
    }elseif (empty($priceA)) {
        $error = 'Renseigner un prix Adulte';
    }

    if (isset($imgName)) {
        // récupérer l'extension de l'image
        $imgExt = strtolower(pathinfo($imgName, PATHINFO_EXTENSION));
        // Extension autorisé
        $allowExt = array('jpeg', 'jpg', 'png', 'gif');
        // random nouveau nom de l'image
        $userPic = time().'_'.rand(1000,9999).'.'.$imgExt;
        // vérifier validité de l'image
        if (in_array($imgExt, $allowExt)) {
            if ($imgSize < 5000000) {
                // supprimer l'ancienne image dans le dossier produits
                unlink($upload_Dir.$donnees['image']);
                move_uploaded_file($imgTmp, $upload_Dir.$userPic);
            }else{
                $error = 'Image trop lourde';
            }
        }else{
            $error = 'Merci de choisir une photo valide';
        }
    }else{
        // si pas de nouvelle image selectionnée utilisation de l'ancienne
        $userPic = $donnees['image'];
    }

    if (!isset($error)) {
        $req = $bdd->prepare("UPDATE products(name,description,priceJ,priceA,image) set name = :$name:, description = :$description, priceJ = :$priceJ, priceA = :$priceA, image = :userPic  WHERE id= :id");
        $req->execute(array(
                "id" => $_GET['id'],
                "name" => $name, 
                "description" => $description,
                "priceJ" => $priceJ,
                "priceA" => $priceA,
                "image" => $userPic
            ));

        if ($req) {
            $success = 'Modification de la base de données effectuée';

    }else{
        $error = 'Error'.$bdd->errorInfo();
    }
}
}
?>
<div class="wrapper">
    <div class="container">
        <div class="row">
            <div class="col-lg-3"></div>
            <div class="col-lg-6">
            <h2>Ajouter un nouveau produit</h2>
                <form action="editer.php" method="post" enctype="multipart/form-data">
                <input type="hidden" name="size" value="1000000">
                    <div class="form-group">
                        <label class="control-label col-lg-12">Téléchargement d'image extensions autorisées (png, jpeg, jpg, gif).</label>
                        <input type="file" name="image" class="btn-upload">
                        <div class="vignette">
                            <img src="<?php  echo $upload_Dir.$donnees['image'];  ?>" width="100">
                        </div>

                    </div>
                    <div class="form-group">
                        <label>Nom du produit</label>
                        <input type="text" name="name" id="name" class="form-control" value="<?php echo $donnees['name']; ?>">
                    </div>
                    <div class="form-group">
                        <label>Description du produit</label>
                        <textarea name="description" id="description" class="form-control" rows="3"><?php echo $donnees['description']; ?></textarea>
                    </div>
                    <div class="form-group">
                        <label>Prix du produit Junior</label>
                        <input type="text" name="priceJ" id="priceJ" class="form-control" value="<?php echo $donnees['priceJ']; ?>"><br>
                    </div>
                    <div class="form-group">
                        <label>Prix du produit Adulte</label>
                        <input type="text" name="priceA" id="priceA" class="form-control" value="<?php echo $donnees['priceA']; ?>"><br>
                    </div>

                    <input type="submit" class="btn btn-danger" id="modifier" name="modifier" value="modifier">

                </form>
                <?php  if (isset($error)) { ?>
                <div class="alert alert-danger">
                    <span class="glyphicon glyphicon-info"></span>
                    <strong><?php echo $error; ?></strong>
                </div>
                <?php } ?>
                <?php  if (isset($success)) { ?>
                <div class="alert alert-success">
                    <span class="glyphicon glyphicon-info"></span>
                    <strong><?php echo $success; ?></strong>
                </div>
                <?php } ?>

            </div>
            <div class="col-lg-3"></div>
        </div>
    </div>
</div>
<?php  require'inc/footer.php'; ?>

Merci de votre aide

18 réponses


Carouge10
Réponse acceptée

Oui et comme je dis, si on ne trouve pas de données, on les affiche quand même, ce qui est illogique.

if (isset($_GET['id'])) {
    $id = $_GET['id'];
    $reponse = $bdd->prepare("SELECT * FROM products WHERE id = ?");
    $reponse->execute(array($id));
    if ($reponse->rowcount()) {
        $donnees = $reponse->fetch(PDO::FETCH_ASSOC);
    }else{
        $error = "Impossible de récupérer les données !";
    }

}

Que l'on est une réponse ou non, le code s'exécute normalement.
D'ailleurs avec une requête préparé serait mieux.

Bonsoir,
Lis bien ceci ....

$req = $bdd->prepare("UPDATE products(name,description,priceJ,priceA,image) set name = :$name:, description = :$description, priceJ = :$priceJ, priceA = :$priceA, image = :userPic  WHERE id= :id");

les $ !!
je modifie et je te dis ça fonctionne.

pas mieux log php de MAMP :

[20-Jun-2017 22:32:25 Europe/Berlin] PHP Notice:  Undefined variable: donnees in /Applications/MAMP/htdocs/panier/admin/editer.php on line 50
[20-Jun-2017 22:32:25 Europe/Berlin] PHP Warning:  unlink(../img/produits/): Operation not permitted in /Applications/MAMP/htdocs/panier/admin/editer.php on line 50
[20-Jun-2017 22:32:25 Europe/Berlin] PHP Notice:  Undefined index: id in /Applications/MAMP/htdocs/panier/admin/editer.php on line 67
[20-Jun-2017 22:32:25 Europe/Berlin] PHP Warning:  PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in /Applications/MAMP/htdocs/panier/admin/editer.php on line 72
[20-Jun-2017 22:32:25 Europe/Berlin] PHP Notice:  Undefined variable: donnees in /Applications/MAMP/htdocs/panier/admin/editer.php on line 96
[20-Jun-2017 22:32:25 Europe/Berlin] PHP Notice:  Undefined variable: donnees in /Applications/MAMP/htdocs/panier/admin/editer.php on line 102
[20-Jun-2017 22:32:25 Europe/Berlin] PHP Notice:  Undefined variable: donnees in /Applications/MAMP/htdocs/panier/admin/editer.php on line 106
[20-Jun-2017 22:32:25 Europe/Berlin] PHP Notice:  Undefined variable: donnees in /Applications/MAMP/htdocs/panier/admin/editer.php on line 110
[20-Jun-2017 22:32:25 Europe/Berlin] PHP Notice:  Undefined variable: donnees in /Applications/MAMP/htdocs/panier/admin/editer.php on line 114

Alors en lisant l'erreur, il dit qu'il ne connais pas "$donnees" .... donc il faudrait déjà mettre un die(); juste en dessous du premier $error ....

Salut, ta requête est complétement erronnée:

voilà la façon de procéder

UPDATE table
SET colonne_1 = 'valeur 1', colonne_2 = 'valeur 2', colonne_3 = 'valeur 3'
WHERE condition

$req = $bdd->prepare("UPDATE products SET name = :name, description = :description, priceJ = :priceJ, priceA = :priceA, image = :userPic WHERE id= :id");

Voilà c'est déjà mieux

mais pour l'histoire du $donnees je ne pige pas !!

hum ligne 50 il arrive pas à trouvé la variable données pour l'explication, aprés pourquoi je ne saurais te dire j'ai pas tout lu

Je pense que le problème viens du faites que même si tu ne récupéres pas de données au début, tu fais quand même leur affichage.

pourtant elle est bien présente

c'est cette ligne :

// supprimer l'ancienne image dans le dossier produits
                unlink($upload_Dir.$donnees['image']);

Ce n'est pas ce que disent les erreurs :

[20-Jun-2017 22:32:25 Europe/Berlin] PHP Notice:  Undefined variable: donnees in /Applications/MAMP/htdocs/panier/admin/editer.php on line 96
[20-Jun-2017 22:32:25 Europe/Berlin] PHP Notice:  Undefined variable: donnees in /Applications/MAMP/htdocs/panier/admin/editer.php on line 102
[20-Jun-2017 22:32:25 Europe/Berlin] PHP Notice:  Undefined variable: donnees in /Applications/MAMP/htdocs/panier/admin/editer.php on line 106
[20-Jun-2017 22:32:25 Europe/Berlin] PHP Notice:  Undefined variable: donnees in /Applications/MAMP/htdocs/panier/admin/editer.php on line 110
[20-Jun-2017 22:32:25 Europe/Berlin] PHP Notice:  Undefined variable: donnees in /Applications/MAMP/htdocs/panier/admin/editer.php on line 114

la ligne 50, les autres c'est au niveau de mon formulaire

Undefined = introuvable donc variable donnée introuvable ligne 96 / 102 / 106 /110 /114

oui c'est ça le formulaire

en faite ce que je veux faire :
j'ai un tableau qui récupére tous les produits de ma base, puis avec un bouton editer je récupére le produit en fonction de son ID, et pour finir modifier et faire un update.
Peut être qu'on peut faire plus simple que le code que j'ai