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 :

rechercher dans une base de donnée depuis un formulaire [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Laos

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 25
    Points : 23
    Points
    23
    Par défaut rechercher dans une base de donnée depuis un formulaire
    bonjour;

    je suis entrain de créer un formulaire. Le but est qu'un utilisateur peut à travers ce formulaire saisir un CIN, il pourra ensuite récupérer un ensemble d'exploitations enregistrées dans une BD Mysql ( base de donnée locale pour le test). voici le code que j'ai proposé:

    or lors de l’exécution, on me dit que la variable reponse n'est pas définie. je ne comprends pas d'ou vient l'erreur.

    la base de donnée est nommée test, contenant une table appelée exploitations avec 2 champs: CIN et exploi.

    traitement.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
    <form action="" method="post" >
    				<table>
    					<tr>
    						<td>Entrez votre CIN</td>
    						<td><input type='text' name='CIN'/></td>
    					</tr>
    						<td><input type='submit' value='Rechercher'/></td>
    				</table>
    </form>
     
     
    <?php
    mysql_connect('localhost','root','')or die ("Connexion au serveur impossible");
    mysql_select_db('test') or die ("Connexion a la base impossible");
    //On determine l'expression a rechercher
    if(isset($_POST['Rechercher'])){
    	$rec = htmlentities($_POST['CIN']);
    	$recc=addslashes($rec); 
    	if(!empty($_POST['CIN'])){
     
    		$req = 'SELECT CIN, exploit FROM exploitations WHERE CIN LIKE "%$recc%"';
    		$reponse = mysql_query($req);
    		if (!$reponse) {
    		$message  = 'Requête invalide : ' . mysql_error() . "\n";
    		$message .= 'Requête complète : ' . $req;
    		die($message);
    	}
    		}
     
     
    // affichage des résultats
    }
     
    if($reponse!= null){
    			$nbligne=$reponse->rowCount();		// on compte le nombre de ligne resultant de notre requete			
    			echo $nbligne .' Resultat(s)<br/>';	// on affiche le nombre de ligne
    			if($nbligne > 0){
    					// on va afficher les resultats de notre requete			
    				while($donnees=$reponse->fetch()){
    					// recuperer les donnees et les afficher
    					//$donnees = $reponse->fetch();				
    					$CIN=$donnees['CIN'];
    					$exploitation=$donnees['exploit'];
    					affiche($CIN, $exploitation);
    				}	
    			}
    			else{
    				echo "<br>Aucun Resultats ne correspond a cette recherche<br><br>";
    			}
    		}
    ?>
    function_affiche.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
     
    function affiche($CIN,$exploitation){
    	echo "<div id=\"menu\">."$CIN".</div>";
    	echo "<div id=\"contenu\">."$exploitation".</div>";
    }	
     
    ?>
    Merci d'avance.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu as fais un mélange entre l'extension mysql_* (mysql_connect, mysql_query etc.) et PDO (rowcount, fetch etc.)
    Les deux ne travaillent pas ensemble, je te conseille de tout passer sur PDO.

    Dans l'avenir, donne nous les messages d'erreur exactes avec en particulier le numéro de ligne, c'est plus simple.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Laos

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 25
    Points : 23
    Points
    23
    Par défaut
    voilà j'ai fait les modification mais toujours avec la meme erreur:
    Voici les erreurs affichées:
    Notice: Undefined variable: req in C:\wamp\www\stage\traitement.php on line 38

    Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\stage\traitement.php on line 38
    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
    <form action="" method="post" >
    				<table>
    					<tr>
    						<td>Entrez votre CIN</td>
    						<td><input type='text' name='CIN'/></td>
    					</tr>
    						<td><input type='submit' value='Rechercher'/></td>
    				</table>
    </form>
     
     
    <?php
    try
    {
            $connexion = new PDO('mysql:host=localhost;dbname=test','root','');
    }
     
    catch(Exception $e)
    {
            echo 'Une erreur est survenue !';
            die();
    }
     
     
    //On determine l'expression a rechercher
    if(isset($_POST['Rechercher'])){
    	$rec = htmlentities($_POST['CIN']);
    	$recc=addslashes($rec); 
    	if(!empty($_POST['CIN'])){
     
    		$req = $connexion->query("SELECT * FROM exploitations WHERE CIN LIKE "%$recc%"");
     
    		}
     
     
    // affichage des résultats
    }		
    				while($donnees=$req->fetch()){
    					// recuperer les donnees et les afficher
    					//$donnees = $reponse->fetch();				
    					$CIN=$donnees['CIN'];
    					$exploitation=$donnees['exploit'];
    					affiche($CIN, $exploitation);
    				//}	
    			}
     
     
    ?>

  4. #4
    Membre averti Avatar de Njörd
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 190
    Points : 390
    Points
    390
    Par défaut
    Bonjour infoworld2013,

    Le formulaire ne sait pas où envoyer les informations car il n'y a pas de lien dans l'action du formulaire lors du submit.

    Pour cela, tu dois renseigner l'attribut action de la balise <form>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <form action="traitement.php" method="post" >
    L'erreur que tu obtiens est normale car, tu as bien vérifié l'existence des variables $_POST['Rechercher'] et $_POST['CIN']. Du coup, aucune erreur car tu ne rentre tout simplement pas dans la première condition.
    Par contre, tu ne testes pas si la variable $req existe bien et comporte bien les informations que tu as voulu sortir de la BD, donc erreur lorsque PHP essai de faire une boucle avec cette variable.

    Tu devrais placer la boucle while dans le if( isset($_POST['Recherche']) ) vu que tu souhaites afficher ces informations uniquement si tu as reçus des informations de ton formulaire. Et fait un test pour savoir si $req contient bien des informations issues de la BD.

    Ensuite, n'hésite pas à mettre des else afin de savoir où tu te trouve. Un simple echo te permet de savoir où ton code bloque.

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    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
    <?php
    $connexion = new PDO('mysql:host=localhost;dbname=test','root','');
    if(!empty($_POST['CIN'])){
        $req = $connexion->prepare("SELECT * FROM exploitations WHERE CIN LIKE :rec");
         $req->execute(array(':rec'=>'%' . $_POST['CIN']. '%'));
         while($donnees=$req->fetch()){
     
    					$exploitation=$donnees['exploit'];
    					affiche($donnees['CIN'], $donnees['exploit']);
    	}	
    }
    ?>

  6. #6
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Laos

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 25
    Points : 23
    Points
    23
    Par défaut
    voilà que j'ai effectué les modifications demandées, je vous informe déjà que j'ai pas mis d'action dans le formulaire car j'ai voulu mettre le script du formulaire et du traitement dans un meme fichier ( car il s'agit d'un web service, et quand j'appelerai ce web service depuis un client android, j'aurai besoin de l'URL d'un fichier unique).

    et meme après modification, je remarque que le code du if(isset($_POST['Rechercher'])) ne s'execute pas, en revanche, c'est le else qui s'execute !!
    Fichiers attachés Fichiers attachés

  7. #7
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Laos

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 25
    Points : 23
    Points
    23
    Par défaut
    c'est bon mnt ça marche!! Merci à vous!

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

Discussions similaires

  1. [MySQL] Insertion dans une base de données depuis un formulaire
    Par asvin dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 27/10/2008, 20h51
  2. problème de recherche dans une base de donnée mysql
    Par Xini28 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 24/10/2005, 19h00
  3. Recherche dans une base de donnée
    Par genova dans le forum SQLite
    Réponses: 8
    Dernier message: 29/09/2005, 00h16
  4. problème de recherche dans une base de données
    Par bouzid_mehdi dans le forum Bases de données
    Réponses: 2
    Dernier message: 19/07/2005, 07h47
  5. recherche dans une base de donnée+boucle
    Par eric205 dans le forum Bases de données
    Réponses: 8
    Dernier message: 15/03/2005, 22h14

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