Besoin daide

queenb -  
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour, je suis débutant en php et j'essaie d'afficher la photo de l'utilisateur qui se connecte a mon site et j'arrive pas... ci dessous le le message d'erreur qu'on met

Parse error: syntax error, unexpected ''"'' (T_CONSTANT_ENCAPSED_STRING) in C:\xampp\htdocs\MES ARTICLES\BLOGSUITE\INDEX.php on line 63

voici ma ligne 63
<?php echo((isset($_SESSION['PROFILE']))?('<img src="images/'.$_SESSION['avatar']'"'):""); ?>,<br />
Bienvenue sur notre site.<br />

11 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
<?php echo isset($_SESSION['PROFILE']) ? '<img src="images/'.$_SESSION['avatar'].'"' : "" ; ?>

Bienvenue sur notre site.<br /> 


PS: A l'avenir, merci d'utiliser les BALISES DE CODE pour poster du code sur le forum
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

0
queenb
 
MERCI JORDAN DE MAVOIR REPONDU MAIS il ne recupere tjr pas la photo de lutilisateur qui sy connecte ... ci dessous mon code php et html



                 <?php 
  

  $bdd = new PDO('mysql:host=127.0.0.1;dbname=projet', 'root', '');

 if(isset($_POST['submit'])){
   
  $pseudoconnect = htmlspecialchars($_POST['psdoconnect']);
  $mdpconnect = sha1($_POST['passconnect']);

      if(!empty($pseudoconnect) AND !empty($mdpconnect))
      {

        // On va chercher si ces données existes dans la bd

                $requser = $bdd->prepare("SELECT * FROM espace_membres WHERE pseudo = '".$pseudoconnect."' AND mot_de_passe = '".$mdpconnect."'");
                $requser->execute(array($pseudoconnect, $mdpconnect));
               $userexist = $requser->rowCount();

        if($userexist == 1){

          $userinfo = $requser->fetch();
  
          session_start();
   $_SESSION['PROFILE'] = $requser;
   $_SESSION['pseudo'] = $userinfo['pseudo'];
   $_SESSION['avatar'] = $userinfo['avatar'];

   ?>
   bienvenue "<?php echo htmlentities($userinfo['pseudo']); ?>" :
   <table style="width:500px;">
      <tr>
          <td><?php
               if($userinfo['avatar']!=''){
      echo '<img src="'.htmlentities($userinfo['avatar'], ENT_QUOTES, 'UTF-8').'" alt="Image Perso" style="max-width:100px;max-height:100px;" />';
   }
   else
   {
      echo 'Cet utilisateur n\'a pas d\'image perso.';
   }
   ?></td>
          <td class="right"><h1><?php echo htmlentities($userinfo['pseudo'], ENT_QUOTES, 'UTF-8'); ?></h1>
           
       </tr>
   </table>
   <?php
      }
      else
      {
         echo 'Cet utilisateur n\'existe pas.';
      }
   }

   header("Location: INDEX.php");
 }
   else
  {
 $erreur = "Mauvais pseudo ou mot de passe !";
  }
 
 ?>         
                
                



mon formulaire

<form action="connexion.php" method="post">

<h2 style="color:#fff;">Se connecter</h2>

<input type="text" name="psdoconnect" placeholder="pseudo" required><br><br>

<input type="password" name="passconnect" placeholder="Password" required /><br /><br />

<a href=""><input type="submit" value="se connecter" name="submit" /></a><br /><br />

0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Quel est le rapport entre ton problème du départ et le code que tu nous montres maintenant ?
Le code ne correspond pas...

de plus il y a quelques soucis dans ton code... J'y reviendrai plus tard.
Pour commencer prends bonne note des conseils donnés dans les liens suivant :

https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

.
0
Queenb > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
Ok je texplik mon pb .. j'ai conçu un petit site de e-commerce ou, pour faire des achats il faut être membre sur le site.. j'ai créer le formulaire d'inscription ainsi que la base de donnée et l'inscription marche. le soucis de situe au niveau de la connexion. Lorsque l'utilisateur se connecte après s'être inscrit j'aimerai lui afficher sa photo et un message de bienvenue.. je n'arrive pas a le faire depuis
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Donc, comme je le disais.. il y a pleins de soucis dans ton code.

- rowCount(); ne s'utilise JAMAIS sur une requête de type 'select' ( à la place on fera plutôt un fetchAll sur le résultat de la requête puis un count )

-Tu n'as pas activé l'affichage des erreurs PHP

- Tu n'as pas activé les erreurs PDO

- Tu ne gères pas les éventuelles erreurs PDO ( en utilisant des blocs TRY/CATCH)

