Problème requête PHP/MySQL

delaville81 Messages postés 209 Statut Membre -  
Reivax962 Messages postés 3742 Statut Membre -
Bonjour,
Je sollicite votre aide pour résoudre un problème que je rencontre sur une requête. C'est le fichier PHP que j'ai trouvé sur un site pour créer un imput autocompletion.
mon code
<?php
//SÈcuritÈ pour empÍcher d'interroger la base librement : liste des table et des champs utilisables
$check = array(
	'vin' => array('clevin', 'id_vin')
);

//Connexion # la base de donnÈes
@mysql_connect('serveur', 'login', 'motdepasse') or die('Connexion # la base de donnÈes impossible');
@mysql_select_db('login') or die('base de donnÈes inexistante');

$table = (isset($_GET['table']) ? $_GET['table'] : 'vin');
$field = (isset($_GET['field']) ? $_GET['field'] : 'clevin');
$search = (isset($_GET['search']) ? $_GET['search'] : 'id_vin');

if(isset($check[$table]) && in_array($field, $check[$table])){ //VÈrification
	if($table && $field && $search){
		$search = strtolower(mysql_escape_string($search));

		header("content-type: application/xml");
		echo '<?xml version="1.0" encoding="iso-8859-1" ?>';
		echo '<suggests>';
		
		$query = 'SELECT ''.$field.'' FROM ''.$table.'' WHERE lower(''.$field.'') LIKE "'.$search.'%" ORDER BY ''.$field.''';
		$result = mysql_query($query);
		while($row = mysql_fetch_array($result)){
			echo '	<suggest>'.$row[$field].'</suggest>';
		}
		
		echo '</suggests>';
	}
}
else{
	die('RequÍte interdite');
}
?>


J'ai renseigné serveur, login et mot de passe
Mon problème est le suivant, je n'arrive pas à afficher la liste des champs que je veux. Il ne se passe rien.
Il y a sureent une erreur dans le code, si oui, je ne la trouve pas.
De plus à la suite le la ligne
echo '<?xml version="1.0" encoding="iso-8859-1" ?>';

le code PHP se termine. Je ne sais pas comment le coder pour relancer le php proprement.
Merci d'avance pour votre aide



--
Bien PHPment et MySQLment
Delaville

6 réponses

  1. Reivax962 Messages postés 3742 Statut Membre 1 011
     
    Bonjour,

    Il y a un problème avec les apostrophes et quotes dans cette ligne :
    $query = 'SELECT ''.$field.'' FROM ''.$table.'' WHERE lower(''.$field.'') LIKE "'.$search.'%" ORDER BY ''.$field.''';

    Remplace par :
    $query = 'SELECT ''.$field.'' FROM ''.$table.'' WHERE lower(''.$field.'') LIKE "'.$search.'%" ORDER BY ''.$field.''';


    Xavier
    0
    1. Reivax962 Messages postés 3742 Statut Membre 1 011
       
      Ah, ok, c'est CCM qui remplace les (alt gr + 7) par des simples quotes... pas pratique pour écrire des requête MySQL !!

      Bon, alors pour voir déjà si le script marche, que se passe-t-il dans ton navigateur si tu appelles directement le script, sans passer par ta page où tu veux qu'il s'affiche ?
      0
  2. delaville81 Messages postés 209 Statut Membre
     
    Merci Xavier pour ta réponse si rapide
    mais lors que je lance le script, j'obtient :

    Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /xxxxxxxxxxxxxxxxx/autocomplete_ajax.php on line 29

    La ligne 29 est la ligne du SELECT
    J'ai donc besoin encore de ton aide
    Merci d'avance
    0
  3. delaville81 Messages postés 209 Statut Membre
     
    En enlevant les doubles quotes, j'ai une autre message (dans un cadre rouge) que je n'ai jamais vu

    This page contains the following errors:
    
    error on line 1 at column 47: ParsePI: PI php space expected
    Below is a rendering of the page up to the first error.
    

    Pour être franc, je ne comprend pas la signification

    Merci pour votre aide
    0
    1. Reivax962 Messages postés 3742 Statut Membre 1 011
       
      Écris-la comme ça :
      $query = 'SELECT '.$field.' FROM '.$table.' WHERE lower('.$field.') LIKE "'.$search.'%" ORDER BY '.$field;

      Ça donne quoi ?
      0
  4. delaville81 Messages postés 209 Statut Membre
     
    C'est toujours pareil, rien ne s'affiche
    Dans le code source de la page interprétée j'obtient
    <suggests></suggests>
    

    Avez vous une idée ?

    De plus j'ai viré de ma page
    echo '<?xml version="1.0" encoding="iso-8859-1" ?>';
    

    Parce que la page montrée une erreur incompréhensible (voir message précèdent)
    Si vous connaissez le moyen de coder cette ligne pour qu'elle ne face plus afficher d'erreur je suis preneur

    Merci de votre aide
    0
    1. Reivax962 Messages postés 3742 Statut Membre 1 011
       
      Bonjour,

      Mets un echo $query;
      juste après ta requête, et affiche le code source... Tu devrais voir apparaître ta requête, ce qui devrait te permettre de comprendre ce qui ne va pas par rapport à ta base de données.

      Xavier
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. delaville81 Messages postés 209 Statut Membre
     
    Xavier,
    Merci,
    en faisant
    $query = 'SELECT '.$field.' FROM '.$table.' WHERE lower('.$field.') LIKE "'.$search.'%" ORDER BY '.$field; 
    


    ça marche.

    Mais j'ai toujours le problème avec
    echo '<?xml version="1.0" encoding="iso-8859-1" ?>';
    

    Le code à la suite s'affiche en HTML. Il prend en compte le ?> à la fin de la ligne comme fin du code PHP. Je ne sais pas comment l'intégrer différemment.
    Si vous avez une idée
    Merci
    0
    1. Reivax962 Messages postés 3742 Statut Membre 1 011
       
      Pour ce problème, je pense que le mieux est de ne pas l'inclure dans du php avec echo, mais de le mettre simplement dans le flux de la page...
      Comme ceci :
      if(isset($check[$table]) && in_array($field, $check[$table])){ //VÈrification
          if($table && $field && $search){
              $search = strtolower(mysql_escape_string($search));
      
              header("content-type: application/xml");
      ?>
      <?xml version="1.0" encoding="iso-8859-1" ?>
      <?php
              echo '<suggests>';
      
      0
  7. delaville81 Messages postés 209 Statut Membre
     
    Merci pour ta réponse mais malheureusement en ajoutant cette ligne, mon autocompletion ne marche plus.
    Donc pour le moment j'enlève la ligne.
    0
    1. Reivax962 Messages postés 3742 Statut Membre 1 011
       
      Tu peux en dire plus ?
      0