PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 23-02-2011 08:48:49

Ruca
Membre
Inscription : 23-02-2011
Messages : 6

Problème d'affichage d'une requête

Bonjour,

Je suis débutant en PHP/MySql et j'essaie de faire un ti formulaire pour le taff ou ke dois gérer des archives, le problème c'est que je bute avec un problème d'affichage
de ma requête. J'ai un formulaire de recherche multicritères avec un fichier php (que je colle en dessous) ou la requête vers la base de données me donne rien, même pas une erreur.
Arriverez-vous à m'aider?
Merci d'avance


Voici le code:

<style type="text/css">
.Style2 {
color: #009900;
font-weight: bold;
font-style: italic;
font-size: 36px;
}
</style>

<?php
$id = $_POST['ID'];
$champ1 = "ID";
$n_boite = $_POST['N_Boite'];
$champ2 = "N_Boite";
$service = $_POST['Service'];
$champ3 = "Service";
$annee_de= $_POST['Annee_de'];
$champ4 = "Annee_de";
$annee_a= $_POST['Annee_a'];
$champ5 = "Annee_a";
$a_destruc= $_POST['A_destruc'];
$champ6 = "A_destruc";
$n_immeuble= $_POST['N_immeuble'];
$champ7 = "N_immeuble";
$descript= $_POST['Descript'];
$champ8 = "Descript";

if($_POST['et_ou1'] == 'AND')
{
if(empty($_POST['ID']))
{
$id = 1;
$champ1 = 1;
}
}
else
{
if(empty($_POST['ID']))
{
$id= 1;
$champ1 = 2;
}
}

if($_POST['et_ou2'] == 'AND')
{
if(empty($_POST['N_Boite']))
{
$n_boite = 1;
$champ2 = 1;
}
}
else
{
if(empty($_POST['N_Boite']))
{
$n_boite = 1;
$champ2 = 2;
}
}

if($_POST['et_ou3'] == 'AND')
{
if(empty($_POST['Service']))
{
$service = 1;
$champ3 = 1;
}
}
else
{
if(empty($_POST['Service']))
{
$service = 1;
$champ3 = 2;
}
}

if($_POST['et_ou4'] == 'AND')
{
if(empty($_POST['Annee_de']))
{
$annee_de= 1;
$champ4 = 1;
}
}
else
{
if(empty($_POST['Annee_de']))
{
$annee_de= 1;
$champ4 = 2;
}
}

if($_POST['et_ou5'] == 'AND')
{
if(empty($_POST['Annee_a']))
{
$annee_a = 1;
$champ5 = 1;
}
}
else
{
if(empty($_POST['Annee_a']))
{
$annee_a= 1;
$champ5 = 2;
}
}

if($_POST['et_ou6'] == 'AND')
{
if(empty($_POST['A_destruc']))
{
$a_destruc= 1;
$champ6 = 1;
}
}
else
{
if(empty($_POST['A_destruc']))
{
$a_destruc= 1;
$champ6 = 2;
}
}

if($_POST['et_ou7'] == 'AND')
{
if(empty($_POST['N_immeuble']))
{
$n_immeuble = 1;
$champ7 = 1;
}
}
else
{
if(empty($_POST['N_immeuble']))
{
$n_immeuble= 1;
$champ7 = 2;
}
}

if($_POST['et_ou8'] == 'AND')
{
if(empty($_POST['Descript']))
{
$descript = 1;
$champ8 = 1;
}
}
else
{
if(empty($_POST['Descript']))
{
$descript = 1;
$champ8 = 2;
}
}

$host = '*******';
$user = '*****';
$pass = '*****';
$db = '******';
$tables = '*******';

// connection à la DB
mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());

echo $select = "SELECT * FROM $tables WHERE $champ1 = '".$id."' ".$_POST["et_ou1"]." $champ2 = '".$n_boite."' ".$_POST["et_ou2"]." $champ3 = '".$service."' ".$_POST["et_ou3"]." $champ4 = '".$annee_de."' ".$_POST["et_ou4"]." $champ5 = '".$annee_a."' ".$_POST["et_ou5"]." $champ6 = '".$a_destruc."' ".$_POST["et_ou6"]." $champ7 = '".$n_immeuble."' ".$_POST["et_ou7"]." $champ8 = '".$descript."' ";

