PHP|Débutant :: Forums

Advertisement

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

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

#1 06-09-2013 19:50:58

marukun libre
Membre
Inscription : 06-09-2013
Messages : 4

bug PHP/mysql

bonjour tout le monde,

j'ai un bug dans mon code PHP/MySQL lorsque j'essaye de faire une intersection entre deux tables.

le navigateur m'affiche l'erreur suivante:

Table 'intervention.sql_one' doesn't exist

voilà mon code:
$num_intervention= mysql_real_escape_string($_POST['num_intervention']);
$demandeur= mysql_real_escape_string($_POST['demandeur']);
$sql_one="select * from intervention_logiciel where $num_intervention=num_intervention";
$sql_demandeur="select * from intervention_logiciel where $demandeur=demandeur";
$sql="select * from sql_one
where (nom_demandeur)in (select nom_demandeur from sql_demandeur)";

$result=mysql_query($sql) or die(mysql_error());

bon le problème que j'ai et que, mon formulaire contient les deux champs num_intervention et demandeur ma petite application doit faire une recherche dans la base de données suivant les données entrées par l'utilisateur, or l'utilisateur peut remplir les deux champs ou bien remplir qu'un seul, donc le AND va pas me donner le résultat que j'attend lorsqu'un des champs de saisi dans le formulaire n'est pas rempli

Hors ligne

#2 07-09-2013 02:51:45

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

Re : bug PHP/mysql

Bonjour,

Si la colonne demandeur est de type VARCHAR, alors il vous faut écrire :


// si $num_intervention est numérique alors $num_intervention=intval($_POST['num_intervention']);
$num_intervention= mysql_real_escape_string($_POST['num_intervention']);
$demandeur= mysql_real_escape_string($_POST['demandeur']);
$sql_one="SELECT * FROM intervention_logiciel ";
$sql_demandeur="SELECT * FROM intervention_logiciel WHERE demandeur='$demandeur' ";
// le code si dessous considère que toutes les variables sont de type VARCHAR.
// Faire les modifications en conséquence si $num_intervention est de type INTEGER
// c'est à dire if ($num_intervention>0){$where_one=" WHERE num_demandeur=$num_demandeur ";}
$where_one='';
if (strlen($num_intervention)>0){$where_one=" WHERE num_demandeur='$num_demandeur' ";}
if (strlen($demandeur)>0){$where_one="AND demandeur='$demandeur' ";}
if (substr($where_one,0,3)==='AND'){$where_one=str_replace('AND','WHERE',$where_one);}
$result=mysql_query($sql_one.$where_one) or die(mysql_error());
 

Mais ce code est loin d'être optimisé au niveau interrogation base de données.
Pour éviter trop de casse je vous conseille, toujours dans le cas où la colonne demandeur est de type VARCHAR, de poser un index partiel sur la colonne demandeur, d'une longueur significative (au moins égale à 5) et de faire en sorte que votre collation soit case insensitive (insensible à la casse).
J'espère également et vivement que $num_intervention est numérique.

PS: Evitez la guerre des étoiles wink (SELECT * FROM ...)

Cordialement,

Jc

Dernière modification par Jc (07-09-2013 03:09:25)


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

Hors ligne

#3 07-09-2013 13:02:33

marukun libre
Membre
Inscription : 06-09-2013
Messages : 4

Re : bug PHP/mysql

bonjour JC, et merci énormément, bon j'essayer le code que vous m'avez suggérer, mais le problème que, quand je laisse le champs demandeur vide et je fait ma recherche juste avec le champs num_intervention,, ça marche. mais au contraire quand j'essaye de faire une recherche en utilisant le champs demandeur, ou bien en utilisant les deux champs, ca marche pas, et ca m'affiche:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '='john'' at line 1

(john est le demandeur que je saisi dans le formulaire.
voici mon code:
$sql_one="select * from intervention_logiciel";
$where_one='';
if ($num_intervention>0){$where_one=" WHERE num_intervention=$num_intervention ";}
if (strlen($demandeur)>0){$where_one="AND demandeur='$demandeur' ";}
if (substr($where_one,0,3)==='AND'){$where_one=str_replace('AND','WHERE',$where_one);}
$result=mysql_query($sql_one.$where_one) or die(mysql_error());

Dernière modification par marukun libre (07-09-2013 13:03:17)

Hors ligne

#4 07-09-2013 15:23:00

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

Re : bug PHP/mysql

Bonjour,

C'est normal il vous faut rajouter un espace à la fin de la chaîne de caractères $sql_one, car vous l'avez retiré en recopiant.


$sql_one="SELECT * FROM intervention_logiciel ";
 

++


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

Hors ligne

#5 07-09-2013 15:41:09

marukun libre
Membre
Inscription : 06-09-2013
Messages : 4

Re : bug PHP/mysql

merci énormément Jc,

Dernière modification par marukun libre (07-09-2013 18:51:05)

Hors ligne

#6 07-09-2013 22:55:21

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

Re : bug PHP/mysql

De rien smile


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

Hors ligne

Pied de page des forums