Parse error: syntax error, unexpected ';'

mounlight6
Invité n'ayant pas de compte PHPfrance

26 mars 2012, 23:28

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++;

}

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

26 mars 2012, 23:52

On va déjà commencer par fermer la parenthèse qui manque... ;)
$query = mysql_query("SELECT * FROM contacts WHERE first=$txt";

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

26 mars 2012, 23:55

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

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

26 mars 2012, 23:59

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ôôôô ! 

Petit nouveau ! | 8 Messages

27 mars 2012, 18:59

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();

?>

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

27 mars 2012, 21:14

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:

Mammouth du PHP | 2278 Messages

27 mars 2012, 22:33

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?
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

27 mars 2012, 23:35

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.

Petit nouveau ! | 8 Messages

28 mars 2012, 07:56

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:

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

28 mars 2012, 08:35

Peux-tu me montrer l'intégralité de ton code actuel ?

Petit nouveau ! | 8 Messages

28 mars 2012, 13:31

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();

?>

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

28 mars 2012, 15:12

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>';
      }
?>

Mammouth du PHP | 2278 Messages

28 mars 2012, 16:46

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?
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

28 mars 2012, 17:00

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... ;)

Petit nouveau ! | 8 Messages

28 mars 2012, 19:57

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,