2010-03-24 7 views
0

ce qui est erroné avec ce php mysql_real_escape_string


Atomic Number Latin English Abbreviation

* check the variables for content */

/*** a list of filters ***/ $filters = array( 'searchtext' => array('filter' => FILTER_CALLBACK, 'options' => 'mysql_real_escape_string'), 'fieldname' => array('filter' => FILTER_CALLBACK, 'options' => 'mysql_real_escape_string') ); /*** escape all POST variables ***/ $input = filter_input_array(INPUT_POST, $filters); /*** check the values are not empty ***/ if(empty($input['fieldname']) || empty($input['searchtext'])) { echo 'Invalid search'; } else { /*** mysql hostname ***/ $hostname = 'localhost'; /*** mysql username ***/ $username = 'username'; /*** mysql password ***/ $password = 'password'; /*** mysql database name ***/ $dbname = 'periodic_table'; /*** connect to the database ***/ $link = @mysql_connect($hostname, $username, $password); /*** check if the link is a valid resource ***/ if(is_resource($link)) { /*** select the database we wish to use ***/ if(mysql_select_db($dbname, $link) === TRUE) { /*** sql to SELECT information***/ $sql = sprintf("SELECT * FROM elements WHERE %s = '%s'", $input['fieldname'], $input['searchtext']); /*** echo the sql query ***/ echo '<h3>'.$sql.'</h3>'; /*** run the query ***/ $result = mysql_query($sql); /*** check if the result is a valid resource ***/ if(is_resource($result)) { /*** check if we have more than zero rows ***/ if(mysql_num_rows($result) !== 0) { echo '<table>'; while($row=mysql_fetch_array($result)) { echo '<tr> <td>'.$row['atomicnumber'].'</td> <td>'.$row['latin'].'</td> <td>'.$row['english'].'</td> <td>'.$row['abbr'].'</td> </tr>'; } echo '</table>'; } else { /*** if zero results are found.. ***/ echo 'Zero results found'; } } else { /*** if the resource is not valid ***/ 'No valid resource found'; } } /*** if we are unable to select the database show an error ****/ else { echo 'Unable to select database '.$dbname; } /*** close the connection ***/ mysql_close($link); } else { /*** if we fail to connect ***/ echo 'Unable to connect'; } } }

autre { echo 'Choisissez S'il vous plaît un élément'; J'ai reçu ce code du site tutoriels de phppro.org et j'ai essayé de l'exécuter. Cela donne Attention: mysql_real_escape_string() [function.mysql-real-escape-string]: Un lien vers le serveur n'a pas pu être établi. .... Attention: mysql_real_escape_string() [function.mysql-real-chaîne-d'évasion]: Accès refusé pour l'utilisateur 'ODBC' @ 'localhost' (using mot de passe: NO) ....

Je suis allé à "Note: Une connexion MySQL est nécessaire avant d'utiliser mysql_real_escape_string() sinon une erreur de niveau E_WARNING est générée, et FALSE est renvoyé Si link_identifier n'est pas défini, la dernière connexion MySQL est utilisée."

Mes questions sont: 1-pourquoi mettre une citation simple autour de mysql_real_escape_string? 2-Ils devraient d'abord établir une connexion, puis utiliser l'instruction $ filter array avec mysql_real_escape_string?

+0

injection SQL détectée –

+0

@ Col.Shrapnel: Non, l'ensemble filter \ _input \ _ray() thingy est supposé invoquer real \ _escape \ _string sur chaque élément de \ _POST et stocker le résultat dans $ input. _If_ cela a fonctionné comme prévu il n'y aurait pas de vulnérabilité d'injection sql. – VolkerK

+0

@VolkerK Alors quoi? real_escape_string n'est pas un sortilège qui vous rend "sûr". –

Répondre

2

Votre problème ici n'est pas avec mysql_real_escape_string. Votre problème est lié au fait que vous n'avez pas de connexion à un serveur. Avez-vous une base de données 'periodic_table' fonctionnant localement avec 'nom d'utilisateur' et 'mot de passe' pour vos identifiants de connexion?

+0

oui, je l'ai testé aussi avec d'autres codes. – skyhigh

+0

Déplacez le '$ input = filter_input_array (INPUT_POST, $ filters);' ligne après 'if (is_resource ($ link))' – thetaiko

+0

Man, même tutoriels phppro ne fonctionne pas, donc je suppose que personne n'est sur PRO et pourquoi les gens mettent des tutoriels qui ne fonctionnent pas. – skyhigh

0
  1. Ils ont utilisé le nom de la fonction en tant que paramètre pour l'autre fonction.
  2. Oui
0

Je pense que mysql_real_escape_string a besoin d'une connexion pour qu'il sache ce que charset est utilisé.

également en php, guillemets simples sont plus rapides alors que des guillemets doubles php ne pas traiter le contenu de Thr chaîne recherche varname $ etc.

Questions connexes