Problème accés db cause enccolade

Résolu
Bonjour, j'ai un petit soucis avec un script php qui ne veux pas me connecter à ma base de donnée...
Message d'erreur :
Parse error: syntax error, unexpected '{' in /homepages/31/d357858736/htdocs/signup/login.php on line 27


Mon code :
<?php 
session_start(); 
if(!empty($_SESSION['membre'])) 
{ 
  header('Location: index.php'); 
} 

if(!empty($_POST)) 
{ 
  $valid = true; 
  extract($_POST); 
   
  if(empty($login)) 
  { 
    $valid = false; 
    $erreurlogin = 'Indiquez votre login'; 
  } 
   
  if(empty($pass)) 
  { 
    $valid = false; 
    $erreurpass = 'Indiquez votre mot de passe'; 
  } 
   
  if($valid) 
  { 
  try{ 
  $bdd = new PDO('mysql:host=dbmonhebergeur;dbname=ma_base', 'mon_nom_utilis', 'mon_pass') or die(print_r($bdd->errorInfo())); 
  $bdd->exec('SET NAMES utf8'); 
  } 
   
  catch(Exeption $e){ 
  die('Erreur:'.$e->getMessage()); 
  } 
   
  $req = $bdd->prepare('SELECT * FROM membre WHERE login=:login AND pass=:pass'); 
  $req->execute(array( 
    'login'=>$login, 
    'pass'=>sha1($pass) 
  )); 
  $data = $req->fetch(); 
  if($req->rowCount()==0) 
  { 
    $valid = false; 
    $erreurid = 'Mauvais identifiants'; 
  } 
   
  if($req->rowCount()>0 && $data['actif']==0) 
  { 
    $valid = false; 
    $erreurid = 'Votre compte n\'est pas actif, consultez le mail envoyé pour l\'activer.'; 
  } 
  else 
  { 
    if($req->rowCount()>0 && $data['actif']==1) 
    { 
      $_SESSION['membre'] = $login; 
    } 
  } 
     
    $req->closeCursor(); 
    if($valid) 
    { 
      header('Location: profil.php'); 
    } 
   
  } 
} 
?>


