Problème maj BDD php

Bonjour à vous tous

Voila, je réalise un panneau d’administration de site en php mais je rencontre un problème. Ici le problème est que je souhaite supprimer un compte utilisateur mais lorsque je clique sur le bouton suppression rien ne se passe:(
Je précise que mes connaissances en php sont limités ^^

Voici donc mon code:


<?php 
// on se connecte à MySQL 
$base = mysql_connect ('chaine de connexion')
mysql_select_db ('selection BDD');

//partie de l'affichage de compte

// on crée la requête SQL 
$sql = 'SELECT * FROM membre'; 

// on envoie la requête 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 

// on fait une boucle qui va faire un tour pour chaque enregistrement 
while($data = mysql_fetch_assoc($req)) 
    { 
    // on affiche les informations de l'enregistrement en cours 
    echo '<b>'.$data['id'].' '.$data['login'].'</b> <input type="button" name="supprimer" id="supprimer" value="Supprimer"/><br />'; 
    } 

 
//partie de suppression de compte
 
   If (isset($POST['supprimer']))
  	{

		
// recuperation des valeurs
$compte=mysql_real_escape_string($POST['id']);

// on crée la requête de suppression SQL 
mysql_query ("DELETE FROM membre WHERE id = '".$compte."' "); 

    // on affiche la confirmation de la suppression 

echo "Page mise &agrave; jour";

	}

// on ferme la connexion à mysql 
mysql_close(); 
?>

<?php

if (isset($erreur)) echo '<br />',$erreur;  
?>

J’espére que quelqu’un sera m’aider car cela fait une semaine que je passe à chercher le problème. Je n’ai pas de message d’erreur de la part de php…
MErci:)
Edité le 04/02/2009 à 09:40

Dans le genre le code qui fait la suppression est fait après le code qui fait l’affichage? En gros ton compte est supprimé, mais ton affichage est décalé d’un temps avant la suppression… Inverse les lignes, et ça devrait être bon, non?

Merci Sans-Nom mais j’ai donc inversé les lignes mais toujours pareil, rien ne se supprime…

Sinon, ton réel problème c’est que tu ne définis nul part l’identifiant ($_POST[‘id’]) à supprimer. C’est pas le tout d’avoir un bouton supprimer, mais sans le formulaire t’aura rien :wink: (formulaire ou autre, tu peux faire un seul bouton supprimer, et des cases à cocher)

Merci Sans-Nom.
J’ai bien mis un formulaire mais je ne vois donc pas où est le problème… Le formulaire doit bien être déclaré avant le code php?
Si jamais tu as une idée du code a modifié…

J’ai un peu de mal avec le php^^
Edité le 03/02/2009 à 09:32

Genre avant le select:

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

A la fin :

<input type="submit" value="Supprimer l'utilisateur" /></form>

Et au niveau de l’affichage des utilisateurs :

while($data = mysql_fetch_assoc($req))  { ?>
<input type="radio" name="id" value="<?php echo $data['id']; ?> <?php echo $data['login']; ?><br /><?php
} 

MErci encore Sans-Nom.

Le problème est que désormais plus rien ne s’affiche dans ma page, je n’ai que le bouton radio qui s’affiche…
Voici le code que j’ai à présent:


<?php 
// on se connecte à MySQL 
  $base = mysql_connect (chaine connexion);
  mysql_select_db (base);

?>

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

<?php 
// on crée la requête SQL 
  $sql = 'SELECT * FROM membre'; 

// on envoie la requête 
  $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 

// on fait une boucle qui va faire un tour pour chaque enregistrement 

  while($data = mysql_fetch_assoc($req)) {
?>
  
<input type="radio" name="id" value="<?php echo $data['id']; ?> <?php echo $data['login']; ?><br />

<?php
  } 
?>

  <input type="submit" value="Supprimer l'utilisateur" />
</form>

<? 
//partie de suppression de compte
 
   If (isset($POST['supprimer']))
 	{

// recuperation des valeurs
  $compte=mysql_real_escape_string($POST['id']);

// on crée la requête de suppression SQL 
  mysql_query ("DELETE FROM membre WHERE id = '".$compte."' "); 

 // on affiche la confirmation de la suppression 

echo "Page mise &agrave; jour";

	}

// on ferme la connexion à mysql 
mysql_close(); 
?>

<?php

if (isset($erreur)) echo '<br />',$erreur; 
?>

Honnêtement, tu crois vraiment, mais vraiment qu’il faut supprimer le compte après l’avoir affiché?

De plus,

if (isset($POST['supprimer']))

Devient

if (isset($_POST['id']))

(au passage, c’est $_POST pas $POST)

Et donc :

$compte=intval($_POST['id']);

Inutile de protéger contre les chaines, suffit juste de transformer en entier. Note cependant que pour intval 3a <=> 3 ou alors 3a en hexa.

Tu peux aussi lire :

fr2.php.net…

Un très grand merci à toi!

Il reste cependant un dernier problème, il faut que je fasse 2x la suppression. Quand je sélectionne un premier compte et que je clique sur supprimer le compte n’est pas supprimer et si je le fais une seconde fois cela fonctionne.

En tout cas tu m’as beaucoup aidé:):slight_smile:

bug résolu :wink:
Merci beaucoup :slight_smile:

Comme je te l’ai dis, il ne faut pas inverser l’ordre de la suppression et de l’affichage :wink:

:wink: oui tu avais raison :slight_smile:

encore MErci :clap:

me revoici, j’ai une nouvelle question sur le même sujet.

Voilà, j’ai un code pour mettre à jour le mot de passe de l’utilisateur contenu dans une base de données en php.

Voici le code:


  <input type="submit" name="valider" value="Valider" style="width:150px" />
<?php

// on teste si le visiteur a soumis le formulaire  
if (isset($_POST['valider']) && $_POST['valider'] == 'Valider') { 

   // on teste l'existence de nos variables. On teste également si elles ne sont pas vides 
   if ((isset($_POST['ancienpass']) && !empty($_POST['ancienpass'])) && (isset($_POST['nvo_pass']) && !empty($_POST['nvo_pass'])) && (isset($_POST['pass_confirm']) && !empty($_POST['pass_confirm']))) { 

      // on teste les deux mots de passe 
      if ($_POST['nvo_pass'] != $_POST['pass_confirm']) { 
         $erreur = '<font color="red"><b>Les 2 mots de passe sont diff&eacute;rents.</b></font>'; 
      } 
      else { 
       $base = mysql_connect ( chaine de conexion )
         
          if ($data[0] == 0) { 
            $sql = "UPDATE membre SET pass_md5= '".$data['nvo_pass']."' WHERE login='".$data['login']."'"; 
            mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error()); 
 
            session_start(); 
            $_SESSION['login'] = $_POST['login']; 
            header('Location: membre.php'); 
            exit(); 
         } 
         else { 
            $erreur = '<font color="red"><b>Un membre poss&egrave;de d&eacute;j&egrave; ce login.</b></font>'; 
         } 
      } 
   } 
   else { 
      $erreur = '<font color="red"><b>Au moins un des champs est vide.</b></font>'; 
   }  
}
 
?>

  </form>


J’espère vous pourrez m’aider comme précédemment :slight_smile: Merci par avance:)
Edité le 09/02/2009 à 09:10

Définitivement, non. Sauf si tu précises l’erreur…

oups j’ai oubliè d’indiquer l’erreur ^^ désolé

en fait, et bien quand je clique sur le bouton MAJ, rien ne change, la mise à jour ne s’effectue pas :frowning:

if ($data[0] == 0) { ?

Que vaut $data[0] ?

Sinon, d’usage, on ne vérifie jamais le contenu d’un bouton submit ($_POST[‘Valider’] == ‘Valider’]).

Merci Sans-Nom :slight_smile:

Alors maintenant, il me met l’erreur comme quoi un des champs et vide alors que ceux ci sont rempli…
Le code:


<form  method="post"action="maj_compte.php">
  <table">
  	<tr>
    <td>Entrez l'ancien mot de passe:</td>
    <td class="gauche"><input type="password" name="pass" style="width:150px" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"></td>
    </tr>
    <tr>
    <td>Entrez le nouveau mot de passe:</td>
    <td class="gauche"><input type="password" name="nvo_pass" style="width:150px" value="<?php if (isset($_POST['nvo_pass'])) echo htmlentities(trim($_POST['nvo_pass'])); ?>"></td>
    </tr>
    <tr>
    <td>Confirmez le nouveau mot de passe:</td>
    <td class="gauche"><input type="password" name="pass_confirm" style="width:150px" value="<?php if (isset($_POST['pass_confirm'])) echo htmlentities(trim($_POST['pass_confirm'])); ?>"></td>
    </tr>
  </table>

  <input type="submit" name="valider" value="Valider" style="width:150px" />

<?php
// on teste si le visiteur a soumis le formulaire  
if (isset($_POST['valider'])) { 

   // on teste l'existence de nos variables. On teste également si elles ne sont pas vides 
   if ((isset($_POST['ancienpass']) && !empty($_POST['ancienpass'])) && (isset($_POST['nvo_pass']) && !empty($_POST['nvo_pass'])) && (isset($_POST['pass_confirm']) && !empty($_POST['pass_confirm']))) { 

      // on teste les deux mots de passe 
      if ($_POST['nvo_pass'] != $_POST['pass_confirm']) { 
         $erreur = '<font color="red"><b>Les 2 mots de passe sont diff&eacute;rents.</b></font>'; 
      } 
      else { 
       $base = mysql_connect (chaine connexion);

            $sql = "UPDATE membre SET pass_md5= '".$data['nvo_pass']."' WHERE login='".$data['login']""; 
            mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error()); 
 
            session_start(); 
            $_SESSION['login'] = $_POST['login']; 
            header('Location: membre.php'); 
            exit(); 
        
      } 
   } 
   else { 
      $erreur = '<font color="red"><b>Au moins un des champs est vide.</b></font>'; 
   }  
}
 
?>


  </form>

Ton code ne marchera jamais car header + session_start() ne fonctionne que si aucune donnée n’a été envoyée (ie: pas de code HTML).

Pour ton basar, faut voir à dissocier la partie gestion de l’action et affichage.

Sinon empty($a) correspond grosso modo à : !isset($a) || $a, ie: inutile de faire un test en plus avec isset()

Comment faudrait il faire sans header + session_start() Je dois détruire la session?
Je ne vois pas trop comment faire :s, désolé je m’y connait peu en php :s

Hé bien faudrait faire ça, plus ou moins :

<?php session_start(); ... ton code ... ?> ...ton formulaire... Sachant que tu devrais utiliser des variables pour gérer les erreurs.