marche plus en ligne...

Petit nouveau ! | 9 Messages

29 mars 2010, 23:35

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,

Mammouth du PHP | 985 Messages

30 mars 2010, 00:09

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...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Petit nouveau ! | 9 Messages

30 mars 2010, 00:38

ça marche pas non plus :(
trj le meme message d'erreur,

ViPHP
ViPHP | 5462 Messages

30 mars 2010, 00:39

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)

Mammouth du PHP | 985 Messages

30 mars 2010, 00:46

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
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
ViPHP | 5462 Messages

30 mars 2010, 00:49

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();
}

Mammouth du PHP | 985 Messages

30 mars 2010, 00:51

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
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
ViPHP | 5462 Messages

30 mars 2010, 00:53

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

Mammouth du PHP | 985 Messages

30 mars 2010, 00:54

Je repete , je n'ai aucune erreur a date merci.
Revenons au sujet.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Petit nouveau ! | 9 Messages

30 mars 2010, 01:03

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...

Mammouth du PHP | 985 Messages

30 mars 2010, 01:10

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.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Petit nouveau ! | 9 Messages

30 mars 2010, 01:16

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...

Mammouth du PHP | 985 Messages

30 mars 2010, 03:54

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;
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
ViPHP | 5462 Messages

30 mars 2010, 09:45

sinon sur ton serveur t'as quel version de PHP ?

Petit nouveau ! | 9 Messages

30 mars 2010, 13:13

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