espace admin

Par captainfier, il y a 10 ans


bonjour,
je debute en php et tente de faire un espace admin pour mon site j'aimerais biensur avoir quelques commandes en plus que les autres admins

<?php
session_start();

if(isset($_SESSION['pseudo']) AND isset($_SESSION['id']))
{
$_SESSION['pseudo'] = $pseudo;
$_SESSION['id'] = $id;

$requser = $bdd->prepare("SELECT * FROM connexionadmin WHERE pseudo = Monpseudo and id = 1 ");
$requser->execute(array($pseudo, $id));
$useradmin1 = $requser->rowCount();
if($useadmin1 == 1)
{
    echo "commande admin 1";
}
else
{
    echo " commande autres admin";
}

}
else
{
echo "erreur !!!";
}
?>

j'aimerais que : si ma session est connectée alors afficher .... sinon afficher .

pour le moment j'ai juste le message "erreur !!!" qui s'affiche

13 réponses

Genki, il y a 10 ans

Je suis pas trop fan de PDO, perso, mais je dirait peutêtre que le problème vient de ta requête

Faut mettre :Monpseudo et non pas Monpseudo

captainfier, il y a 10 ans

je viens d'essayer pas de changements .... toujours le message erreur

shinix, il y a 10 ans

Salut logique tu as inversé...

$_SESSION['pseudo'] = $pseudo; $_SESSION['id'] = $id;

devient

$pseudo = $_SESSION['pseudo']; $id = $_SESSION['id'] ;
captainfier, il y a 10 ans

merci je viens d'inverser mais toujours pareil le message d'erreur ....

shinix, il y a 10 ans

En même temps le code complet est faut ta requête devrait être :

$useradmin1 = $bdd->query("SELECT COUNT(*) FROM connexionadmin WHERE pseudo='$pseudo' AND id='$id'")->fetchColumn();
arnich, il y a 10 ans

Pourquoi tu dis que le code complet est faut.
Il est possible de faire une requete préparée.

Par contre oui tu a raison rowCount ne permet pas de faire un count sur un select. Rowconut va permetre de compter le nombre de ligne DELETE, UPDATE, INSERT.

Ce que tu peux faire :

<?php session_start(); if(isset($_SESSION['pseudo']) AND isset($_SESSION['id'])) { $pseudo = $_SESSION['pseudo']; $id = $_SESSION['id']; $requser = $bdd->prepare("SELECT * FROM connexionadmin WHERE pseudo = :pseudo and id = :id"); $requser->execute([':pseudo' => $pseudo, ':id' => $id]); $useradmin1 = $requser->fetchAll(PDO::FETCH_ASSOC); if($useradmin['id'] == 1) { echo "commande admin 1"; } else { echo " commande autres admin"; } } else { echo "erreur !!!"; } ?>
Lartak, il y a 10 ans

Bonjour.
Tu as plusieurs erreurs dans ton code, je vais donc les expliquer en les énumérant :

  1. la définition des variables pseudoet id sont mal ordonnées, tu dois d'abord déclarer la variable, puis ensuite lui définir sa valeur, tu dois donc faire comme te l'a suggéré shinix : $pseudo = $_SESSION['pseudo']; $id = $_SESSION['id'];
  2. Tu fais ta requête SQL en utilisant PDO, mais je ne vois à aucun moment l'initialisation de l'objet qui te permet de l'utiliser via $bdd ou l'inclusion du fichier afin de pouvoir l'utiliser.
  3. Comme te l'a dit Genki, tu as mal écrit ta requête, il te faut donc remplacer : "SELECT * FROM connexionadmin WHERE pseudo = Monpseudo and id = 1 "

    Par :

    "SELECT * FROM connexionadmin WHERE pseudo = :pseudo AND id = :id"
  4. L'instruction pour exécuter la requête est inexacte, tu utilise la structure qui utilise les ? à la place de celle qui nécessite la forme :variable, il te faut donc remplacer : array($pseudo, $id)

    Par :

    array('pseudo' => $pseudo, 'id' => $id)
  5. Tu définies la variable useradmin1 mais tu utilises ensuite la variable useadmin1 qui n'est pas définie et qui ne correspond donc pas à la variable useradmin1.
    Au final, ton code devrait ressembler à ceci : <?php session_start();

if(isset($_SESSION['pseudo']) && isset($_SESSION['id']))
{
$pseudo = $_SESSION['pseudo'];
$id = $_SESSION['id'];
// Inclusion ici de ton fichier qui instancie la connexion à la base de données en PDO et qui définie bien l'objet dans la variable $bdd
$requser = $bdd->prepare("SELECT * FROM connexionadmin WHERE pseudo = :pseudo and id = :id");
$requser->execute(array('pseudo' => $pseudo, 'id' => $id));
$useradmin1 = $requser->rowCount();
if($useradmin1 == 1)
{
echo "commande admin 1";
}
else
{
echo " commande autres admin";
}
}
else
{
echo "erreur !!!";
}

Par contre, même si tu fais toutes ces corrections, ton problème ne changera pas étant donné que l'erreur qui t'es retournée correspond à celle qui dit en gros que la première condition n'est pas rempli, donc que les clés `pseudo` et `id` n'existent pas dans la session. Tu dois donc avant faire en sorte qu'elles soient instruites avant de vouloir faire fonctionner le code que tu nous montre.
captainfier, il y a 10 ans

merci beaucoup mais par contre je ne comprend pas bien l'erreur sur id et pseudo voici le code pour la connexion peut être que l'erreur est finalement dedans :

<?php
$bdd = new PDO('mysql:host=localhost;dbname=bddsti','root','');

if(isset($_POST['connexion']))
{
$pseudoconnect = htmlspecialchars($_POST['pseudo']);
$mdpconnect = sha1($_POST['mdp']);

    if(!empty($pseudoconnect) AND !empty($mdpconnect))
    {
        $requser = $bdd->prepare("SELECT * FROM connexionadmin WHERE pseudo = ? and mdp = ? ");
        $requser->execute(array($pseudoconnect, $mdpconnect));
        $userexist = $requser->rowCount();
        if($userexist == 1)
        {
            header("location: tblcontrole.php");
        }
        else
        {
            $erreur = "mdp ou pseudo incorrect";
        }
    }
    else
    {
    $erreur = "Tout les champs doivent etre remplis";
    }

}

?>

<?php
if(isset($erreur))
{
echo $erreur;
}

?>
Carouge10, il y a 10 ans

Je crois qu'une petite edition du post s'impose (^_^)

caoua, il y a 10 ans

Juste comme ça, ne serait il pas plus simple de solutionner le problème si on connaissait le message d'erreur que php retourne ?

captainfier, il y a 10 ans

le message d'erreur est celui que j'ai crée dans ma fonction

arnich, il y a 10 ans

Captainfier, comme déja dit le rowcoun ne permet pas de retourner le nombre de ligne d'un select.
Donc $userexist == 1 => False donc on passe dans le else