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 :

Concatener requete avec variable


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2011
    Messages : 67
    Par défaut Concatener requete avec variable
    Bonjour tout le monde ,

    Je pense que sa ne va pas vous prendre beaucoup de temps pour m'aidez mais bon ...=)

    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
    <?php
                          try
    {
        $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
        $bdd = new PDO('mysql:host=10.0.0.10;dbname=tinyurl_litii', 'root', '', $pdo_options);
     
        $reponse = $bdd->query('SELECT url_utilisateur , url_reduite FROM tyniurl WHERE url_reduite=\'YRfz3Z\'');
        while ($donnees = $reponse->fetch())
        {
            echo 'la cle est ' . $donnees['url_reduite'] . ' et l\'adresse correspondante est :'.$donnees['url_utilisateur'].'<br />';
        }
     
        $reponse->closeCursor();
    }
    catch(Exception $e)
    {
        die('Erreur : '.$e->getMessage());
    }
       //header('Location: $url_redirection');
    ?>
    Ici je cherche dans ma base de donnée le champ ou "url_reduite"=YRfz3Z et m'afficher le contenu du champ "url_utilisateur" correspondant.

    Le truc c'est que je veux modifier un peu ma requête car :

    -je veux mettre dans une variable $hash les clés comme "YRfz3Z" (oui les clés , parce que j'en génère aléatoirement plus tôt dans mon code)

    -et modifier la requête pour qu'elle fasse la recherche en fonction du contenu de la variable ...


    J'ai cherché , rien trouvez de clair , modifier mon code mais rien ne marche ... J'me retrouve avec pleins d'erreurs ..
    J'imagine que sa doit tourner autour d'un $get .. mais j'ai pas réussi ..

    PS : si il y'a besoin je vous donne mon code en intégralité .

  2. #2
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Par défaut
    Bonjour,

    Si tu récupère ta clé via un formulaire POST (ou par url GET) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reponse = $bdd->query('SELECT url_utilisateur , url_reduite FROM tyniurl WHERE url_reduite = "' . mysql_real_escape_string($_POST['nom_champs']) . '"');
    Sinon tu remplace par ta variable $hash qui récupère la valeur suivant ta méthode.

    Petite précision au passage, il faut quoter les valeurs de types string dans une requête SQL et protéger les caractères spéciaux avec mysql_real_escape_string().


    Cordialement,
    Je ne suis pas schizophrène, nous sommes unanime !!!

    ► Pensez à la balise code et au CODE HTML GENERE !!!!
    ► Au si c'est le cas et au à ceux qui vous ont aidé.
    Vous souhaitez participer aux rubriques CSS et (X)HTML ? Contactez-nous !

    Créer des colonnes de même hauteur en CSS
    Glossaire CSS
    Les bordures en CSS3
    Les transitions en CSS3

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2011
    Messages : 67
    Par défaut
    D'accord j'essaye , le mysql_real_escape_string($_POST['nom_champs']) protège de quoi en faite ?

    Sa paraît bête mais j'ai du mal avec ces histoire de $_POST , $_GET ..

    Sa me paraît approprié comme méthode mais j'ai du mal ..

    Ma clé ($hash) est générée sur une autre page qui contient un formulaire de type submit , j'ai juste a mettre un $_GET['hash'] pour récupérer la valeur de ma variable $hash , et ensuite sur mon autre page le $_POST['hash'] récupère la valeur pour ma requête ( euh c'est plutôt l'inverse non ? )xD

  4. #4
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Par défaut
    Pour mysql_real_escape_string() je te renvoie à la doc : par ici

    Si sur ta page A (page-a.php) tu as un formulaire avec ta clé générée, tu l'envoie, soit par la method POST soit par la method GET, vers la page B (page-b.php).

    Exemple de page-a.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    $ma_cle = microtime(true);
    ?>
    <form method="post" action="page-b.php?mod=view" id="frm">
    <input type="text" value="<?php echo $ma_cle; ?>" id="hash" name="hash" />
    <input type="submit" value="Envoyer" name="send" />
    </form>
    Exemple de page-b.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    // Ici on récupère la valeur de la clé par la méthode POST
    $reponse = $bdd->query('SELECT url_utilisateur , url_reduite FROM tyniurl WHERE url_reduite = "' . mysql_real_escape_string($_POST['hash']) . '"');
     
    // Ici on récupère la valeur du "mod" transmis par la méthode GET
    $mod = $_GET['mod'];
    ?>
    Est-ce plus clair comme ça ?
    Je ne suis pas schizophrène, nous sommes unanime !!!

    ► Pensez à la balise code et au CODE HTML GENERE !!!!
    ► Au si c'est le cas et au à ceux qui vous ont aidé.
    Vous souhaitez participer aux rubriques CSS et (X)HTML ? Contactez-nous !

    Créer des colonnes de même hauteur en CSS
    Glossaire CSS
    Les bordures en CSS3
    Les transitions en CSS3

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2011
    Messages : 67
    Par défaut
    Désoler pour l'attente de ma réponse mais vu que j'comprenais pas trop .. j'ai préfèere aller manger et chercher de nouveau ...Mais j'crois que je saisie pas tout ..

    Je te donne mon code entièrement pour voir si il y a quelque chose que j'ai omit te dire que pourrais changer la donne ...(je m'attend pas a se qu'on me donne le code qui manque mais sa a l'air tout bête et je comprend pas .. et sa commence a m'énervé de pas comprendre ! xD )

    La première page : index.php

    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title></title>
            <link rel="stylesheet" type="text/css" href="style.css">
        </head>
        <body>
            <div id ="cadre">
                    <form name="inscription" method="post" action="redirection.php?mod=view">
                        Entrez l'url à réduire : <input type="text" name="url_utilisateur"/> <br/>
     
                        <input type="submit" name="reduire" value="OK"/>
                    </form>
            </div>
                            <?php
    /*Connexion à la base de données*/
                            try
                            {
                                 $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
                                 $bdd = new PDO('mysql:host=10.0.0.10;dbname=tinyurl_litii', 'root', '');  
                                 /*Le nom d'hôte (localhost) 
                                  * La base de données (tinyurl_litii) 
                                  * Le login (root) 
                                  * Le mot de passe (ici il n'y a pas de mot de passe, j'ai donc mis une chaîne vide)
                                  */
                                    $url_base = ' ';
                                       if(isset($_POST['reduire']))        //Script PHP qui a l'appui du bouton 'reduire'
                                          {
                                              $url_utilisateur=$_POST['url_utilisateur'];//récupere l'url rentré dans le formulaire dans une variable 'url_a_reduire'
                                              $url_base=$url_utilisateur;
                                              echo 'Voici l\'url que vous voulez reduire '. $url_utilisateur;//Et affiche
                                          }
                             }
                                catch(Exception $e)
                                {
                                   die('Erreur : '.$e->getMessage());
                                }
     
                                /**
                                 * * Genère une chaine de caractères aléatoirement  
                                 * * @param int $nbcar le nombre de caractères attendu
                                 * * @return string la chaine de caractères générée
                                 * 
                                 */
                                    $nbcar = 6;
                                    function generateRandomString($nbcar) 
                                    {
                                        $string = "";
                                        $chaine = "abcdefghijklmnopqrstuvwxyzABCDEFGJHIJKLMNOPQRSTUVWXYZ0123456789";//les caractères autoriser dans la clé.
                                        srand((double)microtime()*1000000);
     
                                        for($i = 0; $i < $nbcar; $i++) 
                                            {
                                                $string .= $chaine[rand() % strlen($chaine)];
                                            }
                                            return $string;
                                    }
                                    $hash = generateRandomString(6);
                                    $url_litii = 'www.litii.com/';//affectation du début de l'adresse dans une variable
                                    $mini_url_litii = $url_litii.generateRandomString(6);?><!--concaténation du nom de domaine et de la clé générée-->
            <div id="cadre2">                                                        
                                <?php
                                if($url_base != ' ')//Ici on crée un test pour ne pas afficher un lien.
                                                    {    
                                                       echo "<a href=\"$url_base\" title=\"L'accueil\">$mini_url_litii</a>";
     
                                                    }
                                ?>
            </div>
                                            <?php if($url_base != ' ')//Ici on crée un test pour empêcher de remplir la BDD a la connexion à la page.
                                                    {
                                                    echo 'Voici l\'url reduite '. $mini_url_litii;//Et affiche
                                                    $req=$bdd->prepare(('INSERT INTO tyniurl (url_utilisateur , url_reduite) VALUES(:url_utilisateur , :hash)'));//requête d'écriture de l'url dans la BDD
                                                    if ($req->execute(
                                                            array(
                                                            //Execution de la requête (écriture de l'url dans le champs url_tilisateur de la table tyniurl
                                                                    'hash'=>$hash,
                                                                    'url_utilisateur'=>$url_base
                                                                 )
                                                            ))
                                                            {
                                                                 echo " L'insertion s'est bien déroulée.";
                                                            }
                                                            else//Sinon , en cas de clé déjà existante dans la BDD, regénération de clé 
                                                            {
                                                                 '<br><br>'.print $req->errorCode();
                                                                 generateRandomString(6);
                                                                 '<br>'.$hash = generateRandomString(6).'<br>';
     
                                                                 echo $hash;
                                                                 $hash = $POST_['hash'];
     
                                                            }
     
     
                                                    } else 
                                                        {
                                                        //Si la variable $url_base!= ' ' alors il ne se passe rien.
                                                        }
                            ?>
        </body>
    </html>
    La deuxième page : redirection.php

    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
    <?php
                          try
                            {
                                $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
                                $bdd = new PDO('mysql:host=10.0.0.10;dbname=tinyurl_litii', 'root', '', $pdo_options);//Connexion à la BDD
     
                                $reponse = $bdd->query('SELECT url_utilisateur , url_reduite FROM tyniurl WHERE url_reduite=\'$_POST[\'hash\']\'');//Sélectionne tous les champs de la table tynirul lorsque le champ url_reduite est égal à YRfz3Z
     
                                    while ($donnees = $reponse->fetch())
                                        {
                                            echo 'la cle est ' . $donnees['url_reduite'] . ' et l\'adresse correspondante est :'.$donnees['url_utilisateur'].'<br />';
                                             echo $donnees['hash'];
                                        }
     
                                $reponse->closeCursor();
                            }
     
                            catch(Exception $e)
                            {
                                die('Erreur : '.$e->getMessage());
                            }
    ?>

    La j'ai une erreur quand j'arrive sur la deuxième page :

    -Erreur : SQLSTATE[42000]: Syntax error or access violation: 1064 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 'hash']'' at line 1

    Et surtout a force de chercher sans trouvez j'commence a passer a coté des choses je crois .. J'perd en réflexion ...Surtout que c'est presque fini ...

    Merci de ton aide en tout cas =)

  6. #6
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Par défaut
    C'est bien d'échapper les simples quotes, mais pas trop

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reponse = $bdd->query('SELECT url_utilisateur , url_reduite FROM tyniurl WHERE url_reduite="' . $_POST['hash'] . '"');
    Pour l'histoire des quotes c'est simple : dès que tu fais une requête SQL qui agit sur des champs de type STRING il faut que tu "entoure" la valeur par des simples (ou doubles) quotes.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $query = mysql_query("SELECT * FROM ville WHERE nom_ville = 'paris'");
    ou
    $query = mysql_query('SELECT * FROM ville WHERE nom_ville = \'paris\'');
    ou
    $query = mysql_query("SELECT * FROM ville WHERE nom_ville = '" . $ville . "'");
    ou
    $query = mysql_query('SELECT * FROM ville WHERE nom_ville = "' . $ville . '"');
    Si j'avais fait une recherche sur un champs de type INT, j'aurai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query = mysql_quer("SELECT * FROM ville WHERE id_ville = 12");
    ps: j'ai volontairement passé les protections des caractères spéciaux dans mes exemples.
    Je ne suis pas schizophrène, nous sommes unanime !!!

    ► Pensez à la balise code et au CODE HTML GENERE !!!!
    ► Au si c'est le cas et au à ceux qui vous ont aidé.
    Vous souhaitez participer aux rubriques CSS et (X)HTML ? Contactez-nous !

    Créer des colonnes de même hauteur en CSS
    Glossaire CSS
    Les bordures en CSS3
    Les transitions en CSS3

Discussions similaires

  1. requete avec variable dans VBA
    Par Mathieu.Nanoux dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 07/09/2007, 13h41
  2. probleme requete avec variable php
    Par Burinho dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 11/08/2007, 21h53
  3. requete avec variable
    Par yasmine* dans le forum JDBC
    Réponses: 2
    Dernier message: 02/04/2007, 00h00
  4. requete avec variable
    Par Mihalis dans le forum Bases de données
    Réponses: 5
    Dernier message: 13/09/2006, 19h01
  5. [MySQL] requete avec variable chaine de caractere
    Par infotron dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/10/2005, 22h03

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