[RESOLU] Affichage requete sql dans un tableau

Petit nouveau ! | 5 Messages

17 déc. 2012, 00:24

Salut à tous,
J'ai un souci d'affiche dans le tableau, la liste s'affiche entièrement à la base mais lors d'une recherche par mots clés ou par domaine via la liste déroulante les lignes s'affichent (le quadrillage du tableau) mais elles sont vides.

Code : Tout sélectionner

<?php /* Entete page */ echo'<head>'; echo'<title>Recherche - Base documentaire</title>'; echo'<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'; echo'<meta http-equiv="Content-Language" content="fr" />'; /* JQUERY */ echo'</head>'; echo'<body>'; /* CSS */ echo'<style> table { border:3px solid #6495ed; border-collapse:collapse; width:90%; margin:auto; } thead, tfoot { background-color:#D0E3FA; border:5px solid #6495ed; } tbody { background-color:#FFFFFF; border:1px solid #6495ed; } th { font-family:monospace; border:1px dotted #6495ed; padding:5px; background-color:#EFF6FF; //width:25%; } td { font-family:sans-serif; font-size:80%; border:1px solid #6495ed; padding:5px; text-align:center; } caption { font-family:sans-serif; } </style>'; /* Connexion à la BDD */ mysql_connect('localhost','XXXX',''); mysql_select_db('ouvrage'); mysql_query("SET NAMES 'utf8'"); /* Traitement */ echo '<a href="/Biblio/biblio.php">Liste complète</a><br>'; //On determine l'expression a rechercher if( isset( $_POST['recherche'] ) ){ $rec = htmlentities( $_POST['recherche'] ); }else{ $rec = ''; } //On determine le type de recherche if( isset( $_POST['type'] ) ){ if( $_POST['type']=='un' ){ //Un des mots $type = 1; }elseif( $_POST['type']=='tout' ){ //Tout les mots $type = 2; }else{ //L'expression exacte $type = 3; } }else{ $type = 1;//type par defaut: L'expression exacte } echo'<form action="'.$_SERVER["PHP_SELF"].'" method="post" id="formRecherche">'; echo'Expression &agrave; rechercher: <input type="text" name="recherche" value="'.$rec.'" /><br />'; echo'Type de recherche: <input type="radio" name="type" value="un"'.(($type==1)?' checked="checked"':'').' />'; echo'Un des mots <input type="radio" name="type" value="tout"'.(($type==2)?' checked="checked"':'').' />'; echo'Expression exacte (titre)<br /><input type="submit" value="Rechercher" /><br />'; echo'<select name="liste_domaine" onchange="$(\'#formRecherche\').submit();">'; $selected = (($_POST["liste_domaine"]=='voirtout')?' selected="selected"':''); echo'<option value="voirtout"'.$selected.'>--Tous les domaines--</option>'; $selected = (($_POST["liste_domaine"]=='Domaine1')?' selected="selected"':''); echo'<option value="domaine1"'.$selected.'>Domaine1</option>'; $selected = (($_POST["liste_domaine"]=='Domaine2')?' selected="selected"':''); echo'<option value="domaine2"'.$selected.'>Domaine2</option>'; $selected = (($_POST["liste_domaine"]=='Domaine3')?' selected="selected"':''); echo'<option value="domaine3"'.$selected.'>Domaine3</option>'; $selected = (($_POST["liste_domaine"]=='Domaine4')?' selected="selected"':''); echo'<option value="domaine4"'.$selected.'>Domaine4</option>'; $selected = (($_POST["liste_domaine"]=='Domaine5')?' selected="selected"':''); echo'<option value="domaine5"'.$selected.'>Domaine5</option>'; echo'</select>'; echo'<input type="submit" value="Envoyer"><br/>'; echo'</form>'; /* Traitement des résultats */ //On dertermine les informations des ouvrages if(isset($_POST["liste_domaine"])){ if($_POST["liste_domaine"]=='voirtout'){ $resultat = @mysql_query("SELECT * FROM exemple"); }else{ $resultat = @mysql_query("SELECT * FROM exemple WHERE domaine ='".mysql_real_escape_string($_POST['liste_domaine'])."' ORDER BY id ASC"); } }else{ $req= 'SELECT nom, prenom, editeur, titre, millesime, domaine, serie, ID FROM exemple'; $sCondition = ''; if( $type==1 ){ //ayant un des mots dans leurs informations $mots = explode(' ',$rec);//On separe lexpression en mots cles foreach( $mots as $mot ){ if($sCondition==''){ $sCondition.=' WHERE'; }else{ $sCondition.=' OR'; } $sCondition .= ' titre LIKE "%'.$mot.'%" OR domaine LIKE "%'.$mot.'%" OR serie LIKE "%'.$mot.'%"'; } }elseif( $type==2 ){ //ayant tout des mots dans leurs informations $mots = explode(' ',$rec);//On separe lexpression en mots cles foreach( $mots as $mot ){ if($sCondition==''){ $sCondition.=' WHERE'; }else{ $sCondition.=' AND'; } $sCondition .= ' titre LIKE "%'.$mot.'%"'; } }else{ if($sCondition==''){ $sCondition.=' WHERE'; } //ayant l'expression exacte dans leurs informations $sCondition .= ' titre LIKE "%'.$rec.'%"'; } //Les utilisateur seront ranges par domaine en ordre croissant $req .= $sCondition.' order by domaine asc'; $resultat = @mysql_query($req); } if( $resultat ){ if( mysql_num_rows($resultat)>0 ){ echo'<h2>R&eacute;sultats</h2>'; echo'<div style="text-align:center"> <table> <tr> <th>Titre</th> <th>Editeur</th> <th>Millésime</th> <th>Nom</th> <th>Domaine</th> </tr>'; //On affiche les resultats while( $row = mysql_fetch_object($resultat) ){ echo'<tr> <td>'.$row->titre.'</td> <td>'.$row->editeur.'</td> <td>'.$row->millesime.'</td> <td>'.$row->nom.'</td> <td>'.$row->domaine.'</td> </tr>'; } echo'</table> </div>'; }else{ echo'<p>Aucun résultat ne correspond à votre recherche</p>'; } }else{ echo'<p>Erreur de requête</p>'; } echo'</body> </html>'; ?>
Merci de votre aide :D