if($id=="" AND $n_boite=="" AND $service=="" AND $annee_de=="" AND $annee_a=="" AND $a_destruc=="" AND $n_immeuble=="" AND $descript=="")
echo 'Vous devez preciser en moins un critére de recherche !!';
else
{
$result = mysql_query($select) or die ('Erreur :'.mysql_error());
$total = mysql_num_rows($result);

if($total)
{
echo "<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">
<tr>
<td width=\"9\" height=\"19\"> </td>
<td width=\"50\"> </td>
<td width=\"9\"> </td>
<td width=\"100\"> </td>
<td width=\"9\"> </td>
<td width=\"200\"> </td>
<td width=\"9\"> </td>
<td width=\"70\"> </td>
<td width=\"9\"> </td>
<td width=\"70\"> </td>
<td width=\"9\"> </td>
<td width=\"70\"> </td>
<td width=\"9\"> </td>
<td width=\"300\"> </td>
<td width=\"9\"> </td>
</tr>"
;

echo "<tr>
<td height=\"22\"> </td>
<td valign=\"top\" align=\"center\" bgcolor=\"#cccccc\"><b>ID</b> </td>
<td> </td>
<td valign=\"top\" align=\"center\" bgcolor=\"#cccccc\"><b>N° DE BOITE</b> </td>
<td> </td>
<td valign=\"top\" align=\"center\" bgcolor=\"#cccccc\"><b>SERVICE</b> </td>
<td> </td>
<td valign=\"top\" align=\"center\" bgcolor=\"#cccccc\"><b>ANNEE DE</b> </td>
<td> </td>
<td valign=\"top\" align=\"center\" bgcolor=\"#cccccc\"><b>ANNEE A</b> </td>
<td> </td>
<td valign=\"top\" align=\"center\" bgcolor=\"#cccccc\"><b>ANNEE DESTRUCTION</b> </td>
<td> </td>
<td valign=\"top\" align=\"center\" bgcolor=\"#cccccc\"><b>DESCRIPTION</b> </td>

</tr>";
echo "<tr>
<td height=\"22\"> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>"
;
while($row = mysql_fetch_array($result));
{
echo '<td height="22"> </td>
<td valign="top">'
.$row['ID'].' </td>
<td> </td>
<td valign="top">'
.$row['N_Boite'].' </td>
<td> </td>
<td valign="top">'
.$row['Service'].' </td>
<td> </td>
<td valign="top">'
.$row['Annee_de'].' </td>
<td> </td>
<td valign="top">'
.$row['Annee_A'].' </td>
<td> </td>
<td valign="top">'
.$row['A_destruc'].' </td>
<td> </td>
<td valign="top">'
.$row['Descript'].' </td>
<td> </td>
</tr>'
;
}
echo '<tr>
<td height="50"> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
</table>'
;
}
else echo '<div align="center"><span class="Style1">Aucun résulat ne corresponds à votre recherche !!... </span></div>';

mysql_free_result($result);
mysql_close();
}
?>

Dernière modification par Ruca (23-02-2011 08:50:36)

Hors ligne

#2 23-02-2011 10:01:47

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Problème d'affichage d'une requête

echo $select = "";

c'est pas joli. Fais plutôt :

$select = "";
echo $select;

As-tu essayé de lancer cette requête dans phpmyadmin pour voir si elle te retournai des résultats ?

Hors ligne

#3 23-02-2011 10:34:04

Ruca
Membre
Inscription : 23-02-2011
Messages : 6

Re : Problème d'affichage d'une requête

Oui il me retourne cette erreur de syntaxe:

#1064 - Erreur de syntaxe près de '$select = "SELECT * FROM $tables WHERE $champ1 = '$id' ".$_POST["et_ou1"]." $cha' à la ligne 1
$select = "SELECT * FROM $tables WHERE $champ1 = '$id' ".$_POST[ "et_ou1"]. " $champ2 = '$n_boite' ".$_POST[ "et_ou2"]. " $champ3 = '$service' ".$_POST[ "et_ou3"]. " $champ4 = '$annee_de' ".$_POST[ "et_ou4"]. " $champ5 = '$annee_a' ".$_POST[ "et_ou5"]. " $champ6 = '$a_destruc' ".$_POST[ "et_ou6"]. " $champ7 = '$n_immeuble' ".$_POST[ "et_ou7"]. " $champ8 = '$descript'";
 

J'ai beau changer les ' ou " j'ai toujours la même erreur.

Merci de ton aide

Hors ligne

#4 23-02-2011 11:41:40

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Problème d'affichage d'une requête

