You have an error in your SQL syntax near '' at line 1

Signaler
Messages postés
17
Date d'inscription
mardi 22 septembre 2009
Statut
Membre
Dernière intervention
18 novembre 2009
-
Messages postés
17
Date d'inscription
mardi 22 septembre 2009
Statut
Membre
Dernière intervention
18 novembre 2009
-
Bonjour a tous,

je suis nouveau et pas programmeur... J'ai un problème sur un site avec le message suivant (You have an error in your SQL syntax near '' at line 1). Mon programmeur est en arrêt maladie pour une durée indéterminée :-((

Ce site est un site gouvernementale et voici l'adresse de la page qui pose un problème : http://www.martinique.pref.gouv.fr/pages/e_rdv/tableau_e_rdv.php
(cela fonctionnait bien et du jour au lendemain...)

Le message est le même sur l'interface d'administration en ligne sur la page GESTION DES JOURS DE RECEPTION
(http://www.martinique.pref.gouv.fr/pages/admin_e_rdv/accueil_admin.php)

J'ai compris qu'il y avait un problème se syntaxe mais voila je n'y comprend rien. Quelqu'un pourrait-il me donner la solution en langage simple pour régler le problème...

En échange je suis graphiste...

Merci à vous d'avance o dieu de la programmation !!!!!

Je reste à votre disposition pour plus d'info sur le problème...

42 réponses

Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
42
Bonjour,

Il faudrait au moins donner les deux premières lignes du code pour essayer de voir quel est l'erreur


Test du chi2
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
Bonjour,

Attention MySQL compte les lignes uniquement sur la requêtes effectuée, pas sur le réel "code" de la page. Dans tous les cas pour que nous puissions t'aider efficacement il te faut poster la requête SQL intégrale. Si tu ne sait pas ou la trouver poste tout, on se débrouillera.

Sinon juste comme ça, c'est un peu une honte pour un site gouvernemental d'en être rendu à ce point là. Rien que l'affichage des message d'erreur sur le serveur de production est vraiment grave, je me demande bien quelles autres de surprises l'on trouverai dans le code.
Messages postés
17
Date d'inscription
mardi 22 septembre 2009
Statut
Membre
Dernière intervention
18 novembre 2009

OK je sais le site est pas super mais il n'y a pas de programmation à part cette rubrique et surtout pas de données sensibles. Que veux tu dire par "Rien que l'affichage des message d'erreur sur le serveur de production est vraiment grave" ??? Voici les deux pages php concernées, elle dates de fevrier 2005...
Pour la partie admin_e_rdv (http://www.martinique.pref.gouv.fr/pages/admin_e_rdv/accueil_admin.php):
<?php require_once('../Connections/pref.php'); ?>
<?php
session_start();
$MM_authorizedUsers = "";
$MM_donotCheckaccess = "true";

// *** Restrict Access To Page: Grant or deny access to this page
function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) {
// For security, start by assuming the visitor is NOT authorized.
$isValid = False;

// When a visitor has logged into this site, the Session variable MM_Username set equal to their username.
// Therefore, we know that a user is NOT logged in if that Session variable is blank.
if (!empty($UserName)) {
// Besides being logged in, you may restrict access to only certain users based on an ID established when they login.
// Parse the strings into arrays.
$arrUsers = Explode(",", $strUsers);
$arrGroups = Explode(",", $strGroups);
if (in_array($UserName, $arrUsers)) {
$isValid = true;
}
// Or, you may restrict access to only certain users based on their username.
if (in_array($UserGroup, $arrGroups)) {
$isValid = true;
}
if (($strUsers == "") && true) {
$isValid = true;
}
}
return $isValid;
}

$MM_restrictGoTo = "index.php";
if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers, $_SESSION['MM_Username'], $_SESSION['MM_UserGroup'])))) {
$MM_qsChar = "?";
$MM_referrer = $_SERVER['PHP_SELF'];
if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&";
if (isset($QUERY_STRING) && strlen($QUERY_STRING) > 0)
$MM_referrer .= "?" . $QUERY_STRING;
$MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . urlencode($MM_referrer);
header("Location: ". $MM_restrictGoTo);
exit;
}
?>
<?php
mysql_select_db($database_pref, $pref);
$query_Recordset1 = "SELECT * FROM jour ORDER BY libelle_jo ASC LIMIT 0,6";
$Recordset1 = mysql_query($query_Recordset1, $pref) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);


mysql_select_db($database_pref, $pref);
$query_Recordset2 = "SELECT * FROM horraire ORDER BY libelle_ho ASC";
$Recordset2 = mysql_query($query_Recordset2, $pref) or die(mysql_error());
$row_Recordset2 = mysql_fetch_assoc($Recordset2);
$totalRows_Recordset2 = mysql_num_rows($Recordset2);


?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Document sans titre</title>
</head>


,
<table width="100%" border="0" cellspacing="0" cellpadding="0">
----, Planning des RDV </td>

----

,

----

[javascript:void(window.close()); Quitter]



[javascript:void(history.go(-1)); Retour en arriere]



</center>


</td>
</tr>
</table>


</td>
</tr>
</table>



</html>
<?php
mysql_free_result($Recordset1);

mysql_free_result($Recordset2);




?>
Messages postés
17
Date d'inscription
mardi 22 septembre 2009
Statut
Membre
Dernière intervention
18 novembre 2009

Au fait je suis aux antilles et ici rien n'est facile...
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
Que veux tu dire par "Rien que l'affichage des message d'erreur sur le serveur de production est vraiment grave"

Ça veux dire que c'est un véritable cadeau pour une personne mal intentionnés qui voudrais attaquer le site en question. Si par exemple elle trouve un moyen d'injecter du SQL alors elle peux se laisser guider par les message d'erreurs afin d'ajuster son tir et certainement dumper toute la base de données.

Au fait je suis aux antilles et ici rien n'est facile...

Je vois ça, ton développeur doit avoir à peu de choses près le même niveau que la plupart des débutants un peu évolués. Rassure moi, c'est bien un stagiaire sans diplôme ?


Bon, pour en revenir à ce véritable bouillon de culture, visiblement il y a un soucis lors de la création de la requête ligne 97 :
$query_Recordset3 "SELECT * FROM planning WHERE code_ho $code_ho and code_jo = $code_jo ";
La requête ligne 89 semble hors de cause car si $debut était erroné (typiquement un nombre négatif grâce au transtypage) une autre requête aurait planté bien avant.
Bref, ici c'est $code_ho et/ou $code_jo qui posent problème. Ces variable étant le résultat de deux requêtes différentes effectuées plus haut on se dit que l'une de ces requête à retourné un résultat non attendu (et pan, on peut remettre en cause la formation de la requête ligne 89). Sur ce point là je ne saurai pas trop t'aider vu que je ne connais ni la structure des tables si le résultat attendu, par contre je te conseille d'ajouter entre les lignes 96 et 97, à titre de debug et donc a ne pas laisser, les lignes suivantes qui vont afficher l'état de divers variables intéressantes :

var_dump($row_Recordset4);
var_dump($row_Recordset2);

Si tu pouvais indiquer ici ce qui s'affiche on pourrais avancer un peu plus loin.
Messages postés
17
Date d'inscription
mardi 22 septembre 2009
Statut
Membre
Dernière intervention
18 novembre 2009

je comprends pas grand chose à ce que tu me raconte mais j'ai ajouté les deux lignesvar_dump($row_Recordset4);
var_dump($row_Recordset2); entre les lignes 96 et 97 et voila le message d'erreur bool(false) array(2) { ["code_ho"]=> string(2) "12" ["libelle_ho"]=> string(8) "08:00:00" } You have an error in your SQL syntax near '' at line 1. Srait-il possible que je te téléphone ???
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
42
Bonjour,

J'ai regardé un peu pour la page 'tableau_e_rdv.php'.
Visiblement il n'y a pas d'erreur de codage MYSQL et l'appel d'erreur viendrai de la ligne 98...tout sauf erreur de ma part.
L'ennui avec ce type d'erreur c'est qu'elle ne dit pas grand chose !

Je pense qu'il faudrait plutôt regarder côté bdd, si d'autres personnes peuvent confirmer ou infirmer!!!

H.S : Surprenant le nombre de 'mysql_select_db($database_pref, $pref);' dans le code , il me semble que quand une connection est faite elle le reste jusqu'à à avoir un élément tel que mysql_close(), sinon l'utilisation d'@ aurait pu éviter ces répétitions de connections!



Test du chi2
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
42
Ah déjà sur le coup TychoBrahe ! J'ai pas vu, je suis reste sur la page sans rafraichir et je regardè le code...Au moins on est un "d'accord" sur la ligne


Test du chi2
Messages postés
17
Date d'inscription
mardi 22 septembre 2009
Statut
Membre
Dernière intervention
18 novembre 2009

Pouvez-vous m'aider par téléphone car difficile de donner les accès sur le site...

Helpp me pleaaaase !

En gros je suis dans une grosse .... dont je suis incapable de me sortir seule...
Messages postés
17
Date d'inscription
mardi 22 septembre 2009
Statut
Membre
Dernière intervention
18 novembre 2009

mon mail perso : visionetdom@wanadoo.fr
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
Salut,

@phpAnonyme : oui je susi également choqué par l'appel systématique et inutile à mysql_select_db() :/

@tb972 : non pas d'aide par téléphone, ici c'est bien mieux, si quelqu'un dit une bêtise les autres peuvent le corriger. Bon, grâce aux var_dump() on avance bien. L'état actuel des choses :
C'est bien la requête de la ligne 97 qui est mal formée à cause du résultat d'autres requêtes précédentes. En effet, $row_Recordset4 à pour valeur false, donc le transtypage le transforme en la chaîne vide. Ce cas n'est possible que par ce que le mysql_fetch_assoc de la ligne 91 retourne false, ce qui indique qu'il n'y a aucun résultat retourné par la requête de la ligne 90.

Bref, je te conseille de vérifier le contenu de la table `jour`. Afin de vérifier mes dire tu peux remplacer les précédents var_dump par ceux là :

var_dump($query_Recordset4);
var_dump($row_Recordset4);
var_dump($totalRows_Recordset4);
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
26
Salut,

Oulala, quel boxon !!! Même moi je ferai mieux

J'ai regardé rapidement.
A vu de nez il semble qu'il y ait un pb avec les 2 do imbriqués. L'une des 2 requêtes n'a pas le même nombre d'enregistrements que l'autre ($row_Recordset2 et $row_Recordset4)
Avec le var_dump on peut en déduire qu'il s'agit de $row_Recordset4 qui ne retourne rien.

Pour le savoir :
Ajoute :
echo '
$query_Recordset4=['.$query_Recordset4.']
;
print_r($row_Recordset4);
exit;


juste en dessous de :
<?php
mysql_select_db($database_pref, $pref);
$query_Recordset4 = "SELECT * FROM jour ORDER BY libelle_jo ASC LIMIT $debut,6";
$Recordset4 = mysql_query($query_Recordset4, $pref) or die(mysql_error());


Copie le message renvoyé ici.


Cordialement,

Kohntark -
Messages postés
17
Date d'inscription
mardi 22 septembre 2009
Statut
Membre
Dernière intervention
18 novembre 2009

OK mais je suis vraiment nul... à chacun son truc...
Bon j'ai ajouté
var_dump($query_Recordset4);
var_dump($row_Recordset4);
var_dump($totalRows_Recordset4);
voila le message d'erreur
string(56) "SELECT * FROM jour ORDER BY libelle_jo ASC LIMIT 1798,6" bool(false) int(0) You have an error in your SQL syntax near '' at line 1

La base de données est contituée de huit tables :
horraire
jour
jour2
jour_old
logg
mecontents
planning
sel_jour
Messages postés
17
Date d'inscription
mardi 22 septembre 2009
Statut
Membre
Dernière intervention
18 novembre 2009

Ok c'est fait j'ai ajouté
echo '
$query_Recordset4=['.$query_Recordset4.']
;
print_r($row_Recordset4);
exit;


juste en dessous de :
<?php
mysql_select_db($database_pref, $pref);
$query_Recordset4 = "SELECT * FROM jour ORDER BY libelle_jo ASC LIMIT $debut,6";
$Recordset4 = mysql_query($query_Recordset4, $pref) or die(mysql_error());

voici le message d'erreur
Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in /home21/eq7274/am8263/html/pages/e_rdv/tableau_e_rdv.php on line 97
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
26
Arf, le temps de copier et de regarder le code et j'ai loupé ton message TychoBrahe.
chui lent.

Enfin ça me rassure, on a l'air de dire la même chose.

@tb972 :
pour compléter le message de TychoBrahe :
Ici c'est un forum d'entraide, pas une hotline individuelle. Si tu souhaites un débogage individualisé tourne toi vers l'embauche d'un développeur.
Ici on aide en postant sur le forum, histoire que ça puisse bénéficier à tout le monde.


Cordialement,


Kohntark -
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
42
Oula je m'absente un piti moment que de choses ça bosse ici

Il manque une guillement simple dans l'echo remplace :
echo '
$query_Recordset4=['.$query_Recordset4.']
;

Par :
echo '
$query_Recordset4=['.$query_Recordset4.']
';



Test du chi2
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
26
j'ai oublié un ' dans mon code :
echo '
$query_Recordset4=['.$query_Recordset4.']
'
;



Kohntark -
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
26
@phpAnonyme :
T'es pas obligé de me griller une fois de plus !!!


méchant va !!


Kohntark -
Messages postés
17
Date d'inscription
mardi 22 septembre 2009
Statut
Membre
Dernière intervention
18 novembre 2009

Il manque une guillement simple dans l'echo remplace :
echo '
$query_Recordset4=['.$query_Recordset4.']
;


Par :
echo '
$query_Recordset4=['.$query_Recordset4.']
';

J'ai fais la modif et voici le message d'erreur
$query_Recordset4=[SELECT * FROM jour ORDER BY libelle_jo ASC LIMIT 1798,6]
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
26
Quelle réactivité !!!

Bon, ça se confirme, tu as une erreur quelque part dans tes tables jour ou horraire.
Ce n'est pas facile de t'aider sans connaitre leurs structures.
On peut supposer que la table jour a été crée jusqu'à une certaine date qui est désormais passée ... mais ce n'est qu'une supposition.

Poste donc les dix dernières lignes de cette table, et la structure de la table.
Par la même occasion fait la même chose avec horraire

Cordialement,


Kohntark -