Problème requête PHP/MySQL

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. 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
    1. 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 ?
  2. 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
    1. 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
      1. Écris-la comme ça :
        $query = 'SELECT '.$field.' FROM '.$table.' WHERE lower('.$field.') LIKE "'.$search.'%" ORDER BY '.$field;

        Ça donne quoi ?
    2. 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
      1. 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
    3. 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
      1. 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>';
        
    4. 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.
      1. Tu peux en dire plus ?