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 :

update pdo ne se fait pas [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut update pdo ne se fait pas
    bonjour,

    je n'arrive pas à updater une table

    voila mon formulaire

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <form id="form4" action="update_bdd.php"   method="post"  >
    <input  id="titre" name="titre" type="text"  value='<?php echo html_entity_decode(stripslashes($titre)) ;  ?>'  />
    <input  id="phone" name="phone" type="text"  value='<?php echo html_entity_decode(stripslashes($phone)) ;  ?>'  />
     <input type="hidden" name "datepost" id="datepost" value="<?php echo date("F j, Y"); ?>" />
     <input type="hidden" id="id_commune" value="<?php echo $id_commune ; ?>" />
      <input type="hidden" id="id_membre" value="<?php echo $id_membreses ; ?>" />
     <input type="hidden" id="id_membre" value="<?php echo $id_membre ; ?>" />
     <input type="button" name='bouton'  value="Entrez" />  </form>


    la partie javascript

    Code javascript : 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
    var titre,id_commune,phone,id_membre,date,id_membreses;
     
    titre =document.getElementById('titre').value;alert(titre);
    id_commune =document.getElementById('id_commune').value;alert(id_commune);
    phone =document.getElementById('phone').value;alert(phone);
    id_membre =document.getElementById('id_membre').value;alert(id_membre);
     datepost =document.getElementById('datepost').value;alert(datepost);
     
    var sendAjax = $.ajax({
    type: "POST",
     url: 'update_bdd.php',
    data: 'titre_annonce='+titre_annonce+'&id_commune='+id_commune+'&phone='+phone+'&id_membre='+id_membre+'&datepost='+datepost+'&id_membreses='+id_membreses,success: handleResponse
    	     });
       }
       function handleResponse(){
        $('#answer').get(0).innerHTML = sendAjax.responseText;
       }
      });
     }

    et dans le fichier php qui update les donnée

    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
     $id_membreses = $_SESSION['uid'];
    if(isset($_POST['id_membre']) && isset($_POST['titre'])){
     
      $id_commune = addslashes($_POST['id_commune']);
      $titre = htmlentities(addslashes($_POST['titre']));
      $description = htmlentities(addslashes($_POST['description']));
      $phone = htmlentities(addslashes($_POST['phone']));
      $id_membre = addslashes($_POST['id_membre']);
      $datepost = ($_POST['datepost']);
     
      $insert = $connection->prepare("UPDATE table SET titre=:titre,  id_commune=:id_commune,phone=:phone, id_membre=:id_membre, datepost=:date_post where id_membre = '".$id_membreses."' ");
    try {
     
      $insert->bindParam(':titre', $titre, PDO::PARAM_STR, 150);
       $insert->bindParam(':id_commune', $id_commune, PDO::PARAM_INT);
      $insert->bindParam(':phone', $phone, PDO::PARAM_STR,20);
      $insert->bindParam(':id_membre', $id_membre, PDO::PARAM_INT);
      $insert->bindParam(':datepost', date('Y-m-d'));
     
     
     $success=  $insert->execute();
     
      if( $success ) {
        echo "Enregistrement réussi";
      } 
    } catch( Exception $e ){
      echo 'Erreur de requète : ', $e->getMessage();
    }}
    dans mes alerte javascript j'ai bien les données qui sont correctement passées , et la page me renvoie bien que l'enregistrement est réussi

    mais il n'y aucun changement dans la table

    dans la page qui update les données j'ai cette erreur , mais je ne pense pas que ça soit ça qui cloche

    " Only variables should be passed by reference in" qui correspond à la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $insert->bindParam(':datepost', date('Y-m-d'));
    merci de l'aide que vous pouvez apporter

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu as mis
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    bonjour sabotage ,

    c'est juste une erreur quant j'ai copié mon code pour soumettre mon problème

    voila le formulaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <form id="form4" action="update_bdd.php"   method="post"  >
    <input  id="titre" name="titre" type="text"  value='<?php echo html_entity_decode(stripslashes($titre)) ;  ?>' required />
    <input  id="phone" name="phone" type="text"  value='<?php echo html_entity_decode(stripslashes($phone)) ;  ?>' required />
     <input type="hidden" name "datepost" id="datepost" value="<?php echo date("F j, Y"); ?>" />
     <input type="hidden" id="id_commune" value="<?php echo $id_commune ; ?>" />
     <input type="hidden" id="id_membre" value="<?php echo $id_membre ; ?>" />
      <input type="hidden" id="id_membreses " value="<?php echo $id_membreses ; ?>" />
     <input type="button" name='bouton'  value="Entrez" />  </form>
    ce que je comprend pas c'est que les données semblent bien être envoyées au fichier qui traite l'update, je reçois une réponse javascript comme quoi l'enregistrement à bien été fait mais en fait rien ne se passe, aucune mise à jour dans la table

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    A priori, c'est bien ce code : $insert->bindParam(':datepost', date('Y-m-d')); qui pose problème.

    Citation Envoyé par php.net
    Lie une variable PHP à un marquer nommé ou interrogatif correspondant dans une requête SQL utilisée pour préparer la requête. Contrairement à PDOStatement::bindValue(), la variable est liée en tant que référence et ne sera évaluée qu'au moment de l'appel à la fonction PDOStatement::execute().
    Or, tu ne peux pas lier un appel à une fonction comme référence.

    bindParam est plutôt utilisé pour des requêtes en boucle. Dans ton cas, j'utiliserai plutot bindValue
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    merci Celira

    pour voir, j'ai supprimé la partie concernant la date , aussi bien dans le formulaire , dans le javascript et la page de l'update..

    je n'ai plus l'affichage de l'erreur , tout indique que les valeurs sont envoyés, le javascript renvoie que l'enregistrement est réussie, mais dans la table rien ne bouge

    ce n'est donc pas cette erreur qui pose problème

    pourtant ailleurs sur d'autres page du site je fait un update équivalent à celui ci avec quasiment le même code ( avec également binParam ) est ça marche.

    je vais regarder en quoi ça diffère peut être que la solution est là.

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Sinon si tu tiens à utiliser bindParam tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $date = date('Y-m-d');
    $insert->bindParam(':datepost', $date);
    A part cela je vois que tu utilises htmlentities pour faire ton update or les fonctions htmlentities et htmlpsecialchars ne sont à utiliser qu'à l'affichage et non pas lors de l'insertion en bdd. En faisant ainsi tu encombre ta base de caractères inutiles et en cas de besoin il te serait impossible de faire une recherche insensible aux caractères accentués.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    en faisant un var_dump ($_POST) ,j'ai trouvé mon erreur une variable arrivait en "indefined"

    dans la partie javascript j'avais oublié de récupérer une valeur d'un des champs de mon formulaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id_membreses=document.getElementById('id_membreses').value;alert(id_membreses);
    ça fonctionne maintenant

    merci ABCIWEB pour l'info sur htmlentities

    mais n'est ce pas utile pour ( un peu ) sécuriser les insertion de donnée dans la table ?

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par serna Voir le message
    merci ABCIWEB pour l'info sur htmlentities

    mais n'est ce pas utile pour ( un peu ) sécuriser les insertion de donnée dans la table ?
    Non. Les insertions sont protégées par le "bindParam", ou par la fonction "quote" pour les requêtes non préparées, ou par "mysqli_real_escape_string" avec mysqli.

    Cette façon de faire (appliquer htmlentities avant l'insertion en bdd) était parfois utilisée pour éviter d'oublier d'appliquer ces fonctions à l'affichage, mais finalement il y a des inconvénients annexes. Autant faire les choses en suivant la procédure normale et faire echo htmlentities($variable) à l'affichage.

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    merci pour ces info ABCIWEB

    je vais changer ça, en ne mettant comme tu le suggère le htmlentities seulement à l'affichage , ça sera plus claire dans ma table et facilitera d’éventuelles recherche

  10. #10
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par serna Voir le message
    ça sera plus claire dans ma table et facilitera d’éventuelles recherche
    Oui, j'ajoute pour terminer que l'emploi de htmlspecialchars est normalement suffisant. L'avantage par rapport à htmlentities est qu'avec htmlspecialchars on est pas obligé de spécifier l'encodage quand on travaille en utf-8 (et donc facilite aussi une éventuelle migration vers utf-8).

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

Discussions similaires

  1. [PDO] UPDATE qui ne se fait pas
    Par laurentSc dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/02/2015, 23h57
  2. [Ajax.NET]UpdataPanel.Update() qui ne se fait pas
    Par rad_hass dans le forum ASP.NET
    Réponses: 4
    Dernier message: 12/03/2009, 09h27
  3. [MySQL] UPDATE qui ne se fait pas
    Par VoteForMe dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 17/09/2008, 13h42
  4. [MySQL] MySQL Update qui ne se fait pas
    Par philippef dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 10/07/2008, 17h30
  5. update qui fait pas son boulot !
    Par mami900 dans le forum SQL
    Réponses: 5
    Dernier message: 19/04/2007, 20h20

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