Erreur syntaxe SQL/PHP avec Drupal...

Catégories:

Bonsoir à tous, je suis en train de coder un bout de programme mais je bloque sur une requête sql dans mon code php. J’ai une erreur de type «Parse error : syntax error, unexpected T_VARIABLE» sur la ligne où j’initialises le $req :

$type = $_POST[‘type’] ;
$nom = $_POST[‘nom’] ;
$desc = $_POST[‘description’] ;
$pers=$user->name ;
$req=»INSERT INTO objet(type, nom, description, users_name VALUES(‘$type’,’$nom’,’$desc’,’$pers’)» ;

$result = db_query(‘$req’) ;

J’ai beau tourner le problème dans tout les sens je ne vois pas comment le régler.

Si quelqu’un peut m’aider ça serait vraiment super.

Merci d’avance !

#

Je ne vois pas d’erreur à part la parenthèse sur la query qui n’est pas fermé cependant il vaudrai mieux utilisé les conventions drupal pour les query c’est-à-dire :

<?php
$type
= $_POST['type'];
$nom  = $_POST['nom'];
$desc = $_POST['description'];
$pers = $user->name;
$result = db_query("NSERT INTO objet (type, nom, description, users_name) VALUES ('%s', '%s', '%s', '%s')", $type, $nom, $desc, $pers);
?>

#

Merci pour ta réponse !

J’ai effectué la modification dans ma page.

Mais toujours une erreur de type : Parse error : syntax error, unexpected T_VARIABLE in /mnt/162/sdb/7/7/info2projet/includes/common.inc(1685) : eval()’d code on line 22

J’ai modifié avec l’aide que tu m’as apporté sur le post précédent mais l’erreur est toujours là.

J’avoue ne pas comprend d’où ça vient vu que le reste du code semble fonctionner…

#

Le problème ne ce situe pas sur le code que vous nous avez donné, tous les semicolon sont présent. Vous pouvez mettre votre code en entier ?

#

Voici le code de la page en question :

<?php
       $type
= $_POST['type'];
     
$nom = $_POST['nom'];
       
$desc = $_POST['description'];
      
$pers=$user->name;
     
       if(
$type=='' || $nom=='' || $desc==''){
          echo
'Vous n\'avez pas saisis tout les paramêtres du nouvel objet';
         echo
"<br>";
           echo
'Merci de refaire votre demande d\'ajout';
        
sleep(1);
         
header('Location: http://info2projet.free.fr/?q=node/9');
            exit();
        }else{
         include_once(
'./includes/bootstrap.inc');
           
drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE)
           
#$db = mysql_connect('sql.free.fr', 'info2projet', 'frostie');
          #mysql_select_db('info2projet',$db);
         #$sql = "INSERT INTO objet SET type='$type',nom='$nom',description='$desc'";
           #$req= mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
         #$req="INSERT INTO objet(type, nom, description, users_name) VALUES('$type','$nom','$desc','$pers')";
           
$result = db_query("INSERT INTO objet (type, nom, description, users_name) VALUES ('%s', '%s', '%s', '%s')", $type, $nom, $desc, $pers); #or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
         
mysql_close();
         echo
'L\'objet a été ajouté avec succés à votre stock';
        
sleep(1);
         
header('Location: http://info2projet.free.fr/?q=node/9');
            exit();
?>

L’objectif est de recevoir les informations d’un formulaire d’ajout d’un objet et d’effectuer la requête sur la base avec INSERT INTO.

Merci d’avance pour votre aide.

#

Les commentaires sur la page ne sont pas important.

J’ai modifié la connexion à la BDD suite à la lecture du livre Pro Drupal Development.

Je précise aussi que les identifiants et mot de passe présent sur le code PHP ne sont pas les vrais identifiant et mot de passe pour accéder à la base.

#

Le code plus propre :

<?php
       $type
= $_POST['type'];
     
$nom = $_POST['nom'];
       
$desc = $_POST['description'];
      
$pers=$user->name;
     
       if(
$type=='' || $nom=='' || $desc==''){
          echo
'Vous n\'avez pas saisis tout les paramêtres du nouvel objet';
         echo
"<br>";
           echo
'Merci de refaire votre demande d\'ajout';
        
sleep(1);
         
header('Location: http://info2projet.free.fr/?q=node/9');
            exit();
        }else{
         include_once(
'./includes/bootstrap.inc');
           
drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE);           
          
db_query("INSERT INTO objet (type, nom, description, users_name) VALUES ('%s', '%s', '%s', '%s')", $type, $nom, $desc, $pers); #or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
           
mysql_close();
         echo
'L\'objet a été ajouté avec succés à votre stock';
        
sleep(1);
         
header('Location: http://info2projet.free.fr/?q=node/9');
            exit();
?>

#

Votre if else n’est pas terminer il vous faut fermer le else. Sinon si vous avez crée un formulaire pour être utilisé par drupal pourquoi ne pas utiliser l’api de drupal pour créer et soumettre votre formulaire. Vous pouvez très bien utiliser le hook_form() pour crée votre formulaire.

#

<?php
       $type
= $_POST['type'];
     
$nom = $_POST['nom'];
       
$desc = $_POST['description'];
      
$pers=$user->name;
     
       if(
$type=='' || $nom=='' || $desc==''){
          echo
'Vous n\'avez pas saisis tout les paramêtres du nouvel objet';
         echo
"<br>";
           echo
'Merci de refaire votre demande d\'ajout';
        
sleep(1);
         
header('Location: http://info2projet.free.fr/?q=node/9');
            exit();
        }else{
         include_once(
'./includes/bootstrap.inc');
           
drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE)
           
db_query("INSERT INTO objet (type, nom, description, users_name) VALUES ('%s', '%s', '%s', '%s')", $type, $nom, $desc, $pers);
          
mysql_close();
         echo
'L\'objet a été ajouté avec succés à votre stock';
        
sleep(1);
         
header('Location: http://info2projet.free.fr/?q=node/9');
            exit();
       }
?>

J’ai corrigé l’erreur mais même problème.

Je vous explique :

J’ai une page contenant du code PHP/HTML dans laquelle j’ai un tableau contenant les résultats d’une requête et ensuite j’ai un formulaire pour ajouter un objet à ce même tableau.

L’utilisateur entre les paramêtres de l’objet qu’il veut ajouter et clique sur le bouton ajouter du formulaire d’ajout.

En cliquant sur ce bouton, j’effectue un lien vers une autre page contenant le script php qui pose problème (le code ci-dessus). Et ce même script doit donc afficher sur une page que l’ajout a bien été effectué et renvoyer l’utilisateur sur la page initial contenant le tableau et le formulaire.

J’espère avoir était assez clair dans mes explications.

Je comprend vraiment pas pourquoi cela ne fonctionne pas…

Merci de votre aide en tout cas

#

Bon nouveau code, cette fois je n’ai plus d’erreur de syntaxe :

<?php
       $type
= $_POST['type'];
     
$nom = $_POST['nom'];
       
$desc = $_POST['description'];
      
$pers=$user->name;
     
       if(
$type=='' || $nom=='' || $desc==''){
          echo
'Vous n\'avez pas saisis tout les paramêtres du nouvel objet';
         echo
"<br>";
           echo
'Merci de refaire votre demande d\'ajout';
        
sleep(3);
         
header('Location: http://info2projet.free.fr/?q=node/9');
            exit();
        }else{
        
db_query("INSERT INTO {objet} type, nom, description, users_name VALUES('%s', '%s', '%s', '%s')", $type, $nom, $desc, $pers);
            echo
'Objet ajouté avec succés à votre stock';
          
sleep(3);
         
header('Location: http://info2projet.free.fr/?q=node/9');
            exit();            
       }      
?>

Par contre quand je remplis mon formulaire et que j’envoie les données au script drupal m’affiche ceci :

user warning : 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 ‘type, nom, description, users_name VALUES(‘Livre’, ‘sdqd’, ‘sdqsd’, ‘Drupal’)’ at line 1 query : INSERT INTO objet type, nom, description, users_name VALUES(‘Livre’, ‘sdqd’, ‘sdqsd’, ‘Drupal’) in /mnt/162/sdb/7/7/info2projet/includes/common.inc(1685) : eval()’d code on line 20.

#

vous avez oubliée les parenthèses autour de (type, nom, description, users_name)

#

Effectivement, je viens de voir l’erreur il y a quelques minutes.

Donc le code marche.

Seul hic, le echo et le sleep qui suivent la requête SQL ne fonctionnent pas.

En effet, quand je lance le script php depuis le formulaire, l’objet est bien ajouté à la base mais je ne vois pas le echo qui confirme que l’ajout a bien été réalisé et surtout le sleep qui permet d’avoir le temps de regarder le echo.

On dirait que le script fait la requête puis passe directement au header.

Une idée pour corriger ce problème ?

Merci

#

Vous travailler bien sous Drupal ? Qu’est-ce qui vous empêche de crée un module utilisant hook_form() et l’api de Drupal pour crée votre formulaire et votre page.

#

Par manque de temps tout simplement.

J’ai un projet d’étude à rendre pour dans deux semaines et j’ai encore d’autres pages à terminer.

Si le sleep et le echo ne fonctionne pas ça sera tant pis.

La requête marche c’est le principal.

Merci en tout cas pour tout l’aide que vous m’avez apporté !

Syndiquer le contenu