- ton
header("Location
ne peut pas fonctionner puisque tu as déjà affiché du texte sur ta page. Cela devrait te provoquer une erreur...

- Tu utilises le sha1 pour "crypter" tes mots de passe.... alors que ce n'est plus du tout sécurisé ( à la place, il faut utiliser les fonctions php : password_hash et password_verify )

- On n'utilise jamais htmlspecialchars pour le traitement des données en BDD .. ça ne s'utilise QUE pour l'affichage.

- Tu ne devrais pas avoir à utiliser de htmlentities ENT_QUOTES, 'UTF-8' .. je t'invite à appliquer le contenu de ce lien : https://forums.commentcamarche.net/forum/affich-37584944-php-html-caracteres-accentues-et-l-utf8

Bref, commence par appliquer l'ensemble des conseils donnés dans les liens
(je te les redonne au cas où )
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

Puis reviens nous voir avec ton code modifié si tu rencontres toujours des soucis.




0
queenb
 
jordan.. jai essayer suivre les étapes que vous mavez donnée en reprenant tout depuis le début. mais là mes données ne vont plus la base de donnée on me dit m MySQL a retourné un résultat vide (c'est à dire aucune ligne). ci dessous mes codes


formulaire
<form action="inscription.php" method="post" enctype="multipart/form-data">

    <center><h2 style="color: green;">S'inscrire</h2></center>

    <input type="text" name="pseudo" placeholder="pseudo" required><br>

    <input type="email" name="email" placeholder="email" required><br>

    <input type="password" name="mdp" placeholder="Password" required><br>

    <input type="password" name="cmdp" placeholder="repeatPassword" required><br>

    <input type="contact"  name="numero" placeholder="contact"><br>

 <input type="submit" value="s'inscrire" name="register" class="btn btn-block btn-primary"><br><br>



code insertion php

<?php
    require_once 'connect_bd.php';

    if (isset($_POST['register'])){
      
         if(!empty($_POST['pseudo']) AND !empty($_POST['mail']) AND !empty($_POST['mdp']) AND !empty($_POST['cmdp']) AND !empty($_POST['numero']))
       {
         $errors=array();
               
            //test sur le pseudo

              if(empty($_POST['pseudo']) || !preg_match('/^[a-zA-Z0-9]+$/',$_POST['pseudo']))
                   {
                     $errors['pseudo']="votre pseudo n'est pas valide(alphanumerique)";
                    }
                    else {
                      $req = $pdo->prepare('SELECT id FROM espace_membres WHERE pseudo = ?');
                      $req->execute([$_POST['pseudo']]);
                      $user = $req->fetch();
                       if ($user)
                        {
                        $errors['pseudo'] = 'ce pseudo est deja pris';
                       } 
                    }


              // test sur email

              if(empty($_POST['email']) || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
                   {
                     $errors['email'] = "email invalide";
                    }
                    else
                    {
                      $req = $pdo->prepare('SELECT id FROM espace_membres WHERE email = ?');
                      $req->execute([$_POST['email']]);
                      $user = $req->fetch();
                       if ($user)
                        {
                        $errors['email'] = 'cet email existe deja pour un autre compte';
                       } 
                    }
                                //test sur le mot de passe:
                                if(empty($_POST['mdp']) || $_POST['mdp'] != $_POST['cmdp'])
                                {
                                  $errors['mdp']="entrer un mot de passe valide";
                                 }
                          
                    if (empty($errors)) {
                      $requete = $pdo->prepare("INSERT INTO espace_membres SET pseudo = ?, email = ?, mot_de_passe = ?, contact = ?"); 
              
                      //cryptage du mot de passe
                      $mdp = password_hash($_POST['mdp'], PASSWORD_BCRYPT);

                      //execution de la requete
                      $requete->execute([$_POST['pseudo'], $_POST['email'], $mdp, $_POST['numero']]);
                      die('felicitation votre compte a bien été créer');
                    }           
                  }  
      }      
   ?>


ma page de connexion a la bd
<?php 

   error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

    // If form submitted, insert values into the database.
    try{
      $bdd = new PDO('mysql:host=127.0.0.1;dbname=projet', 'root', '');

      // Activation des erreurs PDO
       $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
       
      // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
       $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
      } 
       catch(PDOException $e) {
          echo 'connection failed: ' or die('Erreur : ' . $e->getMessage());
      }
      ?>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Il manque encore la récupération des variables.. et ton code mérite une petite refonte.

Je te propose :

Créé un fichier user.class.php contenant :

class user {

  private $bdd = null;
  

  function __construct($bdd) {
    $this->bdd = $bdd;
  }

  public function dbExec($sql, $datas = NULL) {
    //Execution de la requete
    try {
      $requete = $this->bdd->prepare($sql);
      $requete->execute($datas);
    } catch (Exception $e) {
      // en cas d'erreur :
      echo " Erreur ! " . $e->getMessage();
      echo " Les datas : ";
      print_r($datas);
    }
    return $requete;
  }

  public function getUserByPseudo($pseudo) {
     $sql = 'SELECT id FROM espace_membres WHERE pseudo = ?';
     $datas = array($pseudo);
     $res = $this->dbExec($sql,$datas);
     return $res->fetchAll();
  }
  
  public function getUserByMail($Mail) {
     $sql = 'SELECT id FROM espace_membres WHERE email = ?';
     $datas = array($Mail);
     $res = $this->dbExec($sql,$datas);
     return $res->fetchAll();
  }
  
  public function addUser($pseudo,$email,$mdp,$contact) {
     //cryptage du mot de passe
     $mdp = password_hash($mdp, PASSWORD_BCRYPT);
     
     //insertion en BDD
     $sql = "INSERT INTO espace_membres (pseudo, email, mot_de_passe , contact)
              values (?,?,?,?) ";
     $datas = array($pseudo,$email,$mdp,$contact);
     $res = $this->dbExec($sql,$datas);
     return $res;
  }
  
  /**
   * Fonction permettant de vérifier si l'utilisateur existe en fonction de son login et password
   */
  public function authentification($pseudo,$mdp){
    $user = $this->getUserByPseudo($pseudo);
    //verifie qu'il n'y a bien qu'un seul user avec ce pseudo..
    if(!empty($user) && count($user)==1){
      $mdpBdd = $user[0]['mot_de_passe'];
      if (password_verify($mdp, $mdpBdd)){
        return $user;
      }else{
        return false;
      }
    }
  }
}


Et ton code devient
<?php

//connexion à la bdd
// penser à activer l'affichage des erreurs PDO : https://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs
require_once 'connect_bd.php';

// on inclu la class user
require_once "user.class.php"; // on inclu la class user

//initialisation des variables 
$errors = array();

// recuperation PROPRE des variables AVANT de les utiliser
$pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL;
$mdp = !empty($_POST['mdp']) ? $_POST['mdp'] : NULL;
$cmdp = !empty($_POST['cmdp']) ? $_POST['cmdp'] : NULL;
$numero = !empty($_POST['numero']) ? $_POST['numero'] : NULL;
$email = !empty($_POST['email']) ? $_POST['email'] : NULL;


//on instancie la class user
$oUser = new user($bdd);

if (isset($_POST['register'])) {

  //test sur le pseudo

  if (!$pseudo || !preg_match('/^[a-zA-Z0-9]+$/', $pseudo)) {
    $errors['pseudo'] = "votre pseudo n'est pas valide(alphanumerique)";
  } else {   
    $user = $oUser->getUserByPseudo($pseudo);
    if (!empty($user)) {
      $errors['pseudo'] = 'ce pseudo est déjà pris';
    }
  }

  // test sur email

  if (!$email || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $errors['email'] = "email invalide";
  } else {
    $user = $oUser->getUserByMail($mail);
    if ($user) {
      $errors['email'] = 'cet email existe deja pour un autre compte';
    }
  }
  //test sur le mot de passe:
  if (!$mdp || $mdp != $cmdp) {
    $errors['mdp'] = "entrer un mot de passe valide";
  }

  if (empty($errors)) {
    
    if($oUser->addUser($pseudo,$email,$mdp,$contact)){
      die('felicitation votre compte a bien été créer');
    }
  }else{
    print_r($errors);
  }
}
?>


0
queenb
 
merci jordan jai essayer dappliquer le code mais on met cette erreur

"Notice: Undefined variable: pdo in C:\xampp\htdocs\MES ARTICLES\BLOGSUITE\inscription.php on line 23"
0
queenb
 
jai une question dans cette ligne qui suit est ce que je dois mettre dans la parenthese a la place de $bdd mes parametre de connection a la bd?

" function __construct($bdd)"
0
queenb
 
voici la ligne 23 dont il sagit
$oUser = new user($pdo);  

j'ai essayer de mettre $bdd a la place de $pdo. quand je le fait le message d'erreur disparaît mais les données ne vont toujours pas dans ma base de donnée
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Tu as fait pour la variable $bdd.

Et pour ton souci.. qu'est ce qu'il s'affiche sur ta page ? Un message d'erreur ? Autre chose ?
0
queenb > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
avec le $pdo quand je rempli le formulaire et que je valide on met l'erreur que j'ai mis plus haut a la ligne 23 maintenant quand je change $pdo en $bdd et que valide le formulaire ca m'affiche une page blanche vide et les info ne vont toujours pas ds la base de données
0
Queenb
 
Rien ne s'affiche... Lorsque je rempli le formulaire et que je valide ça m'affiche une page blanche vide et les données ne vont pas dans la base de données
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
j'ai fait une petite correction dans la class. (j'ai édité mon message précédent)
peux tu le reprendre et reessayer ?
0
Queenb > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
Ok j'essaie et je te reviens
0
Queenb
 
C'est le fichier user.class.php que tu as édité?
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Non pardon.
Ton autre code.
Il y a un $$user (un dollar en trop ) au lieu de $user
0
queenb > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
ok re bonjour jordan jai fais ca marche maintenant les info vont effectivement dans la base de donnée
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > queenb
 
tu penseras à mettre le sujet en resolu.
Bonne journée.
0
Queenb
 
Okpas de soucis...
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Au cas où, tu as vu que je t'ai également prévu la fonction pour vérifier si l'utilisateur peut se connecter
public function authentification
0