Quelle usine à gaz !
Essaye comme cela

$select = sprintf("SELECT *
                  FROM $tables
                  WHERE
                  %s = %s
                  %s
                  %s = '%s'
                  %s
                  %s = '%s'
                  %s
                  %s  = '%s'
                  %s
                  %s = '%s'
                  %s
                  %s = '%s
                  %s
                  %s = '%s'
                  %s
                  %s = '%s'"
,
                  $champ1, $id,
                  $_POST[ "et_ou1"],
                  $champ2, $n_boite,
                  $_POST[ "et_ou2"],
                  $champ3, $service,
                  $_POST[ "et_ou3"],
                  $champ4, $annee_de,
                  $_POST[ "et_ou4"],
                  $champ5, $annee_a,
                  $_POST[ "et_ou5"],
                  $champ6, $a_destruc,
                  $_POST[ "et_ou6"],
                  $champ7, $n_immeuble
                  $_POST[ "et_ou7"],
                  $champ8, $descript);
echo $select;

et montre-nous ce que donne l'echo $select


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#5 23-02-2011 11:51:32

Ruca
Membre
Inscription : 23-02-2011
Messages : 6

Re : Problème d'affichage d'une requête

Le voila le "echo $select;"

SELECT * FROM ma_table WHERE 1 = 1 AND N_Boite = '2' OR 1 = '1' AND 1 = '1' AND 1 = '1' AND 1 = '1' AND 1 = '1' AND 1 = '1'

Merci c'est cool

Dernière modification par Ruca (23-02-2011 11:57:49)

Hors ligne

#6 23-02-2011 11:57:06

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Problème d'affichage d'une requête

une usine a gaz ??????

moi, je dirai plutôt un plat de spaghettis wink

en plus, j'ai faim et c'est l'heure de la bouffe wink:D

a++

Hors ligne

#7 23-02-2011 13:38:02

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Problème d'affichage d'une requête

De toutes manières, sans parenthèses, la conjonction que fera SQL entre les AND et les OR a peu de chances d'être celle attendue.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#8 23-02-2011 13:42:42

Ruca
Membre
Inscription : 23-02-2011
Messages : 6

Re : Problème d'affichage d'une requête

J'avais exactement la même réponse avant de changer, je vais essayer quelque chose

merci ++

Hors ligne

#9 23-02-2011 22:03:09

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Problème d'affichage d'une requête

Bonjour,

Merci pour se post car c'est l'exemple type d'un developpement qui necessite un minimum de construction logique avec un algo en place, avec une réalisation qui souhaite le faire sans le faire vraiment car "on ne veut pas s'embéter". Moralité on se retrouve avec une requête MySQL construite "dynamiquement" (notez les guillemets) complètement instable où on a une chance sur deux que ca marche.
Pour faire ça proprement,
1) on commence par faire un tableau du style $result[x] qui contient chaque variable $_POST retournée par le formulaire. On s'assure que pour chaque variable la valeur passée est admissible auquel cas on a $result[x]=$_POST[blabla] et dans tous les autres cas $result[x]="" (par exemple).
2) ensuite on effectue une boucle dans laquelle on construit la clause where dynamiquement. Si $result[x]=="" ou strlen($result[x]==0 on ne fait rien sinon on concatène $where comme il se doit.
3) on nettoie la variable $where (, à la fin de chaîne par ex)
4) on construit la requête par concaténation : Oh^^ la requête est propre et fonctionne à chaque fois! comme c'est bizarre^^

Bonne continuation

PS: Vous noterez également pour la petite histoire, que lorsque on construit ces fonctions comme cela, on a plus besoin d'utiliser a gogo des fonctions de protection de chaînes pour les requêtes SQL, où il arrive un moment où on ne sait plus ce que l'on doit proteger ou combien de fois elle l'a déjà été.
PS2: On notera aussi que la requête ne sera jamais propre tant que le Select sera construit ainsi : Select * ....

Dernière modification par Jc (23-02-2011 22:30:52)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#10 23-02-2011 22:30:52

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Problème d'affichage d'une requête

En fait, c'est une tendance générale de beaucoup de débutants en PHP. Comme c'est dynamique, autant dynamisé, quitte à dynamité le code.
Autre exemple contre-productif fréquent, construire en dynamique les choses les plus statiques comme un menu ou un <select>.
Et avec la mode AJAX (Hein Pierrot) ce n'est pas prêt de s'arrêter.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

Pied de page des forums