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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    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
    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 confirmé
    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
    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

  4. #4
    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
    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 ?

  5. #5
    Membre Expert 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
    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');
    }

  6. #6
    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
    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.

  7. #7
    Membre confirmé
    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
    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

  8. #8
    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
    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.

  9. #9
    Membre Expert 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
    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

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