IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Checkbox et requête SQL


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Argentine

    Informations forums :
    Inscription : Janvier 2012
    Messages : 61
    Points : 42
    Points
    42
    Par défaut Checkbox et requête SQL
    Bonjour cher membres de la communauté developpez , j'ai décider de créer un système de messagerie privée pour mon site , tout marche bien sauf pour la suppression du message , Seul le membres qui a créer la discussion privée a le droit de la supprimer , la supression n'est qu'un UPDATE d'un champs , bon passon au code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?php
    if (!empty($_POST['suprimer']) &&  ($_SESSION['MM_Username'] == $row_Recordset['createur'] )) {
    		foreach ($_POST['suprimer'] as $cle) {
    			$Requete = "UPDATE forum_mp_titre SET createur_delete = '1' WHERE id = '$cle' ";
    			$resRequete = mysql_query($Requete, $onestream) or die(mysql_error());
     
    		$message_succes = ' Message suprimmer avec succés ! ';
    		} 
     
    		}
    	elseif   (!empty($_POST['suprimer']) &&  ($_SESSION['MM_Username'] !== $row_Recordset['createur'] ))
    		{
    			echo'erreur';
    	}
     
     
    ?>
    Bon pour $row_Recordset['createur']

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    $colname = "-1";
    if (isset($_SESSION['MM_Username'])) {
      $colname = $_SESSION['MM_Username'];
    }
     
    $row_Recordset['createur'] = $colname
     
    ?>

    lors de l'execution , je recois toujours erreur même si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ?php $row_Recordset['createur'] == $_SESSION['MM_Username'] ?>
    et je ne sais pas d'ou sa viens

    - merci pour votre aide

  2. #2
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    Oui c'est bizarre à première vue ...

    Essayes un var_dump de $_POST['suprimer'] pour ce qu'il y a dedant

  3. #3
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    Salut,
    que donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var_dump($_SESSION['MM_Username']);
    var_dump($row_Recordset['createur'])
     
    if (!empty($_POST['suprimer']) &&  ($_SESSION['MM_Username'] == $row_Recordset['createur'])) {
    ...
    D'autre part ton code peut être factorisé et ça enlève un test inutile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (!empty($_POST['suprimer']) {
    if($_SESSION['MM_Username'] == $row_Recordset['createur']) {
    }
    else {
    }
    }

    Idem, je vois pas trop ce que tu fais ici, ça fait double emploi avec ton autre test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $colname = "-1";
    if (isset($_SESSION['MM_Username'])) {
      $colname = $_SESSION['MM_Username'];
    }
     
    $row_Recordset['createur'] = $colname
    Si je comprends bien quand isset($_SESSION['MM_Username']) alors l'utilisateur est authentifié ?

    Enfin, t'as un gros trou de sécurité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $cle = '1\' OR id != \'0';
    $Requete = "UPDATE forum_mp_titre SET createur_delete = '1' WHERE id = '$cle' ";
    http://www.php.net/manual/fr/mysqli....ape-string.php

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Argentine

    Informations forums :
    Inscription : Janvier 2012
    Messages : 61
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par Fench Voir le message
    Bonjour,

    Essayes un var_dump de $_POST['suprimer'] pour ce qu'il y a dedant
    array(1) { [0]=> string(2) "29" }


    Citation Envoyé par Djakisback Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php var_dump($_SESSION['MM_Username']);
    var_dump($row_Recordset['createur'])  ?>
    ça donne :

    string(4) "tata" (c'est le membre connecté)
    string(4) "toto" (c'est le nom du membres qui a poster le message)

    Citation Envoyé par Djakisback Voir le message
    Si je comprends bien quand isset($_SESSION['MM_Username']) alors l'utilisateur est authentifié ?
    Exactement


    En se qui concerne la sécurité je le fait en dernier après être sur que le code fonctionne

  5. #5
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Je ne pense pas que le problème vient des deux variables:
    ($_SESSION['MM_Username'] == $row_Recordset['createur']))Par contre ton $_POST est spécial, c'est quoi cette valeur ? Comment est initialisé ce champ ?

  6. #6
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    Citation Envoyé par Fench Voir le message
    Je ne pense pas que le problème vient des deux variables:
    ($_SESSION['MM_Username'] == $row_Recordset['createur']))
    En fait j'ai l'impression que si car le !empty($_POST['suprimer']) est dans les 2 branches du test, a priori il ne reste donc que le test sur les 2 variables pour les différencier. Le $_POST['supprimer'] doit contenir les checkbox cochées dans un tableau.

    Par contre, si les var_dump() te sortent 'tata' et 'toto' bin ton test fonctionne vu qu'elle ne sont pas égales
    Peut-être que le problème vient de $row_Recordset['createur'] qui n'est jamais mis à la bonne valeur.

    Tu devrais expliciter ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    $colname = "-1";
    if (isset($_SESSION['MM_Username'])) {
      $colname = $_SESSION['MM_Username'];
    }
     
    $row_Recordset['createur'] = $colname
     
    ?>
    $colname devrait venir de la BDD plutôt non ? Il manque des bouts de code pour cerner le problème. D'autre part, il me semble que tu pourrais finalement faire ton test directement en SQL et renforcer la sécu de ta requête en ajoutant le créateur directement dedans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $Requete = "UPDATE forum_mp_titre SET createur_delete = '1' WHERE id = '$cle' AND createur = '$_SESSION['MM_Username']'";
    if(mysql_query($Requete, $onestream)) {
    echo 'ok';
    }
    else {
    die('erreur');
    }

  7. #7
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Par contre, si les var_dump() te sortent 'tata' et 'toto' bin ton test fonctionne vu qu'elle ne sont pas égales
    ET

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    En fait j'ai l'impression que si car le !empty($_POST['suprimer']) est dans les 2 branches du test, a priori il ne reste donc que le test sur les 2 variables pour les différencier. Le $_POST['supprimer'] doit contenir les checkbox cochées dans un tableau.
    Dans la logique même tu as raison, je pense en avoir plus du code pour mieux comprendre son problème.
    Code: c'est à dire les parties qui initialisent les 3 membres.

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Argentine

    Informations forums :
    Inscription : Janvier 2012
    Messages : 61
    Points : 42
    Points
    42
    Par défaut
    Oui exactement je crois que le problème viens de la variable $row_Recordset['createur'] disant que le membres Toto a 3 discussion : par qui s'affiche par l'ordre suivant :

    Createur | receveur

    1-Tata => Toto

    2-Tata => Toto

    3-Toto=> Tata


    Bon le code réagis comme ça :

    if
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <?php $_SESSION['MM_Username'] == $row_Recordset['createur'] ?>
    ce qui donne est le membres connecter est Toto :

    Toto = Tata , la le membres et dans l'impossibilité de supprimer aucun message même ceux qui a créer lui même , par contre si le membres connecté est Tata


    Createur | receveur

    1-Tata => Toto

    2-Tata => Toto

    3-Toto=> Tata


    la le membres pourrait supprimer même les message qui n'a pas créer , il est dans la possibilité de supprimer tout les message de sa boite ce que je veux pas qu'il puissent faire :/



    ----------------------------------------------------------------------------------

    Bon je vous donne plus d'explication et code :

    Un membres Tata est connecter il va dans la boite de reception :

    je fait la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    $colname_Recordset = "-1";
    if (isset($_SESSION['MM_Username'])) {
      $colname_Recordset = $_SESSION['MM_Username'];
    }
    mysql_select_db($database_onestream, $onestream);
    $query_Recordset = sprintf("SELECT * FROM forum_mp WHERE (  forum_mp_titre.receveur = %s  OR  createur = %s  ) AND forum_mp_titre.createur_delete = '0' ORDER BY forum_mp_titre.id DESC", GetSQLValueString($colname_Recordset, "text"),GetSQLValueString($colname_Recordset, "text"));
    $Recordset = mysql_query($query_Recordset, $onestream) or die(mysql_error());
    $row_Recordset = mysql_fetch_assoc($Recordset);
    $totalRows_Recordset = mysql_num_rows($Recordset);
    ?>
    Bon si le receveur ou l’expéditeur = le membres connecter j'affiche les messages

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Argentine

    Informations forums :
    Inscription : Janvier 2012
    Messages : 61
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par Fench Voir le message
    Je ne pense pas que le problème vient des deux variables:
    ($_SESSION['MM_Username'] == $row_Recordset['createur']))Par contre ton $_POST est spécial, c'est quoi cette valeur ? Comment est initialisé ce champ ?
    Non je ne crois pas que le problème viendrais de la car si je fait une simple requête sans condition le message voulu se met a jour

  10. #10
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Ah oui mais j'avais pas du tout saisi que la variable est un tableau par lui même. Dans ce cas oui, c'est cette comparaison qui est pas bonne car il compare que sur le premier élément (voir le test).

    alors c un var_dump de $row_Recordset qu'il faudrait faire pour voir la structure et utiliser la bonne comparaison.

  11. #11
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Argentine

    Informations forums :
    Inscription : Janvier 2012
    Messages : 61
    Points : 42
    Points
    42
    Par défaut
    oui voila le le var_dump

    array(5) { ["id"]=> string(2) "33" ["id_titre"]=> string(9) "premier test" ["createur"]=> string(4) "Toto" ["receveur"]=> string(4) "Tata" ["createur_delete"]=> string(1) "0" }
    a votre avis qu'elle est la meilleur comparaison a faire ?

  12. #12
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Argentine

    Informations forums :
    Inscription : Janvier 2012
    Messages : 61
    Points : 42
    Points
    42
    Par défaut
    Personne n'a la solution a mon problème ?

  13. #13
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bon alors en enlevant la partie !empty($_POST['suprimer']) qui sert à rien de le mettre dans les deux tests mais juste en premier test avant de continuer (voir remarque), tu peux essayer avec strcmp car effectivement vus les var_dump la comparaison est possible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if ( (!empty($_POST['suprimer']) ){
         // La comparaison avec strcmp() des deux termes
    }
    strcmp ou === et !==

Discussions similaires

  1. [eCommerce] Variable checkbox-> boucle ->requête sql
    Par kiki57 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 19/03/2013, 15h04
  2. Requête SQL avec CheckBox vb.net
    Par pierrot53 dans le forum VB.NET
    Réponses: 13
    Dernier message: 30/03/2008, 19h24
  3. [AJAX] Exécuter une requête SQL des la checkbox cochée
    Par dje064 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 31/05/2007, 11h25
  4. [PHP-JS] checkbox et requête SQL
    Par Juliian dans le forum Langage
    Réponses: 3
    Dernier message: 23/12/2006, 11h22
  5. [SQL] Problème résultat checkbox dans requête SQL
    Par Skeud007 dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 02/07/2006, 15h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo