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 :

formulaire de recherche et gestion de recherche [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut formulaire de recherche et gestion de recherche
    Salut

    J'ai fais un code qui fonctionne bien, mais avec une faute de manipulation je l'ai effacé et lorsque je l'ai répété il ne fonctionne plus !
    C'est un formulaire de recherche, j'ai testé le contenu de $_POST ça fonctionne, je pense que j'ai une faute dans la requête SELECT.

    Est ce que je peux affecter une valeur dans une requête directe ?

    formulaire recherche:
    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
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Untitled Document</title>
    </head>
     
    <body>
    <h3> Recherche simple </h3>
    <p> Saisissez votre requête puis cliquez sur le bouton Titre, Artiste ou Film pour valider. </p>
    <form action="recherche_simple.php" method="post">
    <input type="text" name="recherche" id="recherche" rows="50" cols="200"  />
    <input type="submit" name="titre" id="titre"  value="Titre"/>
    <input type="submit" name="artiste" id="artiste" value="Artiste" />
    <input type="submit" name="film" id="film" value="Film" />
    </form>
    </body>
    </html>
    recherche_simple.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
    <?php
    try
    {
    	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    	$bdd = new PDO('mysql:host=localhost;dbname=projet', 'root', '', $pdo_options);
    }
    catch (Exception $e)
    {
            die('Erreur : ' . $e->getMessage());
    }
    ?>
    <?php
    if ((isset($_POST['titre'])) || (isset($_POST['artiste'])) || (isset($_POST['film'])))
    { 
      if (isset($_POST['titre']))
      {
    	$titre = $_POST['recherche'];
    	print_r($_POST);
    	$req = $bdd->query('SELECT titre, artiste, quantite FROM cd_audio WHERE titre = \'' . $titre . ' \'');
    	while ($resultat = $req->fetch())
    	{
    		echo 'la chanson ' . $titre . ' de l\'artiste ' . $resultat['artiste'] . ' est: ';
    		    if ($resultat['quantite'] > '0')
    		    {
    			    echo '<br>Diponible<br><a href="acheter.php">Acheter</a>'; 
    			}
    			else 
    			{
    				echo 'Non disponible';
    			}
    			$req->closeCursor();
     
    	}
     }
    	else if (isset($_POST['artiste'])) 
    	{
    		$artiste = $_POST['recherche'];
    		$req = $bdd->query('SELECT titre, artiste, quantite FROM cd_audio WHERE artiste = \'' . $artiste . ' \'');
    		while ($resultat = $req->fetch())
    		{
    			$chansons = $req->fetchALL(PDO::FETCH_ASSOC);
    			$total_chanson = count($chansons);
    			echo 'les  chansons trouvés de l\'artiste ' . $artiste . ' sont: ' . $total_chanson . '';
     
    		    foreach( $chansons as $chanson)
    			{
    				echo '<br>' . $chanson['titre'] . '';
    			}
     
     
    		}
    		$req->closeCursor();
    	}
    	else if (isset($_POST['film']))
    	{
    		$film = $_POST['recherche'];
    		$req = $bdd->query('SELECT titre, realisateur, quantite FROM cd_film WHERE titre = \'' . $film . ' \'');
    		while ($resultat = $req->fetch())
    	  {
    		echo 'le film ' . $film . ' réalisé par ' . $resultat['realisateur'] . ' est: ';
    		    if ($resultat['quantite'] > '0')
    		    {
    			    echo '<br>Diponible<br><a href="acheter.php">Acheter</a>'; 
    			}
    			else 
    			{
    				echo 'Non disponible';
    			}
    	  }
    	$req->closeCursor();
    	}
    }
    else echo 'aucun résultat ne correspond à votre recherche';
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Untitled Document</title>
    </head>
     
    <body>
    </body>
    </html>
    erreur:
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de 'es ma femme '' à la ligne 1' in C:\Program Files (x86)\EasyPHP-5.3.8.0\www\mediatheque\recherche_simple.php:19 Stack trace: #0 C:\Program Files (x86)\EasyPHP-5.3.8.0\www\mediatheque\recherche_simple.php(19): PDO->query('SELECT titre, a...') #1 {main} thrown in C:\Program Files (x86)\EasyPHP-5.3.8.0\www\mediatheque\recherche_simple.php on line 19

  2. #2
    Membre très actif
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    Par défaut
    Bonjour,

    Il me semble que c'est une question de quote.

    Pour tirer pleinement l'avantage de PDO, je te conseille de récrire tes requêtes sous cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $req = $bdd->prepare('SELECT titre, artiste, quantite FROM cd_audio WHERE artiste = :artiste');
    $req->bindParam(':artiste', $artiste, PDO::PARAM_STR);
    $req->execute();

  3. #3
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Ahlala, tu ne prends exemple dans ce tout ce qui t'as été donné dans les autre topics, et les remarques aussi.

    Si au bout de cette recherche (la liste affichée) doit aboutir à mettre dans le panier un des article, alors ce n'est pas des liens qu'il faut mettre mais des formulaire en POST, pour que l'ajout puisse se faire.
    Si c'est bien cela, que ce soit à ton autre topic.

    Quelque chose comme :
    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
    <?php
    // recherche_simple.php
    // header() pour l'encodage UTF-8 à rajouter normalement
    // démarrage de la session à rajouter normalement
     
    try
    {
    	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    	$bdd = new PDO('mysql:host=localhost;dbname=projet', 'root', '', $pdo_options);
    }
    catch (Exception $e)
    {
            die('Erreur : ' . $e->getMessage());
    }
     
     
    if ((isset($_POST['titre'])) || (isset($_POST['artiste'])) || (isset($_POST['film'])))
    {
        if ((isset($_POST['titre']))
        {
            // Un titre
            $titre = $_POST['recherche'];
            print_r($_POST);
            $req = $bdd->prepare('SELECT id_audio AS id_produit, titre, artiste AS nom, quantite FROM cd_audio WHERE titre = :titre');
            $req->bindValue(':titre', $titre, PDO::PARAM_STR);
            $req->execute();
            $total_resultat = $req->rowCount();
            $resultat = $req->fetchAll();
        }
        else if (isset($_POST['artiste'])) 
        {
            $artiste = $_POST['recherche'];
            $req = $bdd->query('SELECT id_audio AS id_produit, titre, artiste AS nom, quantite FROM cd_audio WHERE artiste = :artiste');
            $req->bindValue(':artiste', $artiste, PDO::PARAM_STR);
            $req->execute();
            $total_resultat = $req->rowCount();
            $resultat = $req->fetchAll();
        }
        else if (isset($_POST['film'])) 
        {
            $artiste = $_POST['recherche'];
            $req = $bdd->query('SELECT id_film AS id_produit, titre, realisateur AS nom, quantite FROM cd_film WHERE titre = :film');
            $req->bindValue(':artiste', $artiste, PDO::PARAM_STR);
            $req->execute();
            $total_resultat = $req->rowCount();
            $resultat = $req->fetchAll();
        }
    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Untitled Document</title>
    </head>
     
    <body>
     
    <?php
    if (isset($resultat, $total_resultat) && (int)$total_resultat > 0) {
    ?>
    <table>
    <tr>
        <th>TITRE</th>
        <th>NOM</th>
        <th>QUANTITE</th>
        <th>AU PANIER</th>
    </tr>
    <?php
        foreach($resultat as $produit) {
    ?>
    <tr>
        <td><?php echo $produit['titre']; ?></td>
        <td><?php echo $produit['nom']; ?></td>
        <td><?php echo $produit['quantite']; ?></td>
        <td>
    <form action="acheter.php" method="post">
        <p>
            <input type="submit" name="valider" value="Acheter" />
            <input type="hidden" name="quantite" value="1" />
            <input type="hidden" name="id_produit" value="<?php echo $produit['id_produit']; ?>" />
        </p>
    </form>
        </td>
    </tr>
    <?php
        }
    ?>
    </table>
     
    <?php
    }
    else {
        echo '<p>aucun résultat ne correspond à votre recherche</p>';
    }
    ?>
     
    </body>
    </html>
    J'ai tenté ici de synchroniser les noms (identifiant des tables et noms) pour éviter toute sortes d'alternatives au niveau de l'affichage.
    Il y a peut être des choses à rectifier.

    Puis comme dit plus haut, j'ai mis un formulaire pour "Acheter" si nécessaire (avec id_produit, quantité et valider).
    Le nom du fichier est acheter.php, mais selon le cas ça pourrait/devrait être achat.php

    Code pas testé, donc sans garanti bien sûr.


    A savoir que ce n'est pas ainsi qu'il faudrait faire, j'évite d'entrer dans les détails.

  4. #4
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Ahlala, tu ne prends exemple dans ce tout ce qui t'as été donné dans les autre topics, et les remarques aussi.
    salut!
    Non, je vous assure que je saisis bien les exemples et les remarques dans les autres topic, comme la requête préparé, mais je suis tellement pressée et stressée que ça m’échappe car je veux faire vite (surtout comme j'ai dis j'ai effacé le code prêt et correcte par fausse manipulation )

    Oui ça doit aboutir après au panier.

    merci pour l'aide ça me sera très utile .. je n'ai plus le temps pour terminer tout(reste une heure).

  5. #5
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Non, je vous assure que je saisis bien les exemples et les remarques dans les autres topic, comme la requête préparé, mais je suis tellement pressée et stressée que ça m’échappe car je veux faire vite
    J'ai bien compris.

    Les requêtes préparées sont justement faites pour ça, et plus encore même.
    En faite, même si PDO propose d'exécuter une requête directement (comme query), il vaut mieux 100 fois toujours faire une requête préparée (prepare + les paramètres éventuels + execute), ça évite pleins de problèmes.

    C'est pour cette raison que j'ai procédé ainsi des les divers code que j'ai mis ici et ailleurs.


    (S'il n'est pas trop tard) Si tu rencontres malgré tout un problème de quote, alors c'est peut être lié à la directive magic_quotes_gpc du php.ini qui serait activé.
    (si c'est la cas, ils sont franchement pas cool vos profs , ceci devrait être fait d'office)
    Il faut la désactiver :
    - Soit directement dans le php.ini (le bon php.ini, et redémarrer Apache).
    - Ou alors rajouter au tout début à toutes les page ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    ini_set('magic_quotes_gpc', 'Off');
    ?>

  6. #6
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    j'ai voulu lier le résultat de recherche au panier (c'est à dire pouvoir passer au panier) mais j'ai pas réussi à le faire malheureusement ..
    maintenant c'est fini je prends une pause du développement web! deux semaines et je ne suis pas arrivée à bien accomplir mon site (y'a meme des codes qui marchaient et aujourd'hui ça n'a pas marché! )

  7. #7
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    le titre que j'ai cherché contient un apostrophe, c'est la raison de l'erreur je pense, comment corriger? je veux que l'apostrophe soit accepter.

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

Discussions similaires

  1. recherche modèle gestion élevage
    Par nicovbs dans le forum Modélisation
    Réponses: 2
    Dernier message: 15/10/2007, 21h29
  2. [Recherche] script gestion de mails dans une base de données
    Par emilie13 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 20/06/2007, 16h59
  3. [Calendrier] Recherche script gestion, suivi tâches
    Par masseur dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 24/03/2007, 11h10
  4. recherche prog gestion parc informatique
    Par sylvaindenisbe dans le forum Windows
    Réponses: 3
    Dernier message: 16/02/2007, 17h32
  5. Recherche application gestion hopital/centre de soin ?
    Par ludophil dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 15/11/2006, 13h13

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