Petit nouveau ! | 5 Messages

17 déc. 2012, 00:25

Je précise que je débute en programmation et que j'avais rédigé un texte plus long mais qui a été refusé par le système anti spam ... :oops:

ViPHP
xTG
ViPHP | 7331 Messages

17 déc. 2012, 11:21

Commences par afficher ta requête et à l'exécuter directement sur le SGBD (console mysql ou bien phpmyadmin).
echo $req;
Et vérifies qu'elle te renvoie bien ce que tu lui avais demandé via le formulaire.

Petit nouveau ! | 5 Messages

17 déc. 2012, 11:31

Je l'ai déjà fait dans phpmyadmin et direct dans le code, la requête affiche bien le bon résultat.
C'est ça qui est étrange !

Je précise ça affiche Resource id #3 mais lors d'un var_dump($row) celà m'affiche bien :

object(stdClass)#1 (8) { ["NOM"]=> string(29) "nom de l'utilisateur " ["PRENOM"]=> string(0) "prenom de l'utilisateur" ["EDITEUR"]=> string(25) "Editions machin truc" ["TITRE"]=> string(25) "bouquin" ["MILLESIME"]=> string(4) "2011" ["SERIE"]=> string(16) "serie du bouquin" ["DOMAINE"]=> string(6) "domaine du bouquin" ["ID"]=> string(1) "1" }

etc etc donc celà renvoi le bon résultat de recherche..

Petit nouveau ! | 5 Messages

17 déc. 2012, 12:20

Pour vous donner une idée voilà des copies écrans de ce que ça donne
En S1 la recherche, S2 la page "d'accueil" (avant recherche et flouté).
S1.jpg
S2.jpg
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

ViPHP
xTG
ViPHP | 7331 Messages

17 déc. 2012, 12:25

C'est bien bizarre ton affaire...
Pour moi ton code ne contient pas d'erreur.

Donc s'il y a souci d'affichage cela est provoqué par tes données.
As-tu regardé la source HTML générée pour voir si tu y voyais quelque chose pouvant nous faire avancer ?

Petit nouveau ! | 5 Messages

17 déc. 2012, 12:27

Problème résolu, les attributs doivent être en majuscule car les champs sont en majuscules ... :? :D

<td>'.$row->TITRE.'</td>
<td>'.$row->EDITEUR.'</td>
<td>'.$row->MILLESIME.'</td>
<td>'.$row->NOM.'</td>
<td>'.$row->DOMAINE.'</td>