Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in C:\wamp\www

sara
Invité n'ayant pas de compte PHPfrance

08 mai 2008, 11:11

Bonjour à toutes et à tous,

Voillà j'ai une erreur dans mon code (Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in C:\wamp\www\test4\form.php on line 27) mais je n'arrive pas à la trouver.
Je voudrais juste selectionner les données de ma table entre deux intervalles ,es que quelqu'un aurai une idée :lol:
Voici mon code:j'ai 3 variables mag, lon et lat.
Je travaille avec Mysql
et le chemin de table est le suivant:

Code : Tout sélectionner

create table seisme(int mag,int lat,int lon);
//connexion à la base
$db = mysql_connect('xxx','xxx','') or die ('erreur de connexion');
//sélection de la base
mysql_select_db("xxx");
	
	if (isset($_POST['envoyer']) && $_POST['envoyer'] == 'Envoyer') {  
     
     
    //si l'utilisateur ne remplit pas les variables du formulaire, on va leur attribuer des valeurs pas defaut pour la recherche  
    if ($_POST['mag min']==NULL) {  
    $_POST['mag min']='0'; }  
    if ($_POST['mag max']==NULL) {
      $_POST['mag max']=='999999999999999'; }
      
   if ($_POST['lat min']==NULL) {
      $_POST['lat min']=='0'; }
   if ($_POST['lat max']==NULL) {
      $_POST['lat max']=='999999999999999'; }
      
   if ($_POST['lon min']==NULL){
      $_POST['lon min']=='1'; }
   if ($_POST['lon max']==NULL) {
      $_POST['lon max']=='999999999999999'; };
         
      mysql_query(" SELECT *  FROM  seisme  WHERE  mag BETWEEN "'.$_POST['mag min'].'" AND "'.$_POST['mag max'].'"  AND  lat BETWEEN "'.$_POST['lat min'].'" AND "'.$_POST['lat max'].'"  AND lon BETWEEN "'.$_POST['lon min'].'"  AND "'.$_POST['lon max'] .'"");
   mysql_close();
?> 

[/code]

Mammouth du PHP | 19672 Messages

08 mai 2008, 11:29

Dans ta concaténation de variables avec la requête SQL, tu as inversé apostrophes et guillemets, regarde ça de plus près.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

08 mai 2008, 11:34

Quelle est ta ligne 27 ? je pense que c'est le mysql_query().

Et, effectivement, dans ta requête, je vois une inversion de " et de '. Pour le corriger, suis la méthode suivante : écrit ta requête avec des valeurs de test, en dur, en mettant les ' nécessaires, puis remplace les valeurs de tests par les variables en mettant les " au bon endroits.

Sinon, plusieurs remarques :
  • que se passe-t-il si je te transmet une variable textuelle contenant un apostrophe dans $_POST['lat max'] ? pense à utiliser mysql_escape_string()
  • il vaut mettre ta requête dans une variable et donner cette variable à mysql_query(). Cela te permet d'afficher la requête générée (où les variables sont remplacées par les valeurs qu'elles contiennent)
  • pour éviter des soucis comme ton problème actuel, préfère utiliser sprintf() qu'une concaténation de variables
Je te laisse suivre les liens des fonctions si tu désires en savoir plus
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

sara
Invité n'ayant pas de compte PHPfrance

08 mai 2008, 14:31

Merci de me répondre
Seulement voilà je suis débutante en php et je ne sais pas ce qu'il faut changer au niveau de la requette, j'ai inversé les ' et " ,
mysql_query(" SELECT *  FROM  seisme  WHERE  
	  mag BETWEEN '".$_POST['mag min']."' AND '".$_POST['mag max']."'  AND  
	  lat BETWEEN '".$_POST['lat min']."' AND '".$_POST['lat max']."'  AND 
lon BETWEEN '".$_POST['lon min'].'"  AND "'.$_POST['lon max'] .'"");
   mysql_close();
?> 
mais j'ai un autre message d'erreur cette fois ci:Parse error: syntax error, unexpected $end in C:\wamp\www\test4\form.php on line 34 .La ligne 34 correspond à la fin du code (il nya rien dans cette ligne)

Mammouth du PHP | 19672 Messages

08 mai 2008, 15:33

Parce que tu en as oublié et que tu n'as pas suivi le conseil de Zeus.

Regarde ceci, ton code juste remise en forme, mais sans modification à part le fait que je sors la requête de la commande d'exécution :
<?php
$sql = "SELECT * ".
       "FROM  seisme ".
       "WHERE mag BETWEEN '".$_POST['mag min']."' AND '".$_POST['mag max']."' ".
       "  AND lat BETWEEN '".$_POST['lat min']."' AND '".$_POST['lat max']."' ".
       "  AND lon BETWEEN '".$_POST['lon min'].'"  AND "'.$_POST['lon max'] .'"";
mysql_query($sql);
   mysql_close();
?>
Maintenant le même corrigé :
<?php
$sql = "SELECT * ".
       "FROM  seisme ".
       "WHERE (mag BETWEEN '". $_POST['mag min'] ."' AND '". $_POST['mag max'] ."') ".
       "  AND (lat BETWEEN '". $_POST['lat min'] ."' AND '". $_POST['lat max'] ."') ".
       "  AND (lon BETWEEN '". $_POST['lon min'] ."' AND '". $_POST['lon max'] ."')";
mysql_query($sql);
   mysql_close();
?>
Première chose, en définissant ta requête avant, ça te permet de faire un echo() de cette requête avant exécution pour en vérifier la validité. Ensuite, utilise une mise en forme pour un meilleur confort de lecture, ça facilite beaucoup le débogage.

Normalement il ne te reste plus maintenant qu'à ajouter un [Résolu] ici.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

sara
Invité n'ayant pas de compte PHPfrance

08 mai 2008, 20:52

Merci de ton aide ,j'ai remplacé ma requette par la tienne,mais j'ai toujours la me^me erreur Parse error: syntax error, unexpected $end in C:\wamp\www\test4\form.php on line 36 , à la ligne 36 il n 'ya pas de code :roll: ????

Mammouth du PHP | 19672 Messages

08 mai 2008, 20:58

fais voir ton code, on ne devinera pas. Ça sent le ";" oublié en fin de ligne ce truc... :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

08 mai 2008, 21:02

Code : Tout sélectionner

<?php //connexion à la base $db = mysql_connect('xxx',xxx','') or die ('erreur de connexion'); //sélection de la base mysql_select_db("xxx"); if (isset($_POST['envoyer']) && $_POST['envoyer'] == 'Envoyer') { //si l'utilisateur ne remplit pas les variables du formulaire, on va leur attribuer des valeurs pas defaut pour la recherche if ($_POST['mag min']==NULL) { $_POST['mag min']='0'; } if ($_POST['mag max']==NULL) { $_POST['mag max']=='999999999999999'; } if ($_POST['lat min']==NULL) { $_POST['lat min']=='0'; } if ($_POST['lat max']==NULL) { $_POST['lat max']=='999999999999999'; } if ($_POST['lon min']==NULL){ $_POST['lon min']=='1'; } if ($_POST['lon max']==NULL) { $_POST['lon max']=='999999999999999'; }; $sql = "SELECT * ". "FROM seisme ". "WHERE (mag BETWEEN '". $_POST['mag min'] ."' AND '". $_POST['mag max'] ."') ". " AND (lat BETWEEN '". $_POST['lat min'] ."' AND '". $_POST['lat max'] ."') ". " AND (lon BETWEEN '". $_POST['lon min'] ."' AND '". $_POST['lon max'] ."')"; mysql_query($sql); mysql_close(); ?>

Eléphant du PHP | 174 Messages

08 mai 2008, 21:06

Bonsoir.

Ton principal "if" semble ne pas avoir de fin.

Une parenthèse globale pour tous ceux qui code sur PC windows, si vous débutez je vous conseille PSPad qui est gratuit est permet de repérer les () ou les {} par couple (utile en cas de manque).

Bonne programmation à tout le monde ^^
"Il vaut mieux avoir du luxe dans ses sentiments que sur ses habits, je ne crains, moi, le mépris de personne" Honoré De Balzac.
"On s'étonne trop de ce que l'on voit rarement et trop peu de ce que l'on voit chaque jour" Mme de Genlis
"L'absence diminue les médiocres passions et augmente les grandes comme le vent éteint les bougies et allume le feu" La RocheFoucauld
"People have hope because they can't see Death standing behind them" (anonymous)
"Of all the things I've lost, I miss my brain the most" (from a fanfic)

Mammouth du PHP | 19672 Messages

08 mai 2008, 21:13

Il y a aussi Notepad++ avec une coloration syntaxique et qui permet de voir ce genre d'erreur.

Mais également prendre quelques bonnes habitudes lors de l'écriture de code en utilisant une indentation et un système de retours de ligne rendant le code très facilement lisible, comme ceci par exemple :
<?php
//connexion à la base
$db = mysql_connect('xxx','xxx','') or die ('erreur de connexion');
//sélection de la base
mysql_select_db("xxx");

