Erreur SQL

Eléphanteau du PHP | 12 Messages

07 déc. 2012, 14:03

Bonjour à tous,
lorsque j'essaye d'executer une requete php j'obtien une erreur : "Erreur SQL2 !"

Pourtant je ne pense pas que ma requete soit fausse mais je suis perdu.
$reqmail = "SELECT * FROM personnel WHERE identifiant = '" . $id_pers . "'";
      $req = mysql_query($reqmail,$db) or die('Erreur SQL2 !<br>'.$reqmail.'<br>'.mysql_error()); 

Merci

ViPHP
xTG
ViPHP | 7331 Messages

07 déc. 2012, 14:20

Elle peut être fausse suivant ce que tu mets dans $id_pers.
Joli micmac en tout cas... Le message d'erreur ne fait pas apparaître la requête...
Tu nous a bien donné le code tel quel ? Et non pas un raccourci fortuit ? ^^

Et quant à ta ta variable il faut toujours échapper une variable passée à une requête :
$reqmail = "SELECT * FROM personnel WHERE identifiant = '" . mysql_real_escape_string($id_pers) . "'";

Eléphanteau du PHP | 12 Messages

07 déc. 2012, 14:29

Le code d'erreur exacte est : Erreur SQL2 !
SELECT * FROM personnel WHERE identifiant = '36'

Biensur l'identifiant change en fonction de la personne.

ViPHP
xTG
ViPHP | 7331 Messages

07 déc. 2012, 14:45

A mon avis tu nous as encore oublié une ligne. ^^

identifiant est de quel type ? C'est un VARCHAR ou un INT ?
Si c'est un int il ne faut pas de quote.

Eléphanteau du PHP | 12 Messages

07 déc. 2012, 14:53

Dans la page précédente j'affiche un tableau et lorsque je clique sur un nom je veux afficher les informations spécifiques à la personne contenues dans la base de données.


Page précédente :
 $sql = "SELECT identifiant ,nom,prenom,civilite,fonction,unite,unite2,batiment,batiment2,pole,pole2 FROM personnel ORDER BY nom" ;
 

 

// on envoie la requête 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());


$num_rows = mysql_num_rows($req);
if ($num_rows != 0 ){
echo "<table border='1'>
<thead>
<th>Nom</th>
<th>Prénom</th>
<th>civilite</th>
<th>Fonction</th>
<th>Unité</th>
<th>Unité</th>
<th>Batiment</th>
<th>Batiment</th>
<th>Pôle</th>
<th>Pôle</th>
</thead>";

while($row = mysql_fetch_array($req)) {
echo "<tr>";
echo '<td><a id ="lien_nom" href="personnel.php?username='.$row['identifiant'].'">'. $row['nom'].'</a></td>'; 
echo "<td>". $row['prenom'] . "</td>";
echo "<td>" . $row['civilite'] . "</td>";
echo "<td width=15%>" . $row['fonction'] . "</td>";
echo "<td>" . $row['unite'] . "</td>";
echo "<td>" . $row['unite2'] . "</td>";
echo "<td>" . $row['batiment'] . "</td>";
echo "<td>" . $row['batiment2'] . "</td>";
echo "<td>" . $row['pole'] . "</td>";
echo "<td>" . $row['pole2'] . "</td>";
echo "</tr>";
}
echo "</table>";}


Page suivante :
$id_pers = $_GET['username'];
$link = mysql_connect('sql.franceserv.fr', 'xxx', 'www');
		mysql_select_db('xxx', $link); 

       // on crée la requête SQL 
       //$sql = 'SELECT identifiant,nom,prenom,civilite,fonction,unite,unite2,batiment,batiment2,pole,pole2 FROM personnel WHERE identifiant=$id_pers' ; 

       // on envoie la requête 
	   $reqmail = "SELECT * FROM personnel WHERE identifiant = '" .$id_pers. "'";
      $req = mysql_query($reqmail,$db) or die('Erreur SQL2 !<br>'.$reqmail.'<br>'.mysql_error()); 

ViPHP
xTG
ViPHP | 7331 Messages

07 déc. 2012, 15:35

Je vois que je vais être obligé de répondre à ta place à mes questions...

Après étude de ton code identifiant semble être une chaîne de caractères utilisée pour se connecter, c'est donc un VARCHAR dans la base de données.
Dans ce cas s'il contient des caractères spéciaux cela peut provoquer une erreur dans la requête SQL.
Pour régler cela il faut utiliser la fonction d'échappement que je t'ai montré plus haut.

De plus avant d'utiliser une variable globale il faut toujours tester son existence !
if( isSet($_GET['username']) ){
  // traitement
}else{
  // oups il nous manque quelque chose là...
}

Eléphanteau du PHP | 12 Messages

07 déc. 2012, 15:43

Désolé de ne pas t'avoir indiqué la nature d'identifiant mais il bien d'un int.

Eléphanteau du PHP | 12 Messages

07 déc. 2012, 15:50

En réseau local ça fonctionne bien mais en mettant le tout sur franceserv ça disfonctionne.

ViPHP
xTG
ViPHP | 7331 Messages

07 déc. 2012, 16:18

Si c'est un int pas de quote alors.
$reqmail = "SELECT * FROM personnel WHERE identifiant = " . mysql_real_escape_string($id_pers);
Mais sans avoir le retour de mysql_error() je ne crains de pouvoir t'aider plus, l'erreur peut être tout autre... (erreur de connexion à la bdd, table inexistante, ect)

Mammouth du PHP | 2278 Messages

07 déc. 2012, 17:10

Bonjour à tous,
lorsque j'essaye d'executer une requete php j'obtien une erreur : "Erreur SQL2 !"

Pourtant je ne pense pas que ma requete soit fausse mais je suis perdu.
$reqmail = "SELECT * FROM personnel WHERE identifiant = '" . $id_pers . "'";
      $req = mysql_query($reqmail,$db) or die('Erreur SQL2 !<br>'.$reqmail.'<br>'.mysql_error()); 

Merci
Le premier réflexe est d'ajouter:
print <br>$reqmail<br>";
de copier le résultat et de le coller dans phpadmi n ou semblable.
le second réflexe est:
$reqmail = "SELECT * FROM personnel WHERE identifiant = $id_pers";
ou
$reqmail = "SELECT * FROM personnel WHERE identifiant = '$id_pers'";
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD