Parse error: syntax error, unexpected ';'

Mammouth du PHP | 2278 Messages

28 mars 2012, 20:23

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... ;)
et on remplit le tableau avec extract?
Même si ce n'est pas la question du moment, il est vraisemblable qu'elle est sous-jacente, car quel serait l'intérêt d'afficher séquentiellement des informations qu'on ne peut pas exploiter?
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, 21:02

Quelle requête est en cause ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

29 mars 2012, 09:48

Pour le debugage je dirais simplement de ne pas mettre la requête dans le mysql_query mais d'utiliser une variable que tu pourra afficher afin de voir pourquoi ta requête est foireuse.
L'erreur de syntaxe en SQL, c'est comme en php ça peu. Venir n'importe quand ;)

@sirakawa : je ne suis pas non plus adepte du extract, que ce passe t il s'il y a un champ qui s'appel result ? (et on a vu plus con ;) ).
Avec pdo y a fetchAll();
Avec l'extension mysql pas trop le choix pour l'equivalent
<?php
while($data = mysql_fetch_assoc($query)){
$allData[] = $data;
}
?>
Après faut voir le dit traitement parce que la plus part du temps le serveur SQL peux le faire ;)

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 8 Messages

29 mars 2012, 19:23

Bon alors j'ai un peu changer de méthode et j'ai maintenant le code suivant:
mysql_select_db($database) or die('Unable to select database');

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

if($pos1==0)
  { $query = sprintf("SELECT * FROM contacts
    WHERE first='$txt'",
    mysql_real_escape_string($first));
  }
if($pos1===false)
  { $query = sprintf("SELECT * FROM contacts
    WHERE phone='$txt' OR last LIKE '%txt%'",
    mysql_real_escape_string($phone),
    mysql_real_escape_string($last));
  }

$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>';
      }
?>
De plus j'ai réussis a déterminer que en fait ce qui me cause probleme c'est :
    WHERE phone='$txt' OR last LIKE '%txt%'",
et plus précisément la partie avec le LIKE. Le problème c'est que j'ai beau cherché, je pense que la syntaxe est bonne...

Vous avez des suggestions ?

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

29 mars 2012, 22:31

De plus j'ai réussis a déterminer que en fait ce qui me cause probleme c'est :
    WHERE phone='$txt' OR last LIKE '%txt%'",
et plus précisément la partie avec le LIKE. Le problème c'est que j'ai beau cherché, je pense que la syntaxe est bonne...
Ben... pour être franc... la syntaxe est mauvaise. :lol:

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

29 mars 2012, 22:43

Allez, je te donne la réponse parce que ce n'est pas le plus facile à la lecture :
$req = "SELECT * FROM contacts WHERE phone='".$txt."' OR last LIKE '%".$txt."%'";
En résumé :
- tu avais oublié d'extraire les variables des chaines de caractères
- tu avais oublié les points, opérateurs de concaténation
- tu avais oublié le $ initial qui identifie une variable, telle $txt (et non txt)

Petit nouveau ! | 8 Messages

30 mars 2012, 01:11

Ok, parfait ca marche :D
Juste petite question pour finir: N'y a-t-il pas un risque d'injection SQL vu que pour le code que tu viens de proposer je n'utilise pas sprintf et mysql_real_escape_string ?

Merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

30 mars 2012, 07:15

Si mais faut bien que tu boss un peu :mrgreen:

Les réponses ne sont pas a prendre au pieds de la lettre, elles sont la pour te guider et te faire comprendre la mécanique du langage.
Donc oui mysql_real_escape_string est à ajouter.

Pour info : sprinte ne protége de rien il format "c'est tout" ;)

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 8 Messages

30 mars 2012, 11:45

J'entend bien, je demandais juste avant que je commence à chercher pour m'éviter une recherche si vous m'expliquiez que c'était inutile... :)

En tout cas merci de votre aide précieuse =D>

Petit nouveau ! | 8 Messages

30 mars 2012, 19:03

Bon j'ai essayer comme un grand et voila ce que j'ai obtenue:
$query = sprintf("SELECT * FROM contacts 
WHERE phone='".$txt."' OR last LIKE '%".$txt."%'"; 
mysql_real_escape_string($phone);
mysql_real_escape_string($last));
J'ai tester et ai trouver que c'est cette partie qui ne va pas:
OR last LIKE '%".$txt."%'"; 
Est ce que vous auriez un un article ou site qui explique 'bien" et ne me pointer pas vers php.net car je ne le trouve pas "bien" justement ou tout du moins sur ce sujet.

Merci d'avance

ViPHP
xTG
ViPHP | 7331 Messages

30 mars 2012, 23:01

Il y a pourtant 5 exemples sur php.net pour cette fonction... Je n'ose imaginer où tu as trouvé cette syntaxe par contre... Tu l'as inventé j'espère ?
Sinon supprimes vite ce site de tes favoris.

Il y a aussi une page concernant les fonctions en PHP qui montre que les arguments ne sont pas séparés par des points virgules. ;)