Requete BDD sur tables multiples

Requete BDD sur tables multiples - PHP - Programmation

Marsh Posté le 04-11-2014 à 19:19:22    

Bonjour,
J'ai décidé de réactualiser mon mini site qui était programmé en PHP 5.3 en le passant en 5.5
Depuis le codage a changé et je n'arrive pas à refaire tourner mon application...
Voici l'ancien code qui fonctionnait avant la mise à jour:

Code :
  1. $dep_rs=$_GET['dep_rs'];
  2. $sql= "SHOW TABLES LIKE 'etudes_%'";
  3. $req = mysql_query($sql);
  4.   while ($data = mysql_fetch_array($req)) {
  5.   $base1 = mysql_result($req, 0);
  6.   $i=0;
  7.   $rows=mysql_num_rows($req);
  8.   $sql = "SELECT DISTINCT ref_client FROM $base1 WHERE dep_rs='$dep_rs'";
  9.   for ($i=0;$i<$rows;$i++){
  10.   $sql.= " UNION SELECT DISTINCT ref_client FROM ".mysql_result($req, $i)." WHERE dep_rs='$dep_rs'";
  11.   }
  12.   $sql.= " ORDER BY ref_client";
  13.   }
  14.   $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
  15.   while ($data = mysql_fetch_array($req)){
  16.   echo '<a href="#" onclick="window.opener.document.getElementById(\'ref_client\').value=\''.addslashes($data["ref_client"]).'\'; window.close(); return false;">'.$data["ref_client"].'</a><br/>';
  17.   }
  18. mysql_free_result($req);
  19. mysql_close();


 
J'ai déjà changé les fonctions mysql par mysqli mais celle qui pose problème est mysql_result car elle n'existe plus.
J'ai déjà testé plus trucs mais rien ne convient car la plupart du temps, ça me renvoie uniquement les résultats de la dernière table qui est dans la liste...
Si quelqu'un a la solution miracle, je suis preneur :) merci par avance

Reply

Marsh Posté le 04-11-2014 à 19:19:22   

Reply

Marsh Posté le 05-11-2014 à 09:26:09    

Lignes 1, 10 et 12 : joli risque de SQL injection détecté :/
 
Quant à la boucle for qui nous génère une requête avec pleins d'UNION, ça sent bon la requête mal construite ou pire, la BD mal conçue...
 
La lib PDO serait plus appropriée je pense. Et plus qu'une simple traduction de fonctions en PHP en d'autres, une refonte total de ton site serait probablement le mieux à faire car le mélange de code php/html/javascript dans un même script, ça fait pas tellement bien organisé. Regardes du côté du design pattern "MVC" ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 09-11-2014 à 09:21:53    

En incluant directement ce code, la fonction mysqli_result fonctionne

Code :
  1. function mysqli_result($res, $row, $field=0) {
  2.     $res->data_seek($row);
  3.     $datarow = $res->fetch_array();
  4.     return $datarow[$field];
  5. }


Quant aux injections sql, je ne m'en soucis pas car c'est un site en local et puis plus vraiment le temps pour modifier des choses sur un projet qui date de plusieurs années déjà... mais je le savais déjà au moment où je l'ai fais
 
Le sujet est clos pour ma part, merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed