Page 1 sur 2

marche plus en ligne...

Posté : 29 mars 2010, 23:35
par mooom
je pensais être arrivé a fin..
mais non, :(

voici mon problème une fois sur le serveur, j'ai l'erreur : (en local ça marché)...

Parse error: syntax error, unexpected '{' in

et j'ai beau revoir le code, je ne vois pas ou elle manque, ou où elle est en trop...

voici mon code : (après avoir rempli le formulaire)
<?php
try
{
$bdd = new PDO('mysql:host=xxxx', 'xxx', 'xx');
}
catch (Exception $e)
{
die('Erreur : ' . $e->getMessage());
}
$req = $bdd->prepare('INSERT INTO voiture(pseudo, modele, chevaux, contact, choix) VALUES(:pseudo, :modele, :chevaux, :contact, :choix)');
$req->execute(array(
   'pseudo' => $_POST['pseudo'],
   'modele' => $_POST['modele'],
   'chevaux' => $_POST['chevaux'],
   'contact' => $_POST['contact'],
   'choix' => $_POST['choix'],
   ));
echo 'enregistrement pris en compte.';

?>
Merci,

Re: marche plus en ligne...

Posté : 30 mars 2010, 00:09
par Dr@ke
Et comme ceci?
$pseudo = $_POST['pseudo'];
$modele = $_POST['modele'];
$chevaux = $_POST['chevaux'];
$contact = $_POST['contact'];
$choix = $_POST['choix'];

try {
 $bdd = new PDO('mysql:host=xxxx', 'xxx', 'xx');
 $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 $req = $bdd->prepare('INSERT INTO `voiture`(`pseudo`, `modele`, `chevaux`, `contact`, `choix`) VALUES(?, ?, ?, ?, ?)');
 $req->execute(array($pseudo, $modele, $chevaux, $contact, $choix));

 echo 'enregistrement pris en compte.';
 $bdd = null;
} catch (Exception $e) {
 echo 'Erreur: ' . $e->getMessage();
}
Pas testé mais cela devrait fonctionner :)

Ps:
Faudrait aussi faire un isset() pour chaque variable $_POST avant pour éviter quelles ne soient pas définies...

Re: marche plus en ligne...

