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 :

Afficher un message si requête ne renvoie rien [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2016
    Messages : 13
    Points : 4
    Points
    4
    Par défaut Afficher un message si requête ne renvoie rien
    Bonjour,

    j'ai fais un annuaire avec trois champs de recherche (medecin ville specialite), le souci est que je n'arrive pas a afficher de message lorsque je n'ai pas de resultat!

    voici le 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
    <?php
    /* Debut if recherche */
    		 if(isset($_POST["recherche"])){
    		$medecin=$_POST["medecin"];
    		$ville=$_POST["ville"];
    		$specialite=$_POST["specialite"];
    		/* Connection a la base */
    	require "ConnexBase.php";
    	/* Debut if recherche */
    	$reponse=$bdd->query('SELECT nom,tel,adresse,ville,specialite
    								FROM medecin_ville
    								inner join specialite on medecin_ville.specialite_id=specialite.id
    								inner join ville on medecin_ville.ville_id=ville.id');
    	while ($donnee=$reponse->fetch()) {						
    	if (($medecin==$donnee["nom"] AND $ville==$donnee["ville"] AND empty ($specialite)) OR (empty ($medecin) AND $ville==$donnee["ville"] AND $specialite==$donnee["specialite"] ) OR ($medecin==$donnee["nom"] AND $specialite==$donnee["specialite"] AND empty ($ville)) OR (empty ($medecin) AND $ville==$donnee["ville"] AND $specialite==$donnee["specialite"]) OR ($medecin==$donnee["nom"] AND empty ($ville) AND empty ($specialite)) OR ($specialite==$donnee["specialite"]) OR ($ville==$donnee["ville"])) { 
    	echo '<div class="row"><div class=" marginTop col-md-6 col-md-offset-3 alert alert-info text-center" role="alert">'.$donnee['nom'].' '.$donnee['tel'].' '.$donnee['adresse'].' '.$donnee['ville'].' '.$donnee['specialite'].'</div></div>';
    	}
    	}
    	/* Debut if vide */
    	if (empty($medecin) AND empty($ville) AND empty($specialite)){
    		echo '<div class="row"><div class=" marginTop col-md-4 col-md-offset-4 alert alert-danger text-center" role="alert">Veuillez remplir un des champs</div></div>';
     
    	/* Fin if vide */
     
    	}
    	}?>

  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
    Utilise la méthode rowcount pour contrôler s'il y a 0 résultats ou non.

    Au passage utilise && au lieu de AND et || au lieu de OR, sinon tu risques un jour d'avoir des résultats surprenants.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2016
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    j'ai essaye mais cela m'affiche le message a chaque boucle du while!

  4. #4
    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
    Il faut faire le test avant le while : soit on a 0 résultat, soit on en a et on les parcourt.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2016
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    peux tu me donner un exemple, la je suis planté. je ne suis pas un pro de la programmation. merci

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Ben avant le while :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /* Debut if recherche */
    $reponse = $bdd->query('SELECT nom,tel,adresse,ville,specialite
                                FROM medecin_ville
                                inner join specialite on medecin_ville.specialite_id=specialite.id
                                inner join ville on medecin_ville.ville_id=ville.id');
    $nbRows = $response->rowCount();
    if ($nbRows == 0) {
        echo "Rien";
    }
    while ($donnee = $reponse->fetch()) {
        if (($medecin == $donnee["nom"] AND $ville == $donnee["ville"] AND empty($specialite)) OR (empty($medecin) AND $ville == $donnee["ville"] AND $specialite == $donnee["specialite"]) OR ($medecin == $donnee["nom"] AND $specialite == $donnee["specialite"] AND empty($ville)) OR (empty($medecin) AND $ville == $donnee["ville"] AND $specialite == $donnee["specialite"]) OR ($medecin == $donnee["nom"] AND empty($ville) AND empty($specialite)) OR ($specialite == $donnee["specialite"]) OR ($ville == $donnee["ville"])) {
            echo '<div class="row"><div class=" marginTop col-md-6 col-md-offset-3 alert alert-info text-center" role="alert">' . $donnee['nom'] . ' ' . $donnee['tel'] . ' ' . $donnee['adresse'] . ' ' . $donnee['ville'] . ' ' . $donnee['specialite'] . '</div></div>';
        }
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    en reprenant le code de Celira et le conseil de sabotage...

    PAR CONTRE (après relecture), ton code n'est pas optimisé : il faut passer les paramètres recherchés ($medecin, $ville,...) DANS LA REQUETE SELECT, avec "WHERE...."
    On ne récupère QUE les lignes répondant aux critères de recherche.

    Code php : 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
    <?php
    // Connection a la base
    require "ConnexBase.php";
     
    // récupération des données du formulaire
    if(isset($_POST["recherche"]))
    {
    	$medecin = $_POST["medecin"];
    	$ville = $_POST["ville"];
    	$specialite = $_POST["specialite"];
     
    	// recherche : REQUETE PREPAREE
    	$requete = "SELECT nom,tel,adresse,ville,specialite
    		FROM medecin_ville
    		INNER JOIN specialite ON medecin_ville.specialite_id=specialite.id
    		INNER JOIN ville ON medecin_ville.ville_id=ville.id
    		WHERE medecin = :medecin AND ville = :ville AND specialite = :specialite";
     
    	// on PREPARE la requete
    	$reponse = $bdd->prepare($requete); 
     
    	// on EXECUTE la requete, avec les données du formulaire
    	$reponse = $bdd->execute(array(
    		':medecin' => $medecin,
    		':ville' => $ville,
    		':specialite' => $specialite,
    		));
     
    	$nbRows = $response->rowCount();	
     
    	if ($nbRows > 0) { // on a des réponses : on affiche
    		while ($donnee = $reponse->fetch()) {
    			echo '<div class="row"><div class=" marginTop col-md-6 col-md-offset-3 alert alert-info text-center" role="alert">' . $donnee['nom'] . ' ' . $donnee['tel'] . ' ' . $donnee['adresse'] . ' ' . $donnee['ville'] . ' ' . $donnee['specialite'] . '</div></div>';
    		}
    	} else {
    		echo "Circulez, y'a rien à voir...";
    	}
    }
    Cela dit, cette recherche suppose qu'on sélectionne obligatoirement les 3 critères.

    Pour des critères "indépendants" (on sélectionne 1, 2 ou 3 critères) :

    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
    <?php
    // Connection a la base
    require "ConnexBase.php";
     
    // récupération des données du formulaire
    if(isset($_POST["recherche"]))
    {
    	$medecin = $_POST["medecin"];
    	$ville = $_POST["ville"];
    	$specialite = $_POST["specialite"];
     
    	// recherche par critère
    	$sql_where = array();
    	$sql_param = array();
     
    	if( !empty($medecin) ){ 
    		$sql_where[] = " medecin = :medecin ";
    		$sql_param[':medecin'] = $medecin;
    	}
    	if( !empty($ville) ){ 
    		$sql_where[] = " ville = :ville ";
    		$sql_param[':ville'] = $ville;
    	}
    	if( !empty($specialite) ){ 
    		$sql_where[] = " specialite = :specialite ";
    		$sql_param[':specialite'] = $specialite;
    	}
    	$sql_where = ( !empty( $sql_where )? " WHERE ".implode( " AND ", $sql_where) : ''; // on crée la partie "WHERE ... AND ..." de la requête
     
    	// recherche : REQUETE PREPAREE
    	$requete = "SELECT nom, tel, adresse, ville, specialite
    		FROM medecin_ville
    		INNER JOIN specialite ON medecin_ville.specialite_id = specialite.id
    		INNER JOIN ville ON medecin_ville.ville_id = ville.id".
    		$sql_where;
     
    	// on PREPARE la requete
    	$reponse = $bdd->prepare($requete); 
     
    	// on EXECUTE la requete, avec les données du formulaire
    	$reponse = $bdd->execute($sql_param);
     
    	$nbRows = $response->rowCount();	
     
    	if ($nbRows > 0) { // on a des réponses : on affiche
    		while ($donnee = $reponse->fetch()) {
    			echo '<div class="row"><div class=" marginTop col-md-6 col-md-offset-3 alert alert-info text-center" role="alert">' . $donnee['nom'] . ' ' . $donnee['tel'] . ' ' . $donnee['adresse'] . ' ' . $donnee['ville'] . ' ' . $donnee['specialite'] . '</div></div>';
    		}
    	} else {
    		echo "Circulez, y'a rien à voir...";
    	}
    }
    Dernière modification par Invité ; 31/08/2016 à 14h04.

  8. #8
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2016
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    merci de ton aide, je vais me pencher sur ton code et voir si ca réponds a ce que je recherche. De plus cela va me permettre de me perfectionner etant autodidacte et programmeur amateur! merci

  9. #9
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2016
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    J'ai suivi ton conseil pour optimiser mon code mais j’obtiens un message d'erreur que je n'arrive pas a debugger!

    Voici le code:
    Code php : 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
    <?php
    /* Debut if recherche */
    		 if(isset($_POST["recherche"])){
    		$medecin=$_POST["medecin"];
    		$ville=$_POST["ville"];
    		$specialite=$_POST["specialite"];
    	/* Connection a la base */
    	require "ConnexBase.php";
     
    	/* Recherche par critere */
     
    	$sql_where=array();
    	$sql_param=array();
     
    	if(!empty($medecin)){
    	$sql_where[]="medecin=:medecin";
    	$sql_param[':medecin']=$medecin;
    	}
    	if(!empty($ville)){
    	$sql_where[]="ville=:ville";
    	$sql_param[':ville']=$ville;
    	}
    	if(!empty($specialite)){
    	$sql_where[]="specialite=:specialite";
    	$sql_param[':specialite']=$specialite;
    	}
     
    	$sql_where=!empty($sql_where)? " WHERE ".implode(" AND ",$sql_where):'';  // on crée la partie "WHER...AND..."de la requete
     
    	/* Recherche requete preparee */
    	$requete="SELECT nom,tel,adresse,ville,specialite
    								FROM medecin_ville
    								inner join specialite on medecin_ville.specialite_id=specialite.id
    								inner join ville on medecin_ville.ville_id=ville.id".$ql_where;
    	//on prepare la requete
    	$reponse=$bdd->prepare($requete);
     
    	//on execute la requete avec les donnes du formulaire
    	$reponse=$bdd->execute($sql_param);
     
    	$nbrow=$reponse->rowCount();
     
    	if($nbrow>0){
    		while ($donnee=$reponse->fetch()) {
    			echo '<div class="row"><div class=" marginTop col-md-6 col-md-offset-3 alert alert-info text-center" role="alert">'.$donnee['nom'].' '.$donnee['tel'].' '.$donnee['adresse'].' '.$donnee['ville'].' '.$donnee['specialite'].'</div></div>';
    		}	
    	}
    		else {
    			echo "vide";
    			}					
     
     
    	/* Fin if recherche */
    	/* Debut if vide */
    	if (empty($medecin) AND empty($ville) AND empty($specialite)){
    		echo '<div class="row"><div class=" marginTop col-md-4 col-md-offset-4 alert alert-danger text-center" role="alert">Veuillez remplir un des champs</div></div>';
    	}
    	/* Fin if vide */
    	}
    	?>

    voici le message d'erreur:
    Nom : Capture.PNG
Affichages : 781
Taille : 32,4 Ko

  10. #10
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2016
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    j'ai trouve mais maintenat ca m'indique

    Nom : Capture.PNG
Affichages : 740
Taille : 21,6 Ko

  11. #11
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2016
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    dsl j'ai encore trouve!

  12. #12
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2016
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    par contre lorsque mes champs sont vides et que je valide, la requete affiche tous les champs de la base de donnée!

  13. #13
    Invité
    Invité(e)
    Par défaut
    oui, c'est normal, puisque c'est comme ça qu'a été construite la requête :
    • si sélection -> requête selon les critères
    • aucune sélection -> requête sans critère (= tout).


    sinon, il te suffit de modifier les conditions de récupération : "sélectionner au moins 1 critère".

  14. #14
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2016
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Merci, oui j'ai rajoute une condition et tout marche nickel! Merci pour l'entraide cela me permet de progresser!

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 17/02/2008, 14h53
  2. Réponses: 5
    Dernier message: 18/07/2006, 16h32
  3. [Struts] Comment afficher des messages de confirmation
    Par vallica dans le forum Struts 1
    Réponses: 8
    Dernier message: 28/04/2006, 15h25
  4. Réponses: 12
    Dernier message: 03/11/2005, 19h45
  5. comment affiché un message d'erreur
    Par djouahra.karim1 dans le forum Bases de données
    Réponses: 5
    Dernier message: 23/11/2004, 13h12

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