PHP MySQL problème de requète

Résolu/Fermé
LeHigh Messages postés 109 Date d'inscription mardi 12 mai 2009 Statut Membre Dernière intervention 6 septembre 2013 - 14 mai 2009 à 14:28
LeHigh Messages postés 109 Date d'inscription mardi 12 mai 2009 Statut Membre Dernière intervention 6 septembre 2013 - 14 mai 2009 à 15:22
Bonjour,


je suis sur un site web ou je dois résoudre des bugs PHP suite à la migration du site sur un serveur Linux, le code n'est pas de moi, je reprends le travail de quelqu'un d'autre.
Même en remplissant n'importe quel champ du formulaire (exemple ci dessous), la requête effectuée est toujours celle du cas else :
$req = "SELECT * FROM micro, uc WHERE micro.ref_uc = uc.ref_uc ORDER BY marque_uc"; Et je ne sais pas pourquoi :(

<a href="http://www.noelshack.com/voir/130309/img1029429.JPG"><img src="http://www.noelshack.com/voir/130309/img1029429.JPG"></img></a>

<?php
include ('date.php');
include ('connect.php');
$idconnect = bddconnect();

if ($idconnect) {

$ok = false;
$ip = false;
$name = $nom_util;
if ($num_uc != ""){ $num_uc = "AND micro.num_uc LIKE '%".$num_uc."%' "; $ok = true; }
if ($garantie_uc != "") { $garantie_uc = "AND uc.garantie_uc LIKE '".$garantie_uc."' "; $ok = true; }
if ($marque_uc != ""){ $marque_uc = "AND uc.marque_uc LIKE '".$marque_uc."' "; $ok = true; }
if ($date_ach_uc != ""){ $date_ach_uc = "AND uc.date_ach_uc LIKE '".$date_ach_uc."' "; $ok = true; }
if ($type_uc != "") { $type_uc = "AND uc.type_uc LIKE '".$type_uc."' "; $ok = true; }
if ($date_affect_uc != ""){ $date_affect_uc = "AND uc.date_affect_uc LIKE '".$date_affect_uc."' "; $ok = true; }
if ($num_inv_uc != ""){ $num_inv_uc = "AND uc.num_inv_uc LIKE '".$num_inv_uc."' "; $ok = true;}
if ($num_serie_uc != ""){ $num_serie_uc = "AND uc.num_serie_uc LIKE '".$num_serie_uc."' "; $ok = true; }
if ($materiel != ""){ $materiel = "AND micro.materiel LIKE '".$materiel."' "; $ok = true; }
if ($nom_util != ""){ $nom_user = "AND micro.nom_util LIKE '%".$nom_util."%'"; $ok = true; }
if ($service != "") { $service = "AND micro.service LIKE '".$service."' "; $ok = true; }
if ($unite != ""){ $unite = "AND micro.unite LIKE '".$unite."' "; $ok = true; }
if ($marque_ecran != ""){ $marque_ecran = "AND ecran.marque_ecran LIKE '".$marque_ecran."' "; $ok = true; $ecr = true; }
if ($garantie_ecran != ""){ $garantie_ecran = "AND ecran.garantie_ecran LIKE '".$garantie_ecran."' "; $ok = true; $ecr = true; }
if ($type_ecran != ""){ $type_ecran = "AND ecran.type_ecran = '".$type_ecran."' "; $ok = true; $ecr = true; }
if ($date_ach_ecran != ""){ $date_ach_ecran = "AND ecran.date_ach_ecran LIKE '".$date_ach_ecran."' "; $ok = true; $ecr = true; }
if ($num_inv_ecran != ""){ $num_inv_ecran = "AND ecran.num_inv_ecran LIKE '".$num_inv_ecran."' "; $ok = true; $ecr = true; }
if ($date_affect_ecran != ""){ $date_affect_ecran = "AND ecran.date_affect_ecran LIKE '".$date_affect_ecran."' "; $ok = true; $ecr = true; }
if ($num_serie_ecran != ""){ $num_serie_ecran = "AND ecran.num_serie_ecran LIKE '".$num_serie_ecran."' "; $ok = true; $ecr = true; }
if ($cpu != ""){ $cpu = "AND uc.cpu LIKE '".$cpu."' "; $ok = true;}
if ($cad_cpu != "") { $cad_cpu = "AND uc.cad_cpu LIKE '".$cad_cpu."' "; $ok = true; }
if ($ram != "") { $ram = "AND uc.ram LIKE '".$ram."' "; $ok = true; }
if ($dram != "") { $dram = "AND uc.dram_uc LIKE '".$dram."' "; $ok = true; }
if ($dd != ""){ $dd = "AND uc.dd LIKE '".$dd."' "; $ok = true;}
if ($se != ""){ $se = "AND uc.se LIKE '".$se."' "; $ok = true; }
if ($lecteur != "") { $lecteur = "AND uc.lecteur LIKE '".$lecteur."' "; $ok = true;}
if ($dao != "") { $dao = "AND uc.dao LIKE '".$dao."' "; $ok = true; }
if ($adr_ip != "") { $adr_ip = "AND ip.ip LIKE '".$adr_ip."' "; $ok = true; $ip=true; }
if ($dns != "") { $dns = "AND ip.dns LIKE '".$dns."' "; $ok = true; $ip=true; }
if ($masque != ""){ $masque = "AND ip.masque LIKE '".$masque."' "; $ok = true; $ip=true; }
if ($wins != "") { $wins = "AND ip.wins LIKE '".$wins."' "; $ok = true; $ip=true; }
if ($passerelle != ""){ $passerelle = "AND ip.passerelle LIKE '".$passerelle."' "; $ok = true; $ip=true; }
if ($date_d = "") { $date_d = "%"; }
if ($date_f = "") { $date_f = "%"; }

if ($ok == true)
{// Si au moins un des critères a été renseigné
$req = "SELECT * FROM micro, uc "; // Création de la requête avec les table micro, uc et ecran

if ($ip == true) { // Ajout de la table IP dans la requête
$req .= ", ip ";
}
if ($ecr == true) {
$req .= ", ecran ";
}

$req .= "WHERE micro.ref_uc = uc.ref_uc "; // Joitures

if ($ip == true) { // Ajout des champs IP, DNS, PSRL, DNS et WINS de la table IP dans la requête + joiture avec la table IP
$req .= "AND micro.ref_ip = ip.ref_ip ";
$req .= $adr_ip." ";
$req .= $masque." ";
$req .= $passerelle." ";
$req .= $dns." ";
$req .= $wins." ";
}

if ($ecr == true) {
$req .= "AND micro.ref_ecran = ecran.ref_ecran ";
$req .= $marque_ecran." ";
$req .= $type_ecran." ";
$req .= $garantie_ecran." ";
$req .= $num_inv_ecran." ";
$req .= $num_serie_ecran." ";
$req .= $date_ach_ecran." ";
$req .= $date_affect_ecran." ";
}

$req .= $num_uc." ";
$req .= $nom_user." ";
$req .= $service." ";
$req .= $unite." ";
$req .= $materiel." ";
$req .= $marque_uc." ";
$req .= $type_uc." ";
$req .= $num_inv_uc." ";
$req .= $num_serie_uc." ";
$req .= $date_ach_uc." ";
$req .= $date_affect_uc." ";
$req .= $garantie_uc." ";
$req .= $cpu." ";
$req .= $cad_cpu." ";
$req .= $dd." ";
$req .= $ram." ";
$req .= $dram." ";
$req .= $lecteur." ";
$req .= $se." ";
$req .= $dao." ";
$req .= "ORDER BY micro.num_uc";
} else { // Sinon, sélection de l'ensemble des micros

$req = "SELECT * FROM micro, uc WHERE micro.ref_uc = uc.ref_uc ORDER BY marque_uc";
}
$res = mysql_query($req);
$num = mysql_num_rows($res);

if ($res) {
if ($num == 0) {
echo 'Aucune fiche trouvée !!<p>';
echo '<a href="form_search_fiche.php?p=m">Retour</a>';
} else
{
echo '<form name="selection" action="caract_micro.php" method="POST">';
echo '<table width="100%">';
echo '<tr><td width="100%" class="fondblanc_txtbleu14g" align="center">Résultat de la recherche</td></tr>';
if ($num == 1) {
echo '<tr><td width="100%" class="fondblanc_txtbleu14g" align="center">'.$num.' fiche trouvée</td></tr>';
} else {
echo '<tr><td width="100%" class="fondblanc_txtbleu14g" align="center">'.$num.' fiches trouvées</td></tr>';
}
echo '<tr><td height="10"></td></tr>';
echo '<tr><td width="100%">';
echo '<table width="98%" border=0 cellspacing=0>';
echo '<tr class="fondjaunepale_txtbleu12g">';
echo '<td width="5%">Choix</td>';
echo '<td width="10%" align="center">N° du micro</td>';
echo '<td width="20%" align="center">Marque</td>';
echo '<td width="20%" align="center">Type</td>';
echo "$req";
echo '<td width="12%" align="center">Service</td>';
echo '<td width="15%" align="center">Unité</td></tr>';
echo '</table>';
echo '</td></tr><tr><td>';

Merci d'avance et bonne journée :)

2 réponses

Bonjour

Très probablement une question de register_globals qui était à on sur l'ancien serveur et qui est à off sur le nouveau
Pour vérifier, ajoute
extract($_POST);
au début du script et vérifie si ça marche mieux
Si oui, tu risques d'avoir le problème à de nombreuses autres pages de l'application. Et le extract que je te propose est une mauvaise solution, c'est juste pour diagnostiquer.
1
LeHigh Messages postés 109 Date d'inscription mardi 12 mai 2009 Statut Membre Dernière intervention 6 septembre 2013 1
14 mai 2009 à 14:57
Oui tu as raison, avec extract($_POST); ca marche.
Mais pourquoi est ce que c'est une mauvaise solution ?
0
Parce qu'elle pose un problème de sécurité. N'importe qui peut créer un formulaire avec les noms de champs qu'il veut, cela va créer autant de variables dans ton programme, indépendamment de ta volonté. Les valeurs de ces variables seront déterminées par celui qui a créé le formulaire, pas par toi. Si tu as une variable '$admin' qui t'ouvre l'accès à des fonctions particulières, je te laisse deviner les conséquences.
La parade est simple : pas de extract brutal et irréfléchi, mais la récupération des variables une par une :

if (isset($_POST['num_uc'])) $num_uc=$_POST['num_uc']);
on doit pouvoir mettre ça dans une petite boucle et lui passer la liste des variables qu'on veut récupérer, pour être sûr de ne pas être pollué par des variables inattendues.
1
LeHigh Messages postés 109 Date d'inscription mardi 12 mai 2009 Statut Membre Dernière intervention 6 septembre 2013 1
14 mai 2009 à 15:22
Merci beaucoup le père pour ces réponses très satisfaisantes :).
Je vais essayer avec ce que tu viens de me dire maintenant.
0