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 :

[Tableaux] Problème d'apostrophe (') avec une liste déroulante


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 64
    Points : 48
    Points
    48
    Par défaut [Tableaux] Problème d'apostrophe (') avec une liste déroulante
    Hello, j'ai un souci avec mes appostrophe.
    J'utilise addslashes pour remplir la base de donnée mais y'a un souci lorsque je récupére d'une liste déroulante.

    Explication:
    J'ai une page avec une liste déroulante contenant l'ensemble d'auteurs de livre contenue dans ma base. Quand je choisie dans la liste l'auteur, et que je clique sur OK, une deuxième liste déroulante contenant les titres de cet auteur s'affiche. Et je souhaite en cliquant sur OK, effacer ce livre.
    Ma liste contient donc les titres même avec une apostrope, mais quand je fais $_POST['Titre'] il remet pas tout le titre il s'arréte à l'apostrophe.
    ex: dans la liste j'ai L'UN et quand je fais echo $_POST['Titre']; il m'affiche L.

    J'ai testé addslashes($_POST['Titre']); mais ça ne fonctionne pas



    Voila mon code:
    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
    37
    38
     
    <?
    if (isset($_POST['Auteur']))
        { 
     
            $auteur=$_POST['Auteur'];
            echo "<br>".$auteur;
            $reqalb=mysql_query("select titre from LIVRE where auteur ='$auteur' order by titre");
     
            echo"<form method='POST' action='SectionAdmin.php?Typesupp=Livre'>
            Titre: <input type='hidden' name='auteurselect' value='".$_POST['Auteur']."'>
            <select Name='Titre' Id='Titre'>";
     
            while ($data=mysql_fetch_assoc($reqalb))
                {
                    echo"<option value='".$data['titre']."'>".$data['titre']."</option>";
                }
     
            echo"</select><input type='submit' Name='ok' value='ok'></form>";
     
        }
     
     
     
    if (isset($_POST['Titre']))
        {
     
            $auteurselect=$_POST['auteurselect'];
     
            $titreselect=$_POST['Titre'];
     
            $reqdetail=mysql_query("Delete from LIVRE Where auteur='".$auteurselect."' and titre='".$titreselect."'");
     
     
        }
     
     
    ?>
    Celà pose donc problème pour la condition where de ma requete de suppression!

    Si vous avez une idée!
    Merci !

  2. #2
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 557
    Points
    557
    Par défaut
    Salut,

    c'est pas sur la valeur postée que tu dois faire le addslashes, mais sur la valeur avant qu'elle ne soit postée.
    Le problème que tu as c'est que ceci se génère dans ton HTML:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <option value='L'UN'> ... </option>
    Donc, deux choses à changer: la première, mettre des "" pour le value de option (je crois que c'est dit dans le W3C ca, si je ne me trompe, que les attributs doivent etre entourés de ", et non de ')
    Ca c'était pour la forme
    Ensuite, tu mets un petit htmlentities, car c'est un peu dangereux d'afficher une valeur dynamique directement dans un tag comme ca.

    Ce qui nous donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      echo '<option value="'.htmlentities($data['titre']).'">'.$data['titre'].'</option>';
    Si tu ne veux pas faire comme ca, et conserver ton value='blabla' au lieu de value="blabla", alors tu n'a qu'à rajouter un addslashes et un htmlentities comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo "<option value='".htmlentities(addslashes($data['titre']))."'>".$data['titre']."</option>";
    Voilaaa
    Merci à Microsoft pour avoir transformé un métier relativement terne et basé sur une approche bêtement technique et rigoureuse des faits, en challenge quotidien, nécessitant une remise en question permanente à l'échelle du quart d'heure

  3. #3
    Membre régulier
    Homme Profil pro
    débutant SAP BO
    Inscrit en
    Avril 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : débutant SAP BO

    Informations forums :
    Inscription : Avril 2005
    Messages : 228
    Points : 102
    Points
    102
    Par défaut
    Je crois que c'est le meme probleme que ce que j'avai rencontré. essaye en remplacant les ' par des " comme la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while ($data=mysql_fetch_assoc($reqalb))
                {
                    echo"<option value=\".$data['titre']."\">".$data['titre']."</option>";
                }
    comme ca tu dois voir affiché avec les \ et fait un stripslashes si tu veux les enlever. Et un addslashes par la suite qd tu travaille sur la base pour ne pas que ca bug

  4. #4
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    Ton idée est bonne, et interessante, mais marche po.

  5. #5
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 557
    Points
    557
    Par défaut
    Citation Envoyé par WyLLoU
    Ton idée est bonne, et interessante, mais marche po.
    laquelle ? à Tr@nkill ou la mienne?
    Merci à Microsoft pour avoir transformé un métier relativement terne et basé sur une approche bêtement technique et rigoureuse des faits, en challenge quotidien, nécessitant une remise en question permanente à l'échelle du quart d'heure

  6. #6
    Rédacteur
    Avatar de MasterOfChakhaL
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2004
    Messages
    2 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 147
    Points : 3 264
    Points
    3 264
    Par défaut
    si jamais ta table contient une clé primaire numérique, je te conseille de mettre cette valeur dans le value et après, tu mets le texte que tu veux pour la liste...
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    N'oubliez pas de cliquer sur quand votre question à trouvé une solution.

    Si vous n'avez pas encore lu les règles du club, mieux vaut tard que jamais!

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    Les deux ne fonctionnent pas enfait...Elle est bisard la derniere,parceque les couleurs du texte est différent pour les $data...

  8. #8
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 557
    Points
    557
    Par défaut
    Qd tu dis "ca ne marche pas", ca fait quoi? une erreur? ou alors le comportement n'a pas changé par rapport à avant ?

    Tu peux coller la partie du code source html avec la liste générée? pour voir si les options se génèrent déjà correctement ou pas.
    Merci à Microsoft pour avoir transformé un métier relativement terne et basé sur une approche bêtement technique et rigoureuse des faits, en challenge quotidien, nécessitant une remise en question permanente à l'échelle du quart d'heure

  9. #9
    Membre régulier
    Homme Profil pro
    débutant SAP BO
    Inscrit en
    Avril 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : débutant SAP BO

    Informations forums :
    Inscription : Avril 2005
    Messages : 228
    Points : 102
    Points
    102
    Par défaut
    il manque une " dans ce que je t 'ai mi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <div style="text-align: left;">while ($data=mysql_fetch_assoc($reqalb))
                {
                    echo "<option value=\"".$data['titre']."\">".$data['titre']."</option>";
                }
    </div>

  10. #10
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par bkill
    Qd tu dis "ca ne marche pas", ca fait quoi? une erreur? ou alors le comportement n'a pas changé par rapport à avant ?

    Tu peux coller la partie du code source html avec la liste générée? pour voir si les options se génèrent déjà correctement ou pas.
    Bin ça fait rien enfait...y'a pas d'erreur,mais il fait rien, en gros, la requete delete ne se fait pas du fait que mon where ne retrouvre pas le titre.

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    <form name='formulaire' action='SectionAdmin.php?Typesupp=Livre' method='POST'>
    Recherche par auteur: 
        <select Name='Auteur' Id='Auteur'>
            <?php
                $req=mysql_query("select distinct auteur from LIVRE order by auteur asc");
                while ($data=mysql_fetch_assoc($req))
                    {
                        echo"<option value='".$data['auteur']."'>".$data['auteur']."</option>";
                    }
            ?>
        </select>
    <input type='submit' Name='ok' value='ok'>
    </form>
     
     
     
    <?
    if (isset($_POST['Auteur']))
        { 
     
            $auteur=$_POST['Auteur'];
            echo "<br>".$auteur;
            $reqalb=mysql_query("select titre from LIVRE where auteur ='$auteur' order by titre");
     
            echo"<form method='POST' action='SectionAdmin.php?Typesupp=Livre'>
            Titre: <input type='hidden' name='auteurselect' value='".$_POST['Auteur']."'>
            <select Name='Titre' Id='Titre'>";
     
            while ($data=mysql_fetch_assoc($reqalb))
                {     echo "<option value='".$data['titre']."'>".$data['titre']."</option>";
     
                } 
     
            echo"</select><input type='submit' Name='ok' value='ok'></form>";
     
        }
     
     
     
    if (isset($_POST['Titre']))
        {
     
            $auteurselect=$_POST['auteurselect'];
     
            $titreselect=$_POST['Titre'];
     
            $reqdetail=mysql_query("Delete from LIVRE Where auteur='".$auteurselect."' and titre='".$titreselect."'");
     
     
        }
     
     
    ?>
     
     
     
    </td></tr>
     
    </table>
    </body>
     
     
     
    </html>

  11. #11
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 557
    Points
    557
    Par défaut
    Donc, si nous reprenons depuis le début:

    change ta ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo "<option value='".$data['titre']."'>".$data['titre']."</option>";
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo '<option value="'.htmlentities($data['titre']).'">'.$data['titre'].'</option>';
    Ensuite, envoie la source HTML de ta page générée, juste la partie avec les "options". On va déjà voir si jusque là tout s'est bien généré.
    Merci à Microsoft pour avoir transformé un métier relativement terne et basé sur une approche bêtement technique et rigoureuse des faits, en challenge quotidien, nécessitant une remise en question permanente à l'échelle du quart d'heure

  12. #12
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    Mais vous regardez tous sur le <option> , mais il doit etre bon car dans ma liste , celà s'affiche correctement, c'est juste le post qui change tout.

    Bin ma page c'est ce que j'ai mis au dessus...tout ce fait la

  13. #13
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 557
    Points
    557
    Par défaut
    Il peut s'afficher correctement dans la page, ca ne change pas le fait que le value peut etre mauvais
    Et dans la page ce n'est pas le 'value' qui est affiché...
    Merci à Microsoft pour avoir transformé un métier relativement terne et basé sur une approche bêtement technique et rigoureuse des faits, en challenge quotidien, nécessitant une remise en question permanente à l'échelle du quart d'heure

  14. #14
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par bkill
    Il peut s'afficher correctement dans la page, ca ne change pas le fait que le value peut etre mauvais
    Et dans la page ce n'est pas le 'value' qui est affiché...
    Ah oui bienvue dsl, j'avais pas pensé à ça...Mais comment vérier?? on peut pas l'afficher le value.

  15. #15
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 557
    Points
    557
    Par défaut
    en faisant un petit "view source" avec ton browser ?

    FF: View > page source
    IE : View > source
    Merci à Microsoft pour avoir transformé un métier relativement terne et basé sur une approche bêtement technique et rigoureuse des faits, en challenge quotidien, nécessitant une remise en question permanente à l'échelle du quart d'heure

  16. #16
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    <html>
    <head>
    <title>jerome</title>
    </head>
    <body>
    <a href="index.php">Accueil</a> 
    <br><br>
     
     
    <table border='1'>
     
    <!---Ajout--->
    <tr>
    <td>
    AJOUT<br>
    <font color="blue">
    <u><a href="?Typeajout=Musique">Musique</a> /
    <a href="?Typeajout=Livre">Livre</a> / 
    <a href="?Typeajout=Film">Film</a></u></font>
    </td>
    </tr>
     
    <!---    Suppression --->
    <tr>
    <td>
    SUPPRESSION<br>
    <font color="blue">
    <u><a href="?Typesupp=Musique">Musique</a> /
    <a href="?Typesupp=Livre">Livre</a> / 
    <a href="?Typesupp=Film">Film</a></u></font>
     
    <br><html>
    <body>
    <table width='100%' height='97%' >
    <tr><td valign='top'>
     
     
    <form name='formulaire' action='SectionAdmin.php?Typesupp=Livre' method='POST'>
    Recherche par auteur: 
    	<select Name='Auteur' Id='Auteur'>
    		<option value='TATA'>TATA</option>	</select>
    <input type='submit' Name='ok' value='ok'>
    </form>
     
     
     
    <br>TATA<form method='POST' action='SectionAdmin.php?Typesupp=Livre'>
    		Titre: <input type='hidden' name='auteurselect' value='TATA'>
    		<select Name='Titre' Id='Titre'><option value="l'a">l'a</option></select><input type='submit' Name='ok' value='ok'></form>
     
    </td></tr>
     
    </table>
    </body>
     
     
     
    </html></td>
    </tr>
     
     
     
     
    <tr>
    <td>
    DISPONIBILILTE<br>
    <font color="blue">
    <u><a href="?Typedispo=Musique">Musique</a> /
    <a href="?Typedispo=Livre">Livre</a> / 
    <a href="?Typedispo=Film">Film</a></u></font>
     
    </td>
    </tr>
    </body>
    </html>

  17. #17
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 557
    Points
    557
    Par défaut
    Ok, donc maintenant on peut voir que tes options sont bien générées.
    Ce qui ne doit pas fonctionner dans le script d'après, c'est la requete mysql alors (à cause de la ')...

    essaye ceci, à ta ligne du mysql_query:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $reqdetail=mysql_query("Delete from LIVRE Where auteur='".$auteurselect."' and titre='".$titreselect."'") or die (mysql_error());
    et regarde si t'as une erreur, mais pour moi il faudra que tu fasses un addslashes($titreselect).

    En y regardant bien maintenant, et avec un des commentaires précédents, je ne peux que te conseiller de plutot travailler avec des id numériques à passer en post, ca sera bien plus facile à gérer...
    tu pourras avoir plutot des trucs du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $query = "DELETE FROM livre WHERE fid_auteur = 23 AND id_livre = 12";
    Pas besoin de jouer avec les add/strip slashes, etc etc
    Merci à Microsoft pour avoir transformé un métier relativement terne et basé sur une approche bêtement technique et rigoureuse des faits, en challenge quotidien, nécessitant une remise en question permanente à l'échelle du quart d'heure

  18. #18
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    Problème résolu...Merci à vous, c'est bien sympa
    Au plaisir :p


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reqdetail=mysql_query("Delete from LIVRE Where auteur='".$auteurselect."' and titre='".addslashes($titreselect)."'");

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

Discussions similaires

  1. Problème avec une liste déroulante
    Par flippaeti dans le forum C#
    Réponses: 1
    Dernier message: 05/06/2009, 19h46
  2. Problème avec une liste déroulante.
    Par kupae dans le forum IHM
    Réponses: 9
    Dernier message: 09/07/2008, 10h12
  3. Réponses: 1
    Dernier message: 08/05/2008, 23h00
  4. problème avec une liste déroulante
    Par valouche dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 30/05/2007, 09h01
  5. [Débutant] problème avec une liste déroulante
    Par stan21 dans le forum Access
    Réponses: 3
    Dernier message: 12/07/2006, 14h52

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