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 :

chercher dans une base de données


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 453
    Par défaut chercher dans une base de données
    Bonjour.
    Mon objectif est de concevoir un Moteur de Recherche pour mon Projet.
    Ce Moteur de Recherche doit afficher les résultats dans une Table lorsque l'Utilisateur (l'Admin) entre seulement "un Numéro de Compte" dans le Formulaire de Recherche.

    MON PREMIER PROBLEME ::: Puisque les informations à afficher ne sont pas toutes dans la mêmes et unique Table, mon problème est au niveau des Request SQL que j'ai formulé dans mon Code (Ligne 16 - 18).

    MON SECOND PROBLEME ::: Il commence par Ligne 31 et se termine à la Ligne 81. Ces lignes qui pour moi, doivent afficher les Résultats de Recherche dans une Table.

    Voici donc mon Code puisque j'ai déjà commencé :

    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
    104
    105
    <?php
    	//Connexion à la base de données
    	include("includes/connect_db.php");
     
    	//Initialisation de la variable contenant les résultats
    	$resultats = "";
    //	$nbreParametres = 2; // Nombre de paramètres à renseigner
     
    	//Traitement de la requête
    	if(isset($_POST['query']) && !empty($_POST['query'])){
    		//Si l'utilisateur a entré quelque chose, on traite sa requête
     
    		//On rend clean la requête de l'utilisateur
    		$query = preg_replace("#[^a-z ?0-9]#i", "", $_POST['query']);
     
    		$sql_search = "SELECT u.id, u.fname, u.lname, a.acc_no, a.balance, a.status, a.bdate, a.type, a.id AS acc_id
    					   FROM tbl_users u, tbl_accounts a
    			           WHERE u.id = a.user_id AND a.acc_no LIKE ?";
     
    		$req = $db->prepare($sql_search);
    //		if($nbreParametres == 2){
    			$req->execute(array('%'.$query.'%', '%'.$query.'%'));	
    /*		} else {
    			$req->execute(array('%'.$query.'%', '%'.$query.'%', '%'.$query.'%', '%'.$query.'%'));	
    		} */
     
    		$count = $req->rowCount();
     
    		if($count >= 1){
    			echo "$count résultat(s) trouvé(s) pour <strong>$query</strong><hr/>";
    			while($data = $req->fetch(PDO::FETCH_OBJ)){
    				echo '<div id="errorCls" style="color:#FF0000 !important;font-size:14px;font-weight:bold;"><?php echo $errorMessage; ?></div>';
    				echo '<table width="100%" border="0" align="center" cellpadding="2" cellspacing="1" class="text">';
    				echo '<tr align="center" id="listTableHeader">';
    				   echo '<td>User Name</td>';
    				   echo '<td>Account No.</td>';
    				   echo '<td>Balance</td>';
    				   echo '<td width="120">Account Type</td>';
    				   echo '<td width="80">Account status</td>';
    				   echo '<td width="70">Statement</td>';
    				  echo '</tr>';
    				<?php
    				while($row = dbFetchAssoc($result)) {
    					extract($row);
    					if ($i%2) {
    						$class = 'row1';
    					} else {
    						$class = 'row2';
    					}
     
    					$i += 1;
     
    					$atype = "";
    					if($type == "CA"){$atype = "Checking Account";}
    					else if($type == "SA") {$atype = "Saving Account";}
    					else if($type == "FDA") {$atype = "Fixed deposit Account";}
    				?>
    				  echo '<tr class="<?php echo $class; ?>">'; 
    				   echo '<td><?php echo $fname .' '.$lname; ?></td>';
    				   echo '<td><div align="center"><a href="<?php echo WEB_ROOT; ?>cheg/account/?view=detail&accId=<?php echo $acc_id; ?>"><?php echo $acc_no; ?></a></div></td>';
    				   echo '<td><div align="center">$&nbsp;<?php echo $balance; ?></div></td>';
    				   echo '<td width="120" align="center"><?php echo $atype; ?></td>';
    				   echo '<td width="80" align="center">
    					<a href="javascript:changeAccStatus(<?php echo $acc_id; ?>, '<?php echo $status; ?>');">
    					<?php echo $status == 'INACTIVE'? 'Inactive' : 'Active'; ?>
    					</td>';
    				   echo '<td width="70" align="center"><a href="javascript:viewAccountStatement(<?php echo $id; ?>, <?php echo $acc_no; ?>);">Statement</a></td>';
    				  echo '</tr>';
    				<?php
    				} // end while
     
    				?>
    				  echo '<tr>';
    				   echo '<td colspan="5">&nbsp;</td>';
    				  echo '</tr>';
    				  echo '<tr>'; 
    				   echo '<td colspan="5" align="right"></td>';
    				  echo '</tr>';
    				 echo '</table>';
    				 echo '<p>&nbsp;</p>';
    					}
    					echo '<hr/>';
    		} else {
    		    echo "Il n'y a aucun résultat trouvé pour le Numéro de compte: <strong>$query</strong><hr/>";
    		}
     
     
    	}
     
    <!DOCTYPE html>
    <html>
    	<head>
    		<title>Moteur de Recherche</title>
    		<meta charset="UTF-8" />
    	</head>
    	<body> 
     		<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    			<input type="search" name="query" placeholder="Rechercher un Numéro de compte..." /><br/>
    		</form>
     
    		<?php echo $resultats; ?>
    	</body>
    </html>
     
    ?>
    Est-ce que donc mon Code est correcte pour permettre de chercher un Numéro de Compte et d'afficher les Résultats dans une Table ???

    Sinon, SVP, veuillez m'aider à corriger mon Code ci-dessus.


    Merci d'avance.

  2. #2
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Tu peux aller lire l'étape 3 du premier message de ce fil ?

    https://www.developpez.net/forums/d1...acilement-pdo/

    Puis vérifier quelle requête fonctionne comme tu veux :
    Je te propose déjà cette modif, avec la jointure séparée du filtre, c'est plus clair.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT u.id, u.fname, u.lname, a.acc_no, a.balance, a.status, a.bdate, a.type, a.id AS acc_id
    FROM tbl_accounts a 
    inner join on tbl_users u on u.id=a.user_id
    WHERE a.acc_no LIKE "123%"
    order by a.acc_no
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 453
    Par défaut
    oK Grand MERCI Dendrite.

    Mais j'ai 2 questions à poser, qui est au niveau du LIKE "123%".
    1 - Pourquoi le "123%" ???
    Et si le numéro à rechercher ne contient ou ne commence pas par 123 ???

    2 - Ma 2ème question (peut-être) que j'ai l'ai déjà posé, dans mon 1er Post. Ça concerne l'affichage des Résultats dans une Table (Table HTML) de la Ligne 31 à 81.
    Est-ce comment ça ???

    Merci d'avance.

  4. #4
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Ben tu modifies 123, bien sûr, toi tu veux obtenir un résultat, et moi, je ne sais pas ce qu'il y a dans ta base.
    Donc mets un truc qui te retourne plusieurs valeurs et dis-nous si la requête fonctionne comme tu veux dans ton PHPmyadmin.

    Une chose est déjà sûre, en zappant le %, tu transformes ton like en = dans ton code PHP !

    edit test CE code sql, j'avais laissé un on de trop dans la proposition précédente :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT u.id, u.fname, u.lname, a.acc_no, a.balance, a.status, a.bdate, a.type, a.id AS acc_id
    FROM tbl_accounts a 
    inner join  tbl_users u on u.id=a.user_id
    WHERE a.acc_no LIKE "123%"
    order by a.acc_no
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 453
    Par défaut
    Ok merci. Je vais vérifier et je reviens pour faire le retour.

  6. #6
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 453
    Par défaut
    Bonjour.

    J'ai pu faire comme Dendrite m'a conseillé mais en remettant un peu d'ordre dans le Code et en remplaçant le LIKE "123%" par LIKE ? puisqu'il s'agit d'une requête préparée:

    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
    <?php
    	//Connexion à la base de données
    	include("includes/connect_db.php");
     
    	//Initialisation de la variable contenant les résultats
    	$resultats = "";
    //	$nbreParametres = 2; // Nombre de paramètres à renseigner
     
    	//Traitement de la requête
    	if(isset($_POST['query']) && !empty($_POST['query'])){
    		//Si l'utilisateur a entré quelque chose, on traite sa requête
     
    		//On rend clean la requête de l'utilisateur
    		$query = preg_replace("#[^a-z ?0-9]#i", "", $_POST['query']);
     
    		$sql_search = "SELECT u.id, u.fname, u.lname, a.acc_no, a.balance, a.status, a.bdate, a.type, a.id AS acc_id 
    		               FROM tbl_accounts a INNER JOIN ON tbl_users u ON u.id=a.user_id 
    					   WHERE a.acc_no LIKE ? ORDER BY a.acc_no";
     
    		$req = $db->prepare($sql_search);
    //		if($nbreParametres == 2){
    			$req->execute(array('%'.$query.'%'));	
    /*		} else {
    			$req->execute(array('%'.$query.'%', '%'.$query.'%', '%'.$query.'%', '%'.$query.'%'));	
    		} */
     
    		$count = $req->rowCount();
     
    		if($count >= 1){
    			echo "$count résultat(s) trouvé(s) pour <strong>$query</strong><hr/>";
    			while($data = $req->fetch(PDO::FETCH_OBJ)){
    				echo '<div id="errorCls" style="color:#FF0000 !important;font-size:14px;font-weight:bold;"><?php echo $errorMessage; ?></div>';
    				echo '<table width="100%" border="0" align="center" cellpadding="2" cellspacing="1" class="text">';
    				echo '<tr align="center" id="listTableHeader">';
    				   echo '<td>User Name</td>';
    				   echo '<td>Account No.</td>';
    				   echo '<td>Balance</td>';
    				   echo '<td width="120">Account Type</td>';
    				   echo '<td width="80">Account status</td>';
    				   echo '<td width="70">Statement</td>';
    				  echo '</tr>';
    				while($row = dbFetchAssoc($result)) {
    					extract($row);
    					if ($i%2) {
    						$class = 'row1';
    					} else {
    						$class = 'row2';
    					}
     
    					$i += 1;
     
    					$atype = "";
    					if($type == "CA"){$atype = "Checking Account";}
    					else if($type == "SA") {$atype = "Saving Account";}
    					else if($type == "FDA") {$atype = "Fixed deposit Account";}
     
    				  echo '<tr class="<?php echo $class; ?>">'; 
    				   echo "<td><?php echo $fname .' '.$lname; ?></td>";
    				   echo '<td><div align="center"><a href="<?php echo WEB_ROOT; ?>cheg/account/?view=detail&accId=<?php echo $acc_id; ?>"><?php echo $acc_no; ?></a></div></td>';
    				   echo '<td><div align="center">$&nbsp;<?php echo $balance; ?></div></td>';
    				   echo '<td width="120" align="center"><?php echo $atype; ?></td>';
    				   echo '<td width="80" align="center">
    					<a href="javascript:changeAccStatus(<?php echo $acc_id; ?>, "<?php echo $status; ?>");">
    					<?php echo $status == "INACTIVE"? "Inactive" : "Active"; ?>
    					</td>';
    				   echo '<td width="70" align="center"><a href="javascript:viewAccountStatement(<?php echo $id; ?>, <?php echo $acc_no; ?>);">Statement</a></td>';
    				  echo '</tr>';
    				} // end while
     
    				  echo '<tr>';
    				   echo '<td colspan="5">&nbsp;</td>';
    				  echo '</tr>';
    				  echo '<tr>'; 
    				   echo '<td colspan="5" align="right"></td>';
    				  echo '</tr>';
    				 echo '</table>';
    				 echo '<p>&nbsp;</p>';
    					}
    					echo '<hr/>';
    		} else {
    		    echo "Il n'y a aucun résultat trouvé pour le Numéro de compte: <strong>$query</strong><hr/>";
    		}
     
     
    	}
     
    ?>
     
    <!DOCTYPE html>
    <html>
    	<head>
    		<title>Moteur de Recherche</title>
    		<meta charset="UTF-8" />
    	</head>
    	<body> 
     		<center><form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    			<input type="search" name="query" size="24" placeholder="Rechercher un Numéro ..." /><br/>
    		</form></center>
     
    		<?php echo $resultats; ?>
    	</body>
    </html>
    Mais avec mon nouveau code, la seule réponse qui est retournée lors des Recherches est celle du else du bas du Code PHP c'est-à-dire "Il n'y a aucun résultat trouvé pour le Numéro de compte: 123112333" même si le Numéro de Code à vérifier (à rechercher) est existe bel et bien dans la Base de données.

    Comment donc corriger mon Code pour qu'il vérifie et affiche correctement les Résultats d'un Numéro de Compte recherché si ce Numéro existe dans la Base de Données SINON affiche comme réponse "Il n'y a aucun résultat trouvé pour le Numéro de compte: 123112333" si ce Numéro n'existe pas dans la BDD ???

    Car la seule réponse actuelle que je reçois est celle du Else du bas du Code PHP.

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/03/2018, 17h19
  2. Réponses: 8
    Dernier message: 10/03/2015, 13h25
  3. [MCD] Aidez moi à corriger mon MCD avant de generer MLR
    Par erusie dans le forum Schéma
    Réponses: 14
    Dernier message: 26/08/2010, 20h03
  4. Commande SQL pour afficher les résultats d'une lettre
    Par floctc dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 06/04/2009, 11h37
  5. problème pour éviter les doublons dans une table
    Par bonnet85 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 19/02/2008, 04h35

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