IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

BindParam et UPDATE [PDO]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Par défaut BindParam et UPDATE
    Bonjour, j'essaies ceci avec des variantes de syntaxe et je n'y arrive pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        $pdo_statement=$pdo_conn->prepare("UPDATE onglet SET titre = :titre, texte = :texte WERE id = :id");
     
        $pdo_statement->bindParam(':id', $_GET['id'], PDO::PARAM_INT);
        $pdo_statement->bindParam(':titre', $_POST['titre'], PDO::PARAM_STR);
        $pdo_statement->bindParam(':texte', $_POST['texte'], PDO::PARAM_STR);
     
        $result = $pdo_statement->execute();
    L'erreur obtenu:
    PHP Parse error: syntax error, unexpected '$_GET' (T_VARIABLE),

    Je ne vois pas c'est quoi le problème.

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 599
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 599
    Par défaut
    ce code à l'air correct, vous avez peut-être une apostrophe simple non fermée dans le code avant.

  3. #3
    Membre éclairé Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Par défaut J'ai modifié pour tester
    Toujours le même erreur après avoir modifié.
    L'erreur:
    syntax error, unexpected ''$id'' (T_CONSTANT_ENCAPSED_STRING), expecting ')' in



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
     
    ​<?php
    require_once("db.php");
     
    $id = $_GET['id'];
     
    if(!empty($_POST["save_record"])) {
        $pdo_statement=$pdo_conn->prepare(' UPDATE onglet SET titre = :titre, texte = :texte WERE id = :id ');
     
    $pdo_statement->bindParam(':id',  $id,  PDO::PARAM_INT);
    $pdo_statement->bindParam(':titre', $_POST["titre"], PDO::PARAM_STR);
    $pdo_statement->bindParam(':texte', $_POST["texte"], PDO::PARAM_STR);
     
        $result = $pdo_statement->execute();
        if($result) {
            header('location:index.php');
        }
    }
     
    $pdo_statement = $pdo_conn->prepare('SELECT id,titre,texte FROM onglet WHERE id= :id');
    $pdo_statement->bindParam(':id', $id, PDO::PARAM_INT);
    $pdo_statement->execute();
    $result = $pdo_statement->fetchAll();
     
    ?>
     
    <form name="frmAdd" action="" method="POST" accept-charset="utf-8">
          <textarea name="titre" rows="5" required ><?php echo htmlspecialchars($result[0]['titre']); ?></textarea>
          <textarea name="texte" rows="5" required ><?php echo htmlspecialchars($result[0]['texte']); ?></textarea>
          <input name="save_record" type="submit" value="Sauvegarder" />
          <input type="button" name="cancel" value="Annuler" />         
    </form>

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Par défaut
    Bonjour,

    Vous avez déjà un indice, il faut bien lire le message d'erreur. D'ailleurs, il devrait mentionner la ligne mais en réalité c'est souvent la ligne du dessus qui pose problème à cause d'une mauvaise clôture, par exemple un ; manquant.

    Dans le code que vous avez posté, il semble y avoir des espaces ou caractères invisibles. C'est peut-être donc une erreur de parsing un peu pernicieuse. Je vous conseille de réviser tous les interlignes.

  5. #5
    Membre éclairé Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Par défaut
    Aucune idée du problème.

  6. #6
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    Donne le message d'erreur complet
    Indente correctement ton script
    Après un header('Location: ...') on met généralement un exit() pour forcer immédiatement la redirection

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Par défaut
    Citation Envoyé par dancom5 Voir le message
    Aucune idée du problème.
    Si je fais copier-coller de votre code, j'ai aussi un problème de parsing. Il y a des caractères invisibles au niveau des lignes blanches. Ces erreurs disparaissent quand je supprime les interlignes, quitte à les re-créer en tapant Enter...

  8. #8
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 599
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 599
    Par défaut
    Citation Envoyé par binarygirl Voir le message
    Si je fais copier-coller de votre code, j'ai aussi un problème de parsing. Il y a des caractères invisibles au niveau des lignes blanches.
    c'est la balise code du forum qui ajoute ça dans la lignes vides.

  9. #9
    Membre éclairé Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Par défaut Résolution au problème
    Il me manquait une variable dans la connexion $host et ça résolu mon problème. Pour aider quelqu'un, je soumets ma solution.

    Fichier de connexion:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    <?php
     
    $host = '127.0.0.1';
    $db =     'bdd';
    $user = bdd';
    $pass = 'tv5juq';
    
    class Connection
    {
        public static function make($host, $db, $user, $pass)
        {
            $dsn = "mysql:host=$host;dbname=$db;charset=UTF8";
    
            try {
                $options = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                    PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
                    PDO::ATTR_EMULATE_PREPARES => false];
    
                return new PDO($dsn, $user, $pass, $options);
            } catch (PDOException $e) {
                die($e->getMessage());
            }
        }
    }
    
    return Connection::make($host, $db, $user, $pass);

    Requête SELECT et UPDATE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    <?php
    $pdo = require 'conn.php';
     
    $_GET["id"] = 1;
     
    $_POST["description"] = 'test';
     
    $sql = 'UPDATE meta SET description = :description WHERE id = :id';
    $statement = $pdo->prepare($sql);
    $statement->bindParam(':id', $_GET["id"], PDO::PARAM_INT);
    $statement->bindParam(':description', $_POST["description"], PDO::PARAM_STR);
    if ($statement->execute()) {
        echo "The meta has been updated successfully!";
    }
     
     
    $sql = 'SELECT * FROM meta WHERE id= :id';
    $statement = $pdo->prepare($sql);
    $statement->bindParam(':id', $_GET["id"], PDO::PARAM_INT);
    $statement->execute();
    $item = $statement->fetch(PDO::FETCH_ASSOC);
    if ($item) {
        echo $item['id'] . ' ' . htmlspecialchars($item['description']);
    } else {
        echo "item not found.";
    }
    Ceci fonctionne très bien et constitue ma solution. Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête update à partir d'une autre table
    Par amiral thrawn dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/02/2024, 11h40
  2. [MySQL] PDO update avec bindParam dans des boucles
    Par rvm31 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/09/2017, 11h12
  3. [dBase]il y a mieux que la commande sql UPDATE ?
    Par sana72 dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 12/12/2002, 11h59
  4. Réponses: 3
    Dernier message: 10/11/2002, 11h03
  5. update et virgule
    Par Delph dans le forum Bases de données
    Réponses: 8
    Dernier message: 27/08/2002, 14h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo