Problème avec INSTR

Problème avec INSTR - PHP - Programmation

Marsh Posté le 28-10-2008 à 20:09:40    

Bonsoir je fait un petit script pour faire des recherches dans ma base de donnée je l'ai adapté sur un bouqin,
voici le script:
 

Code :
  1. <?php
  2. mysql_connect("localhost","root","" );
  3. mysql_select_db("test" );
  4. $clause='';
  5. if(isset($_REQUEST['motclef']))
  6. {
  7. $clause.="WHERE INSTR(nom,'".$_REQUEST['motclef']."')";
  8. }
  9. $sql="SELECT nom FROM entreprise WHERE".$clause;
  10. $resultat=mysql_query($sql)or die(mysql_error());
  11. mysql_close();
  12. ?>
  13. [/close]
  14. voici l'erreur afficher:
  15. [code]
  16. 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 'INSTR(nom,'test')' at line 1


on dirait que sql ne connait pas instr??  
merci de vos aide
ma table contient que le nom et idnom , mon but est de recherché l'id nom que j'ai tapé dans un formulaire ($_REQUEST['motclef']).


Message édité par keo64 le 28-10-2008 à 20:16:42
Reply

Marsh Posté le 28-10-2008 à 20:09:40   

Reply

Marsh Posté le 28-10-2008 à 20:23:40    

Code :
  1. <?php
  2.    mysql_connect("localhost","root","" );
  3.     mysql_select_db("test" );
  4.     $req = mysql_real_escape_string(@$_REQUEST['motclef']);
  5.     $sql="SELECT `nom` FROM `entreprise` LIKE `nom`='%$req%'";
  6.     $resultat=mysql_query($sql)or die(mysql_error());
  7.  
  8. mysql_close();
  9. ?>


 
 
sinon pour le forumaire c'est plus conseiller d'utiliser POST ou GET


Message édité par stealth35 le 28-10-2008 à 20:26:01
Reply

Marsh Posté le 28-10-2008 à 20:29:36    

merci pour le script je l'ai testé voici ce qu'il m'indique
 
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 'LIKE `nom`='%test%'' at line 1
 
j'ai essayé de faire des recheche sur google sur instr mais je ne trouve pas une explication complete,
 

Code :
  1. <?php
  2.    mysql_connect("localhost","root","" );
  3.     mysql_select_db("test" );
  4. $clause='';
  5. if(isset($_REQUEST['motclef']))
  6. {
  7. $clause.="WHERE INSTR(nom,'".$_REQUEST['motclef']."')";
  8. }
  9.     $req = mysql_real_escape_string(@$_REQUEST['motclef']);
  10.     $sql="SELECT `nom` FROM `entreprise` LIKE `nom`='%$req%'";
  11.     $resultat=mysql_query($sql)or die(mysql_error());
  12. mysql_close();
  13. ?>


 
comment fait tu les accent avant nom et après nom car ce n'est pas l'apostrophe il me semble??
en utilsant post ou get je peut par exemple trouvé le nom dupont en mettant juste dup???


Message édité par keo64 le 28-10-2008 à 20:34:29
Reply

Marsh Posté le 28-10-2008 à 20:43:36    

pour l'accent c'est   alt gr + 7
 
sinon, avec la fonction like oui tu peu trouver dupont en tapant "dup", et aussi en tapant "upont"
puisque que le % est le caratere joker, et POST ou GET n'influe pas dessus
 
sinon skuz pour la ligne c'est ca

Code :
  1. $req = mysql_real_escape_string(@$_POST['motclef']);
  2. $sql="SELECT `nom` FROM `entreprise` WHERE `nom` LIKE '%$req%'";


 
 
attention que t'es pas les magic_quote de mis sur ton serveur , sinon ca va faire doublon avec mysql_real_escape_string


Message édité par stealth35 le 28-10-2008 à 20:45:38
Reply

Marsh Posté le 28-10-2008 à 20:53:50    

ok merci je vais testé cela , par contre
cette accent spécial `quel est la différence entre l'appostrophe?
serait un accent qu'on met que dans les requetes sql??
j'ai toujours mis les aprostrophe '

Reply

Marsh Posté le 28-10-2008 à 21:02:08    

comme ca c'est pas ambiguï par rapport au autre quote, y'a ca dans phpmyadmin alors j'ai pris l'habitude de les mettres, libre a toi de la fair ou pas, ca fait plus propre je trouve avec

Reply

Marsh Posté le 28-10-2008 à 21:05:15    

moi je trouve ca bien aussi je vais l'appliquer :)
merci encore a ton scipt il fonctionne très bien aucune erreur :)
par contre je  me demande pourquoi le bouquin n'a pas ecrit comme tu l'a fait car pour un débutant c'est dur d'appliquer les script.


Message édité par keo64 le 28-10-2008 à 21:05:45
Reply

Marsh Posté le 28-10-2008 à 21:12:37    

y'a beaucoup de maniere de faire des choses en php, mais c'est vrai que pour un debut prsenter ca comme ca c'est pas evidant et la solution est un peu obselete
 
pour faire en vraiement plus propre je faisais comme ca avant de passer a PDO
 

Code :
  1. <?php
  2. $link = mysql_connect($server, $user, $password) or die(mysql_error());
  3. $db_selected = mysql_select_db($base, $link) or die (mysql_error());
  4. if(isset($_POST['motclef']) && !empty($_POST['motclef'])){
  5.      $req = mysql_real_escape_string($_POST['motclef']);
  6.      $sql="SELECT `nom` FROM `entreprise` LIKE `nom`='%$req%'";
  7.      $resultat=mysql_query($sql) or die(mysql_error());
  8.    
  9.      while ($data = mysql_fetch_object($resultat)) {
  10.           echo $row->nom;
  11.      }
  12.    
  13. }else{
  14.    echo "Requete vide";
  15. }
  16. ?>


Message édité par stealth35 le 28-10-2008 à 21:18:29
Reply

Marsh Posté le 28-10-2008 à 21:25:12    

ok :)
par contre serait tu la différence entre $_REQUEST et $_POST
j'utilliserait toujours $_POST pour tous ce qui est le résultat d'un forumlaire?


Message édité par keo64 le 28-10-2008 à 21:25:46
Reply

Marsh Posté le 28-10-2008 à 21:33:52    

$_REQUEST contient $_GET $_POST $_COOKIE, donc c'est pareil pour un soucis de propreté je prefere prendre les globlae separer ca te permet de savoir d'ou tu les a prise, et surtout si y'a des doublon ca risque de coincé
 
tu peu utliser $_GET  dans ton formulaire, mais attention si c'est pour de la recherche je te conseil post
 
GET c'est dans un adresse genre     http://www.hello.com?requete=bonjour&mot=salut
 
t'auras
$_GET['requete'] = bonjour
$_GET['mot'] = salut

Reply

Marsh Posté le 28-10-2008 à 21:33:52   

Reply

Marsh Posté le 28-10-2008 à 21:54:05    

merci pour tous avec ca j'ai avancé un tous petit pas.
A+

Reply

Sujets relatifs:

Leave a Replay

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