Besoin daide

Fermé
queenb - 19 avril 2020 à 22:42
jordane45 Messages postés 38157 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 mai 2024 - 23 avril 2020 à 15:44
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 38157 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 mai 2024 4 655
19 avril 2020 à 23:00
<?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
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 38157 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 mai 2024 4 655
19 avril 2020 à 23:49
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 38157 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 mai 2024
20 avril 2020 à 00:09
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 38157 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 mai 2024 4 655
20 avril 2020 à 08:16
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
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 38157 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 mai 2024 4 655
Modifié le 22 avril 2020 à 23:46
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
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
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
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 38157 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 mai 2024 4 655
22 avril 2020 à 23:48
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 38157 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 mai 2024
23 avril 2020 à 00:52
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
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 38157 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 mai 2024 4 655
23 avril 2020 à 08:28
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 38157 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 mai 2024
23 avril 2020 à 08:40
Ok j'essaie et je te reviens
0
C'est le fichier user.class.php que tu as édité?
0
jordane45 Messages postés 38157 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 mai 2024 4 655
23 avril 2020 à 09:30
Non pardon.
Ton autre code.
Il y a un $$user (un dollar en trop ) au lieu de $user
0
queenb > jordane45 Messages postés 38157 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 mai 2024
23 avril 2020 à 12:32
ok re bonjour jordan jai fais ca marche maintenant les info vont effectivement dans la base de donnée
0
jordane45 Messages postés 38157 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 mai 2024 4 655 > queenb
23 avril 2020 à 14:12
tu penseras à mettre le sujet en resolu.
Bonne journée.
0
Okpas de soucis...
0
jordane45 Messages postés 38157 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 mai 2024 4 655
23 avril 2020 à 15:44
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