if (isset($_POST['envoyer']) && $_POST['envoyer'] == 'Envoyer')
{
    //si l'utilisateur ne remplit pas les variables du formulaire, on va leur attribuer des valeurs pas defaut pour la recherche
    if ($_POST['mag min']==NULL)
    {
        $_POST['mag min']='0';
    }
    if ($_POST['mag max']==NULL)
    {
        $_POST['mag max']=='999999999999999';
    }
    if ($_POST['lat min']==NULL)
    {
        $_POST['lat min']=='0';
    }
    if ($_POST['lat max']==NULL)
    {
        $_POST['lat max']=='999999999999999';
    }
    if ($_POST['lon min']==NULL)
    {
        $_POST['lon min']=='1';
    }
    if ($_POST['lon max']==NULL)
    {
        $_POST['lon max']=='999999999999999';
    }
    $sql = "SELECT * ".
           "FROM  seisme ".
           "WHERE (mag BETWEEN '". $_POST['mag min'] ."' AND '". $_POST['mag max'] ."') ".
           "  AND (lat BETWEEN '". $_POST['lat min'] ."' AND '". $_POST['lat max'] ."') ".
           "  AND (lon BETWEEN '". $_POST['lon min'] ."' AND '". $_POST['lon max'] ."')";
    mysql_query($sql);
    mysql_close();
// <<========== Il faudrait fermer le premier if() ici
?> 
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

sara
Invité n'ayant pas de compte PHPfrance

08 mai 2008, 21:21

Bonsoir,

Merci, effectivement j'ai oublié une accolade ,seulement voilà m^eme en mettant l'accolade et en ajoutant un echo ,j'ai une page blanche qui s'affiche sans résultats :?:

sara
Invité n'ayant pas de compte PHPfrance

08 mai 2008, 21:22

oups j'ai oublié le code:

Code : Tout sélectionner

<?php //connexion à la base $db = mysql_connect('localhost','root','') or die ('erreur de connexion'); //sélection de la base mysql_select_db("test4"); if (isset($_POST['envoyer']) && $_POST['envoyer'] == 'Envoyer') { //si l'utilisateur ne remplit pas les variables du formulaire, on va leur attribuer des valeurs pas defaut pour la recherche if ($_POST['mag min']==NULL) { $_POST['mag min']='0'; } if ($_POST['mag max']==NULL) { $_POST['mag max']=='999999999999999'; } if ($_POST['lat min']==NULL) { $_POST['lat min']=='0'; } if ($_POST['lat max']==NULL) { $_POST['lat max']=='999999999999999'; } if ($_POST['lon min']==NULL){ $_POST['lon min']=='1'; } if ($_POST['lon max']==NULL) { $_POST['lon max']=='999999999999999'; }; $sql = "SELECT * ". "FROM seisme ". "WHERE (mag BETWEEN '". $_POST['mag min'] ."' AND '". $_POST['mag max'] ."') ". " AND (lat BETWEEN '". $_POST['lat min'] ."' AND '". $_POST['lat max'] ."') ". " AND (lon BETWEEN '". $_POST['lon min'] ."' AND '". $_POST['lon max'] ."')"; mysql_query($sql); } echo $donnees['id']; echo $donnees['mag']; echo $donnees['lat']; echo $donnees['lon']; mysql_close(); ?>

Eléphant du PHP | 174 Messages

08 mai 2008, 21:24

Dans ce cas je vais introduire la notion des tests unitaires (le terme est plutôt réservé à la programmation orientée objet je vais appeler ça test logique).

A la suite de ton if, met un else avec un print("condition non respectée"), bizarrement je pense que tu auras un résultat...

[EDIT] : réindente ton code comme on te l'a si bien conseillé.
"Il vaut mieux avoir du luxe dans ses sentiments que sur ses habits, je ne crains, moi, le mépris de personne" Honoré De Balzac.
"On s'étonne trop de ce que l'on voit rarement et trop peu de ce que l'on voit chaque jour" Mme de Genlis
"L'absence diminue les médiocres passions et augmente les grandes comme le vent éteint les bougies et allume le feu" La RocheFoucauld
"People have hope because they can't see Death standing behind them" (anonymous)
"Of all the things I've lost, I miss my brain the most" (from a fanfic)

sara
Invité n'ayant pas de compte PHPfrance

08 mai 2008, 21:33

Cette fois ci ça affiche juste condition non respectée, je ne comprend plus rien ya il une erreur dans mon if? :cry:

Eléphant du PHP | 174 Messages

08 mai 2008, 21:49

Le problème vient de ton $_POST['envoyer'].

Je pense que par là tu voulais tester si ton formulaire a bien été soumis.

Dans la mesure où tu testes les valeurs entrées par l'utilisateur, demande-toi si ton premier test est utile.

Je te conseille de tester l'existence des différents champs de ton formulaire et d'agir en conséquence :
//si tous les champs existent
if(isset($_POST['mag min']) && isset($_POST['mag max']) &&...) {
  //on renomme les variables pour éviter tout problème
  $magMin = $_POST['mag min'];
  ...

  //on attribue des valeurs par défaut si le champs est vide
  if($magMin == "") {
    $magMin = 0;
  }
  ...

  //suite du traitement que tu faisais

}
//sinon si le formulaire n'a pas été envoyé
else {
  //traitement du cas où l'on arrive sur la page sans avoir validé de formulaire
}
tu auras un meilleur résultat
"Il vaut mieux avoir du luxe dans ses sentiments que sur ses habits, je ne crains, moi, le mépris de personne" Honoré De Balzac.
"On s'étonne trop de ce que l'on voit rarement et trop peu de ce que l'on voit chaque jour" Mme de Genlis
"L'absence diminue les médiocres passions et augmente les grandes comme le vent éteint les bougies et allume le feu" La RocheFoucauld
"People have hope because they can't see Death standing behind them" (anonymous)
"Of all the things I've lost, I miss my brain the most" (from a fanfic)