Page 1 sur 2

Parse error: syntax error, unexpected ';'

Posté : 26 mars 2012, 23:28
par mounlight6
Bonjour,
J'essaye de faire une sorte d'annuaire avec une cherche dans une BDD MySQL mais je rencontre actuellement 2 problèmes:
1)Avec le code ci-dessous j’obtiens l'erreur: Parse error: syntax error, unexpected ';' in /.../test4.php on line 17 mais j'ai beau regarder ma ligne 17 je ne vois pas d'erreur de syntax
2)Avant le problème 1) j'avait l'erreur suivante: Unknown column 'le texte entré par l'utilisateur' in 'where clause'...

Pouvez vous m'aider sur ces points, merci beaucoup
$txt=''. htmlspecialchars($_GET["name"]) .'' ;
@mysql_select_db($database) or die( "Unable to select database");

echo ''. htmlspecialchars($_GET["name"]) .'' ;
$pos1 = stripos($txt, "k") ;

echo $txt;
if ($pos1== "0")  {
$query = mysql_query("SELECT * FROM contacts WHERE first=$txt";

echo "<b>first</br>";
}
echo mysql_error();
if ($pos1 === false)  {
$query = mysql_query("SELECT * FROM contacts WHERE phone='$txt' or last LIKE '%$txt%'";

echo "<b>second</br>";

}
echo "<b>$pos1</br>";
$result=mysql_query($query);
echo mysql_error();
$num=mysql_numrows($result);

mysql_close();
echo "<b><center>Database Output</center></b><br><br>";

$i=0;
while ($i < $num) {

$first=mysql_result($result,$i,"first");
$last=mysql_result($result,$i,"last");
$phone=mysql_result($result,$i,"phone");
$mobile=mysql_result($result,$i,"mobile");
$fax=mysql_result($result,$i,"fax");
$email=mysql_result($result,$i,"email");
$web=mysql_result($result,$i,"web");

echo "<b>$first $last</b><br>Phone: $phone<br>Mobile: $mobile<br>Fax: $fax<br>E-mail: $email<br>Web: $web<br><hr><br>";
$i++;

}

Re: Parse error: syntax error, unexpected ';'

Posté : 26 mars 2012, 23:52
par albat
On va déjà commencer par fermer la parenthèse qui manque... ;)
$query = mysql_query("SELECT * FROM contacts WHERE first=$txt";

Re: Parse error: syntax error, unexpected ';'

Posté : 26 mars 2012, 23:55
par albat
T'es décidément fâché avec les parenthèses fermantes. :lol:
$query = mysql_query("SELECT * FROM contacts WHERE phone='$txt' or last LIKE '%$txt%'";
Simultanément, je te conseillerai d'extraire correctement les variables des chaines de caractères.
$query = mysql_query("SELECT * FROM contacts WHERE phone='".$txt."' or last LIKE '%".$txt."%'");
Et puis, le SELECT *, c'est mal. :P

Re: Parse error: syntax error, unexpected ';'

Posté : 26 mars 2012, 23:59
par albat
Un truc amusant :
mysql_close();
// ...
$first=mysql_result($result,$i,"first");
$last=mysql_result($result,$i,"last");
$phone=mysql_result($result,$i,"phone");
Tu fermes la connexion à la base, puis tu utilises une fonction mysql.
Ça marche, ça ? ;)

Et une dernière réécriture d'extraction de variables pour la route ! :lol:
echo "<b>$first $last</b><br>Phone: $phone<br>Mobile: $mobile<br>Fax: $fax<br>E-mail: $email<br>Web: $web<br><hr><br>";                               // Beurk !
echo '<b>'.$first.' '.$last.'</b><br>Phone: '.$phone.'<br>Mobile: '.$mobile.'<br>Fax: '.$fax.'<br>E-mail: '.$email.'<br>Web: '.$web.'<br><hr><br>';   // Bôôôô ! 

Re: Parse error: syntax error, unexpected ';'

Posté : 27 mars 2012, 18:59
par mounlight
Merci albat,j'ai corrigé mes erreurs, je me sens un peu con pour les parenthèses fermantes...
du coup ca donne ca mais j'obtient maintenant:
Parse error: syntax error, unexpected T_STRING in /misc/6/000/268/005/2/user/web/mounbox.bravehost.com/test4.php on line 23
P.S qu'entend tu par "Et puis, le SELECT *, c'est mal. :P" ??
$txt=''. htmlspecialchars($_GET["name"]) .'' ;
@mysql_select_db($database) or die( "Unable to select database");

echo ''. htmlspecialchars($_GET["name"]) .'' ;
$pos1 = stripos($txt, "k") ;

echo $txt;
if ($pos1== "0")  {
$query = mysql_query("SELECT * FROM contacts WHERE first='".$txt."');


}
echo mysql_error();
if ($pos1 === false)  {
$query = mysql_query("SELECT * FROM contacts WHERE phone='".$txt."' or last LIKE '%".$txt."%'");
}

$result=mysql_query($query);
echo mysql_error();
$num=mysql_numrows($result);


echo "<b><center>Database Output</center></b><br><br>";

$i=0;
while ($i < $num) {

$first=mysql_result($result,$i,"first");
$last=mysql_result($result,$i,"last");
$phone=mysql_result($result,$i,"phone");
$mobile=mysql_result($result,$i,"mobile");
$fax=mysql_result($result,$i,"fax");
$email=mysql_result($result,$i,"email");
$web=mysql_result($result,$i,"web");

echo '<b>'.$first.' '.$last.'</b><br>Phone: '.$phone.'<br>Mobile: '.$mobile.'<br>Fax: '.$fax.'<br>E-mail: '.$email.'<br>Web: '.$web.'<br><hr><br>';
$i++;

}
mysql_close();

?>

Re: Parse error: syntax error, unexpected ';'

Posté : 27 mars 2012, 21:14
par albat
Pour limiter le risque d'erreurs et faciliter le débuggage, je recommande toujours de simplifier le code.:idea:

La méthode que tu utilises pour récupérer les données de ta base est certes correcte,
mais plus lourd, à part la bouffe du kebab en bas de chez moi, y a pas ! :sick:
Je te propose donc de remplacer :
$i=0;
while ($i < $num) {
$first=mysql_result($result,$i,"first");
$last=mysql_result($result,$i,"last");
$phone=mysql_result($result,$i,"phone");
$mobile=mysql_result($result,$i,"mobile");
$fax=mysql_result($result,$i,"fax");
$email=mysql_result($result,$i,"email");
$web=mysql_result($result,$i,"web");
echo '<b>'.$first.' '.$last.'</b><br>Phone: '.$phone.'<br>Mobile: '.$mobile.'<br>Fax: '.$fax.'<br>E-mail: '.$email.'<br>Web: '.$web.'<br><hr><br>';
$i++;
}
par :
while ($ligne = mysql_fetch_assoc($result))
      { extract($ligne);
        echo '<b>'.$first.' '.$last.'</b><br>Phone: '.$phone.'<br>Mobile: '.$mobile.'<br>Fax: '.$fax.'<br>E-mail: '.$email.'<br>Web: '.$web.'<br><hr><br>';
      }
Moi, je trouve ça drôlement plus simple... ;)

Et pour ce qui est du SELECT *, c'est une écriture qui n'est absolument pas optimisée.
Il est préférable d'indiquer explicitement les champs que tu souhaites sélectionner. :pouce:

Re: Parse error: syntax error, unexpected ';'

Posté : 27 mars 2012, 22:33
par sirakawa
Cette belle syntaxe
while ($ligne = mysql_fetch_assoc($result))
{ 
     extract($ligne);
        echo '<b>'.$first.' '.$last.'</b><br>Phone: '.$phone.'<br>Mobile: '.$mobile.'<br>Fax: '.$fax.'<br>E-mail: '.$email.'<br>Web: '.$web.'<br><hr><br>';
 }
n'aurait-elle pas, malencontreusement l'effet que les valeurs tirées de la BDD soit à chaque fois remplacées, de sorte qu'en finale, on n'aurait que les valeurs du dernier enregistrement. À moins qu'il faille travailler le deuxième paramètre de extract?

Re: Parse error: syntax error, unexpected ';'

Posté : 27 mars 2012, 23:35
par albat
Elle affiche, l'un après l'autre, tous les enregistrements de la table qui ont été sélectionnés par la requête.
Je ne vois pas le souci.

Re: Parse error: syntax error, unexpected ';'

Posté : 28 mars 2012, 07:56
par mounlight
c'est sur ce que c'est plus propre, je l'ai changer...
Mais en attendant ça ne résous pas mon problème :shock:

Re: Parse error: syntax error, unexpected ';'

Posté : 28 mars 2012, 08:35
par albat
Peux-tu me montrer l'intégralité de ton code actuel ?

Re: Parse error: syntax error, unexpected ';'

Posté : 28 mars 2012, 13:31
par mounlight
oui biensur :)
<?php

$txt=''. htmlspecialchars($_GET["name"]) .'' ;
@mysql_select_db($database) or die( "Unable to select database");

echo ''. htmlspecialchars($_GET["name"]) .'' ;
$pos1 = stripos($txt, "k") ;

echo $txt;
if ($pos1== "0")  {
$query = mysql_query("SELECT * FROM contacts WHERE first='".$txt."');


}
echo mysql_error();
if ($pos1 === false)  {
$query = mysql_query("SELECT * FROM contacts WHERE phone='".$txt."' or last LIKE '%".$txt."%'");
}

$result=mysql_query($query);
echo mysql_error();
$num=mysql_numrows($result);


echo "<b><center>Database Output</center></b><br><br>";

while ($ligne = mysql_fetch_assoc($result))
{
     extract($ligne);
        echo '<b>'.$first.' '.$last.'</b><br>Phone: '.$phone.'<br>Mobile: '.$mobile.'<br>Fax: '.$fax.'<br>E-mail: '.$email.'<br>Web: '.$web.'<br><hr><br>';
 }
mysql_close();

?>

Re: Parse error: syntax error, unexpected ';'

Posté : 28 mars 2012, 15:12
par albat
Après les parenthèses, ce sont les guillemets qui te posent problème ! :lol:
<?php
mysql_select_db($database) or die('Unable to select database');

$txt = htmlspecialchars($_GET['name']);
echo $txt;
$pos1 = stripos($txt,'k');

if($pos1==0)
  { $query = mysql_query("SELECT * FROM contacts WHERE first='".$txt."'"); // T'avais oublié un guillemet fermant, là
  }
if($pos1===false)
  { $query = mysql_query("SELECT * FROM contacts WHERE phone='".$txt."' or last LIKE '%".$txt."%'");
  }

$result = mysql_query($query) or die(mysql_error()); // Plus astucieux comme ça

echo "<b><center>Database Output</center></b><br><br>";

while ($ligne = mysql_fetch_assoc($result))
      { extract($ligne);
        echo '<b>'.$first.' '.$last.'</b><br>Phone: '.$phone.'<br>Mobile: '.$mobile.
             '<br>Fax: '.$fax.'<br>E-mail: '.$email.'<br>Web: '.$web.'<br><hr><br>';
      }
?>

Re: Parse error: syntax error, unexpected ';'

Posté : 28 mars 2012, 16:46
par sirakawa
Elle affiche, l'un après l'autre, tous les enregistrements de la table qui ont été sélectionnés par la requête.
Je ne vois pas le souci.
Et si par hasard on a besoin de faire un traitement de ces données autre que de les afficher par un echo, ou simplement de les stocker en local, comment fait-on?

Re: Parse error: syntax error, unexpected ';'

Posté : 28 mars 2012, 17:00
par albat
Ben, tu crées un tableau et tu le remplis. En PHP ou en JS.

Mais ce n'est pas la question posée ici... ;)

Re: Parse error: syntax error, unexpected ';'

Posté : 28 mars 2012, 19:57
par mounlight
Bon ben au moins je change d'erreur maintenant j'ai :
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 'Resource id #3' at line 1

J'ai chercher et il semblerais que cette erreur soit prooquer quand on utilise mal INSERT, or je ne l'utilise pas.. puis-je avoir une indication sur ou se trouve mon erreur ?

Merci encore,