Posté : 30 mars 2010, 00:38
par mooom
ça marche pas non plus :(
trj le meme message d'erreur,

Re: marche plus en ligne...

Posté : 30 mars 2010, 00:39
par stealth35
attention tu mélanges 2 types d'exception dans le même try

EDIT : pour eviter de faire des grands try ou les faire a chaque fois, faut utiliser set_exception_handler
(un simple printf dedan ca suffis)

Re: marche plus en ligne...

Posté : 30 mars 2010, 00:46
par Dr@ke
Ok si c marche pas, car ce genre de syntaxe fonctionne parfaitement sur mes sites.
(Celle que j'ai donné)

C'est que l'erreur est autrepart.

Montre ton script en entier stp

Re: marche plus en ligne...

Posté : 30 mars 2010, 00:49
par stealth35
oui ca fonctionne mes c'est pas correct, si tu veux mélanger les Exception et les PDOException faut faire 2 bloc catch
try
{
    //blabla
}
catch(Exception $e)
{
    echo $e->getMessage();
}
catch(PDOException $e)
{
    echo $e->getMessage();
}

Re: marche plus en ligne...

Posté : 30 mars 2010, 00:51
par Dr@ke
Steal si tu as à me parler utilise les MP stp.
Son problème n'est pas celui la
Merci :roll:

Quand j'aurais besoin d'un cours de pdo, je te ferais signe

Re: marche plus en ligne...

Posté : 30 mars 2010, 00:53
par stealth35
Steal si tu as me parler utilise les MP stp.
Son problème n'est pas celui la
Merci :roll:
tu donnes un code qui n'est pas bon faut bien corriger, sinon ils va se retrouver avec encore plus d'erreurs

Re: marche plus en ligne...

Posté : 30 mars 2010, 00:54
par Dr@ke
Je repete , je n'ai aucune erreur a date merci.
Revenons au sujet.

Re: marche plus en ligne...

Posté : 30 mars 2010, 01:03
par mooom
donc la page validation.php
aprés les modification qu'on m'a donné :
<?php

$pseudo = $_POST['pseudo'];
$modele = $_POST['modele'];
$chevaux = $_POST['chevaux'];
$contact = $_POST['contact'];
$choix = $_POST['choix'];

try {
 $bdd = new PDO('mysql:host=xxxx;dbname=xxx', 'xxxx', 'xxx');
 $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 $req = $bdd->prepare("INSERT INTO `voiture`(`pseudo`, `modele`, `chevaux`, `contact`, `choix`)  VALUES(`pseudo`, `modele`, `chevaux`, `contact`, `choix`)");
 $req->execute(array($pseudo, $modele, $chevaux, $contact, $choix));

 echo 'enregistrement pris en compte.';
 $bdd = null;
} 
catch (Exception $e) {
 echo 'Erreur: ' . $e->getMessage();
}
?> 
code erreur : Parse error: syntax error, unexpected '{' in /XXX/XXX

Merci stealth35 , mais c'est ce que j'avais fait, il me semble au début, mais ça marché pas...

Re: marche plus en ligne...

Posté : 30 mars 2010, 01:10
par Dr@ke
Remplace:
VALUES(`pseudo`, `modele`, `chevaux`, `contact`, `choix`)
Par:
VALUES(?, ?, ?, ?, ?)
Il remplace lui même les ?
C'est justement un des buts des requêtes préparées.
Il faut donc mettre des ?

Ensuite mon code était surtout un exemple :wink:
Reprends ton code si tu préfères mais remplace ce que je te dis plus haut.

Re: marche plus en ligne...

Posté : 30 mars 2010, 01:16
par mooom
c'est ce que j'avais compris, mais comme j'avais trjs le meme message d'erreur, j'ai pensé que je devais le spécifier..
du coup,j'ai essayer plussieurs écritures, mais aucune ne marche...
et là, je viens de remettre les ?, mais rien n'y fait...

Re: marche plus en ligne...

Posté : 30 mars 2010, 03:54
par Dr@ke
J'ai testé un code basé sur l'exemple que je t'avais donné et cela fonctionne parfaitement.

tu as peut-être une erreur de syntaxe ici:
(à la place des xxx)
 $bdd = new PDO('mysql:host=xxxx', 'xxx', 'xx');
Tu peux aussi tester comme ceci:
(On peut aussi utiliser catch(PDOException $e))
$pseudo = 'pseudo';
$modele = 'modele';
$chevaux = 'chevaux';
$contact = 'contact';
$choix = 'choix';

try {
 $bdd = new PDO('mysql:host=xxxx', 'xxx', 'xx');
 $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 $req = $bdd->prepare('INSERT INTO `voiture`(`pseudo`, `modele`, `chevaux`, `contact`, `choix`) VALUES(?, ?, ?, ?, ?)');
 $req->execute(array($pseudo, $modele, $chevaux, $contact, $choix));

 echo 'enregistrement pris en compte.';
 $bdd = null;
} catch(PDOException $e) {
 echo 'Erreur: ' . $e->getMessage();  
}
Mais suivant mes tests, les erreurs (produites manuellement pour les tests) retournées par l'exception que ce soit à la connexion, dans la requête ou même à ces deux endroits sont de type SQL.
Que ce soit avec catch(PDOException $e) ou catch(Exception $e) d'ailleurs.
Et encore une fois -> aucun bug :wink:

CF:
http://dev.mysql.com/tech-resources/art ... l-pdo.html

Autre méthode:
 function exceptionHandler($e) {
     echo 'Erreur: ' . $e->getMessage();
}
 
$pseudo = 'pseudo';
$modele = 'modele';
$chevaux = 'chevaux';
$contact = 'contact';
$choix = 'choix';

 set_exception_handler('exceptionHandler');

 $bdd = new PDO('mysql:host=xxxx', 'xxx', 'xx');
 $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 $req = $bdd->prepare('INSERT INTO `voiture`(`pseudo`, `modele`, `chevaux`, `contact`, `choix`) VALUES(?, ?, ?, ?, ?)');
 $req->execute(array($pseudo, $modele, $chevaux, $contact, $choix));

 echo 'enregistrement pris en compte.';
 $bdd = null;

Re: marche plus en ligne...

Posté : 30 mars 2010, 09:45
par stealth35
sinon sur ton serveur t'as quel version de PHP ?

Re: marche plus en ligne...

Posté : 30 mars 2010, 13:13
par mooom
j'ai revérifier les codes connexion a la base, il n'y a pas d'erreur,
et le code donnée plus haut,ne fonctionne pas non plus...
je suis sous php4, et j'ai changé l'extension pour en .php5, j'ai une erreur SQL...
je crains de ne pas dépasser le stade débutant :s