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 :

MySQLi faites vos jeux, rien ne va plus [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    etudiant developpeur web
    Inscrit en
    Février 2018
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : etudiant developpeur web

    Informations forums :
    Inscription : Février 2018
    Messages : 99
    Points : 63
    Points
    63
    Par défaut MySQLi faites vos jeux, rien ne va plus
    Bonjour,

    soit la requete SQL suivante :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( $mysqli->query( 'UPDATE villes SET ville_nom='.$ville_nom.', ville_texte='.$ville_texte.' WHERE ville_id="'.$ville_id.'"' ) )

    Mon WHERE ne passe pas en rouge. J'ai un probleme de syntaxe mais après plusieurs tentatives de quotes et double quotes, c'est soit le WHERE pas en rouge ou mes variables pas en blanc ... Grrrrrr

    Qu'est-ce que je fais de mal?

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    il faut impérativement faire une requête préparée.

  3. #3
    Membre du Club
    Homme Profil pro
    etudiant developpeur web
    Inscrit en
    Février 2018
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : etudiant developpeur web

    Informations forums :
    Inscription : Février 2018
    Messages : 99
    Points : 63
    Points
    63
    Par défaut Bien
    OK, je vois l'idée, mais je n'ai pas encore vu cela en cours.

    Je vais continuer à chercher.. Merci

  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
    Tu peux aussi le faire sans requête préparée, en échappant les données avec mysqli::real_​escape_​string

    Pour avoir le bon nombre de quotes, commence par écrire une requête qui fonctionne hors php (dans PhpMyAdmin par exemple).
    Par exemple (j'ai supposé que ville_id était un nombre)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE villes SET ville_nom='Paris', ville_texte='La ville lumière' WHERE ville_id=1
    Ensuite, soit tu encadres avec l'autre type de quotes (ici ce serait des doubles quotes), soit tu échappes les quotes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = "UPDATE villes SET ville_nom='Paris', ville_texte='La ville lumière' WHERE ville_id=1";
    // ou
    $sql = 'UPDATE villes SET ville_nom=\'Paris\', ville_texte=\'La ville lumière\' WHERE ville_id=1';
    Et tu incorpores les variables (échappées par real_​escape_​string) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = "UPDATE villes SET ville_nom='".$mysqli->real_escape_string($ville)."', ville_texte='".$mysqli->real_escape_string($texte)."' WHERE ville_id=".$mysqli->real_escape_string($id)."";
    // ou
    $sql = 'UPDATE villes SET ville_nom=\''.$mysqli->real_escape_string($ville).'\', ville_texte=\''.$mysqli->real_escape_string($texte).'\' WHERE ville_id='.$mysqli->real_escape_string($id).'';

    @jreaux : Les requêtes préparées avec mysqli, c'est franchement horrible (enfin, c'est juste mon avis personnel hein) du coup j'ai même pas essayé
    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
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Celira Voir le message
    @jreaux : Les requêtes préparées avec mysqli, c'est franchement horrible (enfin, c'est juste mon avis personnel hein) du coup j'ai même pas essayé
    Je n'avais même pas vu/lu le $mysqli ! (je pensais à PDO)

    1- Autant améliorer la lisibilité avec une bonne INDENTATION :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql = "UPDATE villes SET 
       ville_nom = '".$mysqli->real_escape_string($ville_nom)."', 
       ville_texte = '".$mysqli->real_escape_string($ville_texte)."' 
       WHERE ville_id = ".$mysqli->real_escape_string($ville_id).";";

    2- Sinon, les requêtes préparées avec mysqli EXISTENT, et sont à privilégier !
    En l'occurrence, ça donne ici (sauf erreur) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /* Crée une requête préparée */
    $sql = "UPDATE villes SET 
       ville_nom = ?, 
       ville_texte = ?
       WHERE ville_id = ? ;";
     
    if ( $stmt = $mysqli->prepare($sql) )
    {
        /* Lecture des marqueurs */
        $stmt->bind_param("ssi", $ville_nom, $ville_texte, $ville_id);
     
        /* Exécution de la requête */
        $stmt->execute();
    }


    Mais comme c'est effectivement "bien moisi", autant PASSER rapidement A PDO !!
    Dernière modification par Invité ; 07/06/2018 à 15h35.

  6. #6
    Membre du Club
    Homme Profil pro
    etudiant developpeur web
    Inscrit en
    Février 2018
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : etudiant developpeur web

    Informations forums :
    Inscription : Février 2018
    Messages : 99
    Points : 63
    Points
    63
    Par défaut Merci de ton aide ...
    Citation Envoyé par Celira Voir le message
    Tu peux aussi le faire sans requête préparée, en échappant les données avec mysqli::real_​escape_​string......

    Merci, j'y arrive pas le mieux, c'est à reprendre demain à tête reposée.

  7. #7
    Membre du Club
    Homme Profil pro
    etudiant developpeur web
    Inscrit en
    Février 2018
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : etudiant developpeur web

    Informations forums :
    Inscription : Février 2018
    Messages : 99
    Points : 63
    Points
    63
    Par défaut Apparemment, cela vien de la base de données elle même
    Bon, j'ai repris tout mon code, la requête fonctionne bien quand j'ajoute quelque chose... ce quelque soit la typo (présence ou non de ' ou é ou à ...). En revanche, cela ne fonctionne pas avec le mode édition (fonction UPDATE) sauf si je ne mets pas de caractères spéciaux tel que ceux cités ....

    Bref c'est à se tirer les cheveux. Tant pis.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    C'est sûr, si tu ne montres pas ton code : tant pis.

  9. #9
    Membre du Club
    Homme Profil pro
    etudiant developpeur web
    Inscrit en
    Février 2018
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : etudiant developpeur web

    Informations forums :
    Inscription : Février 2018
    Messages : 99
    Points : 63
    Points
    63
    Par défaut J'ai trouvé
    Voila, à tête reposée, c'est mieux ....

    A l'origine,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mysqli->query( 'UPDATE villes SET ville_nom='.$ville_nom.', ville_texte='.$ville_texte.' WHERE ville_id="'.$ville_id.'"' )

    Et en reprenant au calme, un problème de doubles quotes mal placées.... Avec ce code, cela fonctionne :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mysqli->query( 'UPDATE villes SET ville_nom="'.$ville_nom.'", ville_texte="'.$ville_texte.'" WHERE ville_id="'.$ville_id.'"') )

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

Discussions similaires

  1. [humour geek] Vos jeux de mots nuls en rapport avec l'informatique.
    Par Muesko dans le forum La taverne du Club : Humour et divers
    Réponses: 36
    Dernier message: 06/12/2013, 17h18
  2. Quels jeux vous ont le plus marqué ?
    Par pepper18 dans le forum Jeux
    Réponses: 183
    Dernier message: 06/10/2009, 13h49
  3. [Sondage] Sur quelle machine avez vous fait vos débuts ?
    Par Muesko dans le forum La taverne du Club : Humour et divers
    Réponses: 107
    Dernier message: 15/05/2007, 10h06
  4. Faites vos tests de performance avec nmon sous Aix
    Par Katyucha dans le forum Contribuez
    Réponses: 1
    Dernier message: 27/03/2007, 17h17

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