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

Langage PHP Discussion :

Insérer une certaine chaîne de caractères dans MySQL


Sujet :

Langage PHP

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 448
    Points : 5 808
    Points
    5 808
    Billets dans le blog
    1
    Par défaut Insérer une certaine chaîne de caractères dans MySQL
    Bonjour,

    je tente d'insérer la chaîne de caractères suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="mailto:mon_adresse@aol.com">mon_adresse@aol.com</a>
    , mais quand je le fais, j'ai la réponse suivante :
    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:smon_adresse@aol.com">mon_adresse@aol.com","lolo","2009-12-05-12:11")' at line 1
    Peut-on me dire ce qu'il faudrait faire pour que ça marche ?

  2. #2
    Membre du Club Avatar de Jonahboss
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Espagne

    Informations forums :
    Inscription : Mai 2009
    Messages : 90
    Points : 56
    Points
    56
    Par défaut
    Salut,

    Le fait que tu utilise les " a la fois pour séparer tes données dans ta requete et dans tes données elle même...

    Ca te parrait pas un peu optimiste sur le résultat final ?

    Ta requete complète actuellement ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ma_requete='INSERT INTO ma_table (mon_mail, mon_nom, date) VALUES ("href="mailto:mon_adresse@aol.com">mon_adresse@aol.com","lolo","2009-12-05-12:11")';
    Et il te met une belle erreur car pour lui mon_mail vaut : href=
    et que mailto:mon_adresse@aol.com est tout sauf une virgule de séparation.

    Alors 2 petit conseils qui t'éviteront 2 gros problèmes :

    1) Les requetes se formules de cette façon (de préférence, c'est pas obligé) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $ma_requete="INSERT INTO ma_table (mon_mail, mon_nom, date) VALUES ('href="mailto:mon_adresse@aol.com">mon_adresse@aol.com','lolo','2009-12-05-12:11')"';
    Les doubles quotes " entourent la requete et les simples quotes ' séparent les infos.

    2) Si tu rentre du code html dans ta base utilise htmlentities() avant de l'inclure à ta requete et html_entity_decode() pour l'afficher (echo )

    Va voir ici si t'as des problèmes :
    http://fr.php.net/manual/fr/function.htmlentities.php


    Donc il faudrait que tu fasse comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $mon_mail=htmlentities(<a href="mailto:mon_adresse@aol.com">mon_adresse@aol.com</a>);
     
    $ma_requete="INSERT INTO ma_table (mon_mail, mon_nom, date) VALUES ('".$mon_mail."','lolo','2009-12-05-12:11')"';
    Petit EDIT :

    N'oublie jamais d'échapper tes apostrophes ' de cette façon \' dans tes script.

    Sinon t'auras des surprises...

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 448
    Points : 5 808
    Points
    5 808
    Billets dans le blog
    1
    Par défaut
    J'ai essayé de faire ce que tu dis, mais j'ai encore des problèmes. Voici mon code actuel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /*construction de la string (les éléments de texte2 qui contiennent une adresse 
    mail, ont justement été produits ainsi : $texte2[$j++]='<a href =\"mailto:'.$texte1[$i].'\">'.$texte1[$i].'</a>';*/
    $texte=$texte2[0];
    for ($i=1;$i<$ltexte1;$i++) $texte.= $texte2[$i]; 
    echo "texte=".$texte."<br>";
    $texte=addslashes($texte);
    $texte=htmlentities($texte);
     
    $sql="INSERT into `forum_vhs` (`text`, `auteur`,`date`) VALUES (\"".$texte."\",\"".$auteur."\",\"".$date."\")";
     
    $sql = stripslashes($sql);
     
    $result = mysql_query($sql) or die(mysql_error());
    Et ce code marche tant que je ne mets pas d'adresse mail dans le texte. Saurais-tu ce qu'il faut que je fasse pour qu'il marche aussi avec les adresses mail ?

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Essaye cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $sql= 'INSERT into `forum_vhs` (`text`, `auteur`,`date`) VALUES ("'.$texte.'","'.$auteur.'","'.$date.'")';

  5. #5
    Membre du Club Avatar de Jonahboss
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Espagne

    Informations forums :
    Inscription : Mai 2009
    Messages : 90
    Points : 56
    Points
    56
    Par défaut
    Salut,

    Pourquoi échappe tu les " dans le lien puisque tu utilise des ' pour encadrer :
    $texte2[$j++]='<a href =\"mailto:'.$texte1[$i].'\">'.$texte1[$i].'</a>';

    attention dans ton for $ltexte1 au lieu de $texte1.
    Et, tu parait être point niveau prog, mais un for il faut pas mettre les instructions entre {} ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $texte=$texte2[0];
    for ($i=1;$i<$ltexte1;$i++) $texte.= $texte2[$i]; // ça marche ça ?
    echo "texte=".$texte."<br>";
    $texte=addslashes($texte);
    $texte=htmlentities($texte);
     
    $sql="INSERT into `forum_vhs` (`text`, `auteur`,`date`) VALUES (\"".$texte."\",\"".$auteur."\",\"".$date."\")";
     
    $sql = stripslashes($sql);
     
    $result = mysql_query($sql) or die(mysql_error());
    et si au lieu de stripper les slashes t'utilisait des ' pour séparer tes données ?

    VALUES (\"".$texte."\",\"".$auteur."\",\"".$date."\")"; = VALUES ('".$texte."','".$auteur."','".$date."')";

    Les ` ne servent à rien, inutile de copier les requetes de PhpMyAdmin

    `forum_vhs` (`text`, `auteur`,`date`) = forum_vhs (text, auteur,date)

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 448
    Points : 5 808
    Points
    5 808
    Billets dans le blog
    1
    Par défaut
    Les {} pour le for ne sont pas nécessaires, s'il y a une seule instruction (comme ici). D'ailleurs, le echo du texte me montre que c'est bon.
    Sinon, le ltexte1 au lieu de texte1 est justiié : il s'agit de la longueur du tableau.
    J'ai viré les échappements dans la construction de texte2, mais ça ne change rien.

    Je l'ai fait, ce qui supprime l'erreur SQL, mais au lieu d'avoir le lien, il m'en affiche le code html, et si je supprime la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $texte=htmlentities($texte);
    , j'ai l'erreur suivante :
    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:mon_adresse@aol.com">mon_adresse@aol.com","lolo","2009-12-05-15:06")' at line 1
    Donc ça ne va pas encore...

  7. #7
    Membre du Club Avatar de Jonahboss
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Espagne

    Informations forums :
    Inscription : Mai 2009
    Messages : 90
    Points : 56
    Points
    56
    Par défaut
    C'est quoi ton code d'affichage ?

    parce que sans ça :

    echo html_entity_decode($le_résultat_de_ma_requete);

    il va effectivement te sortir le code

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 448
    Points : 5 808
    Points
    5 808
    Billets dans le blog
    1
    Par défaut
    Je viens de voir ce nouveau conseil, donc j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<td align=left valign=top width=120>".html_entity_decode(nl2br($ligne[1]))."</td>";
    (Le reste y était déjà et j'ai juste rajouté l'appel à html_entity_decode, mais ça ne change rien ; fallait-il faire autrement ?)

  9. #9
    Membre du Club Avatar de Jonahboss
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Espagne

    Informations forums :
    Inscription : Mai 2009
    Messages : 90
    Points : 56
    Points
    56
    Par défaut
    Peut tu envoyer le code source de la page html que génère ton php ?

    Et je crois que nl2br(html_entity_decode()) serait plus judicieux

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 448
    Points : 5 808
    Points
    5 808
    Billets dans le blog
    1
    Par défaut
    Mon PHP ne génère pas de page html, mais j'ai crû comprendre que ce qui t'intéressait était ma fonction d'affichage, donc la voici :
    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
    function  afficher_msg($i,$iinit,$result) {
     
     while ($ligne=mysql_fetch_array($result,MYSQL_NUM) and $i-10<0)
    {
    $i++;
    echo "<tr>";
     
    $date=$ligne[0];
     
    $reste=NULL;
     
    $format="%d-%d-%d-%s";
     
    sscanf($date,$format,$year,$month,$day,$reste);
     
    $date=$day."-".$month."-".$year;
     
    if (isset($reste)) { $date .= "-".$reste; }
     
    	echo "<td valign=top width=120>".nl2br($date)."</td>"; 
     
    	echo "<td align=left valign=top width=120>".nl2br(html_entity_decode($ligne[1]))."</td>"; 
     
    	echo "<td>".nl2br($ligne[2])."</td>"; 
     
    	echo "</tr>";
    }
    echo "</table>";
     
    }
    Vu que ce code doit avoir dans les 2 ans, je ne me souviens pas de tout, mais je crois que la condition $i-10<0 vient du fait que je n'affiche au maximum que 10 messages à la fois.

  11. #11
    Membre du Club Avatar de Jonahboss
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Espagne

    Informations forums :
    Inscription : Mai 2009
    Messages : 90
    Points : 56
    Points
    56
    Par défaut
    Non désolé j'étais pas clair ce que je veux voir c'est le résultat de ta fonction en html :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <td valign=top width=120>ta date</td> 
     <td align=left valign=top width=120>La tête que fait ton lien</td>
    <td>
    ta ligne 2
    </td></tr>
    le tout avec et sans html_entity_decode

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 448
    Points : 5 808
    Points
    5 808
    Billets dans le blog
    1
    Par défaut
    avec et sans html_entity_decode, il a ce look :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href ="mailto:mon_adresse@aol.com">mon_adresse@aol.com</a>
    (alors qu'évidemment, je souhaiterais qu'il soit interprété)

  13. #13
    Membre du Club Avatar de Jonahboss
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Espagne

    Informations forums :
    Inscription : Mai 2009
    Messages : 90
    Points : 56
    Points
    56
    Par défaut
    Je ne veux pas voir ce qu'affiche le navigateur mais la source HTML qu'il interprète et affiche.

    pour savoir si ton script php renvoi :

    &lt;a href=&quot;mailto:mon_adresse@aol.com&quot;&gt;mon_adresse@aol.com&lt;/a&gt;

    ou bien :

    <a href ="mailto:mon_adresse@aol.com">mon_adresse@aol.com</a>

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 448
    Points : 5 808
    Points
    5 808
    Billets dans le blog
    1
    Par défaut
    D'accord, mais comment puis-je avoir cette info ? Sinon, je pense que mon script PHP renvoie le message au bon format puisque si j'en fais un echo, c'est bon...

  15. #15
    Membre du Club Avatar de Jonahboss
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Espagne

    Informations forums :
    Inscription : Mai 2009
    Messages : 90
    Points : 56
    Points
    56
    Par défaut
    D'accord, mais comment puis-je avoir cette info ?


    Clic droit n'importe où sur ta page, VOIR CODE SOURCE

    Sauf si on s'est pas compris et que ce n'est pas une page web.

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 448
    Points : 5 808
    Points
    5 808
    Billets dans le blog
    1
    Par défaut
    Je ne vois pas ce que ça pourrait être d'autre qu'une page web... Et en fait, tu avais raison : ce que j'ai vu, c'est ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                                                    <td>&lt;a
    href ="mailto:mon_adresse@aol.com"&gt;mon_adresse@aol.com&lt;/a&gt;</td>
    Comment puis-je faire pour remplacer ces caractères par les bons ?

  17. #17
    Membre du Club Avatar de Jonahboss
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Espagne

    Informations forums :
    Inscription : Mai 2009
    Messages : 90
    Points : 56
    Points
    56
    Par défaut
    Je ne sais pas trop pourquoi il te décode les " et pas les < >.

    Essaye ces 2 soluces :
    1) la courte :
    htmlentities($ton_mail, ENT_QUOTES) pour encoder ton lien avant de l'entrer en base et html_entity_decode($ligne1, ENT_QUOTES) pour le décoder.

    2) si ça marche pas la longue :

    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
    34
    35
    36
     
    function  afficher_msg($i,$iinit,$result) {
     
     while ($ligne=mysql_fetch_array($result,MYSQL_NUM) and $i-10<0)
    {
    $i++;
    echo "<tr>";
     
    $date=$ligne[0];
     
    $reste=NULL;
     
    $format="%d-%d-%d-%s";
     
    sscanf($date,$format,$year,$month,$day,$reste);
     
    $date=$day."-".$month."-".$year;
     
    if (isset($reste)) { $date .= "-".$reste; }
     
    	$search[0]='&lt;';
    	$search[1]='&gt;';
    	$replace[0]='<';
    	$replace[1]='>';
     
            echo "<td valign=top width=120>".nl2br($date)."</td>"; 
     
    	echo "<td align=left valign=top width=120>".str_replace($search, $replace,nl2br(html_entity_decode($ligne[1])))."</td>"; 
     
    	echo "<td>".nl2br($ligne[2])."</td>"; 
     
    	echo "</tr>";
    }
    echo "</table>";
     
    }

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 448
    Points : 5 808
    Points
    5 808
    Billets dans le blog
    1
    Par défaut
    Merci pour ton aide, mais aucune version n'a marché...
    Même pour la version longue, j'ai laissé l'encodage avec htmlentities.

  19. #19
    Membre du Club Avatar de Jonahboss
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Espagne

    Informations forums :
    Inscription : Mai 2009
    Messages : 90
    Points : 56
    Points
    56
    Par défaut
    T'es en php 4 ou 5

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 448
    Points : 5 808
    Points
    5 808
    Billets dans le blog
    1
    Par défaut
    Comme je n'en savais rien, j'ai mis phpinfo chez l'hébergeur (Free), et c'est PHP 4.
    Pour être précis, 4.4.3-dev

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Une seule chaîne de caractères dans l'adresse au lieu de deux
    Par mihelicjm dans le forum APIs Google
    Réponses: 12
    Dernier message: 31/10/2014, 17h02
  2. [XL-2010] Recherche d'une sous-chaîne de caractères dans une cellule
    Par StephThai dans le forum Excel
    Réponses: 7
    Dernier message: 13/01/2014, 04h21
  3. Recherche une sous chaîne de caractères dans un Vector
    Par brino1987 dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 12/06/2013, 14h31
  4. Réponses: 7
    Dernier message: 30/06/2011, 00h40
  5. Réponses: 7
    Dernier message: 27/04/2007, 10h01

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