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 :

requête MySQL à problème [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut requête MySQL à problème
    Bonsoir,

    moi aussi j'ai un problème avec une requête. Je m'étais justement inspiré d'un code que Sabotage m'avait gentiment donné, mais là, il n'est pas content (pas Sabotage, le PC) :
    requête MySQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql='UPDATE forum_vhs SET text='.$texte.' where id_forum="' . intval($id_forum).'"';
    Message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'test schmittlau@aol.com where id_forum' at line 1
    , soit ce qui commence par "intval", mais pour tester, j'avais remplacé . intval($id_forum).' par une valeur en dur et j'avais la même erreur... Qu'est-ce qui ne va pas ?

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 9
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Bonsoir,

    moi aussi j'ai un problème avec une requête. Je m'étais justement inspiré d'un code que Sabotage m'avait gentiment donné, mais là, il n'est pas content (pas Sabotage, le PC) :
    requête MySQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql='UPDATE forum_vhs SET text='.$texte.' where id_forum="' . intval($id_forum).'"';
    Message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'test schmittlau@aol.com where id_forum' at line 1
    , soit ce qui commence par "intval", mais pour tester, j'avais remplacé . intval($id_forum).' par une valeur en dur et j'avais la même erreur... Qu'est-ce qui ne va pas ?
    t'a essayé WHERE en majuscule??

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 34
    Par défaut
    Bonsoir

    Mettre le where en majuscules ne changera rien, par contre tu peux essayer en rajoutant des guillemets pour encadrer ton $texte.

    Romain

  4. #4
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Salut, le WHERE en majuscules ne change rien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mailto:schmittlau@aol.com">schmittlau@aol.com toto" WHERE id_forum="126"' at line 1
    Autre idée ?

  5. #5
    Membre confirmé Avatar de speedy_g
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 213
    Par défaut
    Esssaie ceci,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $idforum = intval($id_forum);
     
    $sql="UPDATE forum_vhs SET text = '$texte' where id_forum = '$idforum' ";

  6. #6
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Bonjour,

    En ce moment c la grosse polémique sur les requêtes:
    Je te donne comment je l'aurais écrite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql="UPDATE forum_vhs SET text='".$texte."' where id_forum='" . intval($id_forum)."'";
    Maintenant ya la différenciation des champs numérique qui permetterait d'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql="UPDATE forum_vhs SET text='".$texte."' where id_forum=" . intval($id_forum);
    Si j'ai bien compris

    Ou alors de même que le 2 avec des quotes simples

  7. #7
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Merci pour vos réponses ; ça a marché en faisant un mix des 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $id_forum=intval($_SESSION['id_forum']);
     
    $sql="UPDATE forum_vhs SET text = \"".$texte."\" where id_forum =".$id_forum;
    Par contre, je coince si le texte contient un lien : il n'aime pas le </a> :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'http://www.google.fr" target="_blank">google coucou" where id_forum =125' at line 1
    Juste après google (le texte), il devrait y avoir </a> En fait, un peu avant, j'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $texte1[$i]='<a href ="'.$texte1[$i].'" target="_blank">'.$texte1[$i+2].'</a>';
    (le $texte1, c'est un $texte "explodé") Auriez-vous une idée ?

  8. #8
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    C'est le problème des caractères spéciaux de ton lien (les " par ex), il faut transformer la chaine avec le fonction addSlashes ...

  9. #9
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Bien pensé, mais non :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sql=UPDATE forum_vhs SET text = "toto toto" where id_forum =127
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\"toto toto\" where id_forum =127' at line 1
    (et si je teste la requête directement, elle est bonne) (l'affichage de la requête est le résultat d'un echo)

  10. #10
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    oui mais déjà, la requête je l'aurais écrite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql="UPDATE forum_vhs SET text = '".$texte."' where id_forum =".$id_forum;
    Ce ne sont pas tes \" qui embrouille SQL ?

    parceque il te parle bien de \"toto toto\" !!!!!

  11. #11
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 817
    Billets dans le blog
    14
    Par défaut
    Les valeurs textuelles sont à mettre entre apostrophes et non pas entre guillemets.
    Si le texte à insérer contient lui même une apostrophe, il faut se débrouiller pour "l'échapper" en faisant précder l'apostrophe d'un antislash.
    Exemple :
    'Aller à l\'école'

    Cette partie du manuel PHP vous sera utile.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  12. #12
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Pour CinePhil, remplacer les guillemets par des apostrophes ne supprime pas l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'toto toto\' where id_forum =127' at line 1
    et pour Fench, j'avais écrit la requête exactement comme ça ("toto toto" n'était que l'affichage de mon dernier essai pour le texte) (et d'ailleurs, les antislashes, je ne sais pas d'où il les sort, à moins que ça vienne de la fonction addslashes...)

  13. #13
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    15h00 et suis déjà

    La requête est comme je l'ai écrite avant, c ça ?

    Mais alors pour les / je vois pas trop !!!!

    Tu peux pas me donner le bout de code de ton pb, je verrais peut être mieux (parceque c vrai entre mon projet et tous les posts, je me mélange les pinceaux)

  14. #14
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    C'est sympa de chercher à m'aider. Donc voici le code où se situe le problème (dans lequel je viens de rajouter des commentaires) :
    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
    $texte=$_POST['texte']; /* Le texte est saisi ds un formulaire html */
    $texte=addslashes($texte);
    $texte1=explode(" ",$texte); /* le texte est découpé en tranches afin d'isoler les adresses mail et internet ; pour internet, la syntaxe proposée est : "url , texte du lien" (avec 2 espaces autour de la virgule) ; et cette partie du code marche */
    $ltexte1=count($texte1);
    $arobas="@";
    $lien="://";
     
    for ($i=0;$i<$ltexte1;$i++) {
    	if (strpos($texte1[$i],$arobas)>0)
    		 {		 
    		 $texte1[$i]='<a href ="mailto:'.$texte1[$i].'">'.$texte1[$i].'</a>';
    		 }
    	if (strpos($texte1[$i],$lien)>0)
    		 {	
    		 $texte1[$i]='<a href ="'.$texte1[$i].'" target="_blank">'.$texte1[$i+2].'</a>';
    		 $texte1[$i+1]="";
    		 $texte1[$i+2]="";
    		 }	
    	}
    $texte=$texte1[0];
    for ($i=1;$i<$ltexte1;$i++) {$texte.=" "; $texte.= $texte1[$i]; }
     
    $texte=str_replace(array("\r", "\n"), array('', '<br>'), $texte); // jusque là, aucun souci
    $id_forum=intval($_SESSION['id_forum']);
    $sql="UPDATE forum_vhs SET text = '".$texte."' where id_forum =".$id_forum;
    /* si je fais un echo de la requête, je peux l'exécuter tel quel, donc elle est bonne */
    $sql =addslashes($sql);
    $result = mysql_query($sql) or die(mysql_error());
    Vois-tu un problème ?

  15. #15
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 817
    Billets dans le blog
    14
    Par défaut
    Tu fais d'abord un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $texte = addslashes($texte);
    Puis un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = addslashes($sql);
    Ceci n'ajouterait-il pas deux fois les antislashes ?

    Question de conception :
    Pourquoi stocker du HTML dans la BDD ?
    Moi je stockerais le texte tel qu'il est saisi et c'est au programme qui le récupère pour le formater avant affichage de se débrouiller pour reconnaître quel type de lien il faut mettre.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  16. #16
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Effectivement, tu fais beaucoup de transformations de chaîne, tu devrais faire des echo pour voir ou tu t'en trouve à chaque fois.

    De même, niveau conception beaucoup de gens enregistre des chaines complètes d'html qui sont ch... à gérer par la suite, il est vrai que plus nous simplifions, plus nous nous y retrouverons

  17. #17
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Ca marche enfin : pour ça, j'ai commenté les 2 addslahes.
    Sinon, pour le question de conception, je reconnais que tu as raison, mais comme j'ai mis plusieurs jours à faire marcher ça, je ne touche plus à rien.

  18. #18
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Bon bein penses à mettre résolu stp.

  19. #19
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    C'est fait, mais vu que tu as répondu juste après moi, ça ne devait pas encore être visible...

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

Discussions similaires

  1. requête mysql, problème de champs
    Par thom48 dans le forum Requêtes
    Réponses: 6
    Dernier message: 23/03/2010, 16h58
  2. Réponses: 6
    Dernier message: 01/12/2007, 22h28
  3. [MySQL] Requête MySQL : problèmes avec les espaces
    Par superseba888 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/07/2007, 16h12
  4. problème $_POST et $_SESSION et requête MYSQL
    Par GarGamel55 dans le forum Requêtes
    Réponses: 9
    Dernier message: 25/01/2006, 22h10
  5. Réponses: 1
    Dernier message: 29/11/2005, 22h05

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