Parse error

Eléphanteau du PHP | 30 Messages

15 juil. 2011, 09:42

Bonjour
j'ai un parse error
et je ne vois pas ou est la faute

Parse error: syntax error, unexpected T_CATCH in /var/www/poliboolold.fr/htdocs/minichat_post.php on line 34

Code : Tout sélectionner

[php<?php $bdd = new PDO('mysql:host=**************;dbname=polib250634', 'polib250634', '*********', $pdo_options); $Variables = array('pseudo', 'message'); //Si t'a plus de variable à tester par la suite, c'est pratique :) $erreur = 0; foreach ($Variables as $item) { //Boucle qui verifie chaque variables qui sont dans l'array du dessus, si une ou plusieurs manque ou sont vide $erreur vaudra 1 if (isset($_POST[$item])) { if (isempty($_POST[$item])) $erreur = 1; //Pas de isempty sans isset, car une variable peut etre non définie ou définie et vide et si elle n'est pas définie et que tu fait un isempty direct, t'aura une belle erreur. } else $erreur = 1; } if (!$erreur) { $requete = $bdd->prepare('SELECT bann, ID FROM minichat WHERE pseudo = ?'); //La faille n'est pas bouché. $requete->execute(array($_POST['pseudo'])); $reponse = $requete->fetch(); if ($reponse['bann'] == 0) { setcookie('pseudo', $_POST['pseudo'], time() + 365*24*3600, null, null, false, true); $requete->closeCursor(); $req = $bdd->prepare('INSERT INTO minichat (pseudo, message) VALUES(?, ?)'); $req->execute(array($_POST['pseudo'], $_POST['message'])); // Redirection du visiteur vers la page du minichat header('Location: mini_chat.php'); } } else { echo 'message'; } } else { echo 'Une ou plusieurs variable ne sont pas correctement définie'; } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } ?> ][/php]
Merci d'avance :wink:

ViPHP
ViPHP | 4039 Messages

15 juil. 2011, 10:02

Puisqu'apparemment c'est difficile, voici le code ci-dessus indenté:
$bdd = new PDO('mysql:host=**************;dbname=polib250634', 'polib250634', '*********', $pdo_options);
$Variables = array('pseudo', 'message'); //Si t'a plus de variable à tester par la suite, c'est pratique :)
$erreur = 0;
foreach ($Variables as $item) { //Boucle qui verifie chaque variables qui sont dans l'array du dessus, si une ou plusieurs manque ou sont vide $erreur vaudra 1
    if (isset($_POST[$item])) {                                                                                                                                                                     
        if (isempty($_POST[$item])) $erreur = 1; //Pas de isempty sans isset, car une variable peut etre non définie ou définie et vide et si elle n'est pas définie et que tu fait un isempty direc
    }
    else $erreur = 1;
}  
if (!$erreur) {
    $requete = $bdd->prepare('SELECT bann, ID FROM minichat WHERE pseudo = ?'); //La faille n'est pas bouché.
    $requete->execute(array($_POST['pseudo']));
    $reponse = $requete->fetch();
    if ($reponse['bann'] == 0)
    {      
        setcookie('pseudo', $_POST['pseudo'], time() + 365*24*3600, null, null, false, true);
        $requete->closeCursor();
        $req = $bdd->prepare('INSERT INTO minichat (pseudo, message) VALUES(?, ?)');
        $req->execute(array($_POST['pseudo'], $_POST['message']));

        // Redirection du visiteur vers la page du minichat 
        header('Location: mini_chat.php');
    }                             
}                                   
else {                                
    echo 'message';                     

}                                         
}                                         
else {                                    
    echo 'Une ou plusieurs variable ne sont pas correctement définie';
}                                         
catch(Exception $e)                       
{                                         
    die('Erreur : '.$e->getMessage());    
}                                         
?>   
Déjà, je vois des accolades en trop, et l'expression catch() fait partie de la construction try{} catch(), aka. lagestion des exceptions. Un catch() sans son try{}, en php il ne me semble pas que ça fonctionne (d'autres langages le permettent, mais ce n'est pas le sujet).

On dirait un code copié-collé et recomposé de façon incomplète.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphanteau du PHP | 30 Messages

15 juil. 2011, 10:14

oK donc j'ai fait comme ca :

Code : Tout sélectionner

<?php try { $bdd = new PDO('mysql:host=*****************;dbname=polib250634', 'polib250634','******', $pdo_options); $Variables = array('pseudo', 'message'); //Si t'a plus de variable à tester par la suite, c'est pratique <img src="./images/smilies/icon_smile.gif" alt=":)" title="Smile" /> $erreur = 0; foreach ($Variables as $item) { //Boucle qui verifie chaque variables qui sont dans l'array du dessus, si une ou plusieurs manque ou sont vide $erreur vaudra 1 if (isset($_POST[$item])) { if (isempty($_POST[$item])) $erreur = 1; //Pas de isempty sans isset, car une variable peut etre non définie ou définie et vide et si elle n'est pas définie et que tu fait un isempty direc } else $erreur = 1; } if (!$erreur) { $requete = $bdd->prepare('SELECT bann, ID FROM minichat WHERE pseudo = ?'); //La faille n'est pas bouché. $requete->execute(array($_POST['pseudo'])); $reponse = $requete->fetch(); if ($reponse['bann'] == 0) { setcookie('pseudo', $_POST['pseudo'], time() + 365*24*3600, null, null, false, true); $requete->closeCursor(); $req = $bdd->prepare('INSERT INTO minichat (pseudo, message) VALUES(?, ?)'); $req->execute(array($_POST['pseudo'], $_POST['message'])); // Redirection du visiteur vers la page du minichat header('Location: mini_chat.php'); } } else { echo 'message'; } else { echo 'Une ou plusieurs variable ne sont pas correctement définie'; } } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } ?>
J'ai un nouveau parse error:Parse error: syntax error, unexpected T_ELSE in /var/www/poliboolold.fr/htdocs/minichat_post.php on line 33

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

15 juil. 2011, 11:15

Le message d'erreur t'indique que tu as une erreur de syntaxe qui apparait à partir de la ligne 33. En effet, d'après le code qui précède la ligne 33, PHP ne s'attendait pas à trouver un ELSE à cet endroit...

C'est donc que tu as un problème dans la structure de ton code. Et en effet, si tu regardes l'indentation de ton code tu verras rapidement que tu as deux "else" pour le "if (!$erreur)", le deuxième étant à la ligne 33 ...

En fait ce qui est bien c'est que php te dit tout dans ses messages d'erreur, suffit juste de bien les comprendre :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...