Apparemment se serait une enccolade toujours au niveau de la fonction try{ mais je ne vois pas où ?????
Merci d'avance pour votre aide

9 réponses

  1. SAlut
    Selon tes indications quand je lis
    if($valid){
    try{
    $bdd = new PDO('mysql:host=dbmonhebergeur;dbname=ma_base', 'mon_nom_utilis', 'mon_pass') or die(print_r($bdd->errorInfo()));
    $bdd->exec('SET NAMES utf8');
    }
    Il manque une accolade fermante déjà (celle du if). Il suffit de la mettre.
    D'autre part qu'est ce que try() je n'ai pas trouvé à quoi cela correspond.
    Je ne connais pas.
    PHP5 ou 4 ?
    0
    1. Merci pour ton message
      php5
      c'est je crois ce qui permet d'insérer un champs dans la base de donnée
      Ceci dit je en suis pas une experte
      Mais je t'ai trouvé ce petit descriptif :
      - Quand aucune erreur n'est levée, le bloc try est intégralement exécuté et le(s) catch(s) associé(s) est (sont)
      ignoré(s).
      
      - Si une erreur est levé, le bloc try est interrompu (les instructions après f sont ignorées) et l'on rentre dans le bloc catch qui correspond à l'erreur levé. Il est possible de faire un "catch" par défaut quand tous les catch du bloc try catch n'ont pas rattrapé l'erreur : celui ci est noté catch(...). 

      Pour ce qui est de l'accolade, je dois la mettre où j'ai déjà tout essayé ou presque apparement :-) ?
      0
      1. Il faut fermer l'instruction If avec une accolade..
        Je n'ai pas la réponse à la question votre texte contenant les caractères accentués tronqués sont ils stockés dans une base de données ? Ou bien est ce que le texte est écrit en dur dans le code PHP ?
        0
        1. stockés dans une base de donnée tous les textes du site le sont
          Mais en créant cette partie admin (très simple) j'ai apparemment plus de soucis que de passer directement par la base de donnée
          0
        2. Ce n'est pas Exeption mais Exception
          } catch(Exception $e) {
          0
      2. merci pour la réponse, j'ai effectué la modification mais... toujours erreur à cette ligne : try{
        Je n'y comprends rien
        est ce possible de changer cette fonction ?
        Peut être que ça vient de mon hebergeur ?
        0
        1. Après vérification, il ne manque aucune accolade dans ton script :
          <?php
          session_start();
          if(!empty($_SESSION['membre'])) {
          	header('Location: index.php');
          }
          
          if(!empty($_POST)) {
          	$valid = true;
          	extract($_POST);
          
          	if(empty($login)) {
          		$valid = false;
          		$erreurlogin = 'Indiquez votre login';
          	}
          
          	if(empty($pass)) {
          		$valid = false;
          		$erreurpass = 'Indiquez votre mot de passe';
          	}
             
          	if($valid) {
          		try {
          			$bdd = new PDO('mysql:host=dbmonhebergeur;dbname=ma_base', 'mon_nom_utilis', 'mon_pass') or die(print_r($bdd->errorInfo()));
          			$bdd->exec('SET NAMES utf8');
          		} catch(Exception $e) {
          			die('Erreur:'.$e->getMessage());
          		}
          
          		$req = $bdd->prepare('SELECT * FROM membre WHERE login=:login AND pass=:pass');
          		$req->execute(array('login'=>$login, 'pass'=>sha1($pass)));
          		$data = $req->fetch();
          		if($req->rowCount()==0) {
          			$valid = false;
          			$erreurid = 'Mauvais identifiants';
          		}
          
          		if($req->rowCount()>0 && $data['actif']==0) {
          			$valid = false;
          			$erreurid = 'Votre compte n\'est pas actif, consultez le mail envoyé pour l\'activer.';
          		} else {
          			if($req->rowCount()>0 && $data['actif']==1) {
          				$_SESSION['membre'] = $login;
          			}
          		} 
          
          		$req->closeCursor();
          		if($valid) {
          			header('Location: profil.php');
          		}
          	}
          }
          ?>
          0
        2. Merci beaucoup pour votre réponse

          alors pourquoi ce message d'erreur ?
          mon hébergeur ?
          0
      3. non il ne manque pas d'acolade : cela a été corrigé
        if($valid) {
        try {
        $bdd = new PDO('mysql:host=dbmonhebergeur;dbname=ma_base', 'mon_nom_utilis', 'mon_pass') or die(print_r($bdd->errorInfo()));
        $bdd->exec('SET NAMES utf8');
        } catch(Exception $e) {
        die('Erreur:'.$e->getMessage());
        }
        0
        1. Et si Try est une fonction ce n'est pas accolade qu'il faut lui mettre c'est ()
          0
          1. si je modifie l'accolade par ()
            message d'erreur :
            Parse error: syntax error, unexpected T_VARIABLE in /homepages/31/d357858736/htdocs/signup/inscription.php on line 26
            0
          2. La structure try... catch suit cette syntaxe :
            try { 
             //... 
            } catch() { 
             //... 
            }

            Donc pas de parenthèses à try mais bien une accolade ouvrante et une fermante.
            0
        2. L'erreur se produit à la ligne 26 non plus à la 173.. c'est peu etre différent.
          N'étant pas dans votre environnement je ne saurai pas débeuguer. C'est à vous de le faire malheureusement.
          Faites les tests pas à pas.
          0
          1. non c'est juste une modification pour la connexion db qui fait que try{ bouge de 2 ou 3 ligne
            mais je fais les tests au fur et à mesure que je reçois vos messages

            et je vous en remercie tous d'ailleurs
            0
          2. j'ai le sentiment qu'il y a 2 personnes sur la demande (2 comptes CCM) VAL et Eternity...
            0
          3. oui je viens de m'inscrire sur le forum et val ne passait pas en pseudo
            0
        3. ce que je ne comprends pas c'est pourquoi le serveur (Internet) m'envoie cette erreur s'il ne manque pas d'accolade ????? Ce n'est pas logique
          0
          1. Bonjour à tous et désolée de vous avoir donné du soucis avec ce script
            Mon doute était bien fondé, ça venait bien de mon hébergeur :
            Le seveur utilise par défaut php4 et le script est en php5

            Donc voici la solution si quelqu'un à un soucis de script php5.
            créer un fichier .htaccess (à la racine du site)
            puis inclure cette fonction :
            AddType x-mapp-php5 .php


            Et le tour est joué !

            Merci moderno31 et __construct pour votre aide elle m'a était précieuse, surtout de m'avoir confirmer qu'il n'y avait pas de problème d'accolade comme le spécifiait le serveur Internet. C'est ce qui m'a orienté
            0