Supprimer une ligne via un formulaire

Supprimer une ligne via un formulaire - PHP - Programmation

Marsh Posté le 16-06-2009 à 16:55:12    

Bonjour,
 
Je suis en train de faire un scrypt php qui permet de lister mes utilisateurs via une liste déroulante qui se met à jour automatiquement. Et ce que j'aimerai arriver à faire c'est lorsque je sélectionne un utilisateur, je puisse le supprimer via un boutton.
 

<h3>Supprimer un utilisateur</h3>
<form action="admin.php?m=supprimer_util" method="POST">
<p>Sélectionnez un professeur à supprimer</p>
    <select name="liste">
        <?php
        mysql_connect('localhost','root','');
        mysql_select_db('logiciel');  
         
        $sql = "SELECT id_util,nom_util, prenom_util FROM utilisateur";
        $res = mysql_query($sql);
        while($row = mysql_fetch_array($res))
            {
            echo "<option value=$row[id_util]>$row[nom_util] $row[prenom_util]</option>";
            }
        ?>
    </select>
<input type="submit" value="Supprimer" name="supprimer"/>  
</form>
<?php
if(isset($_POST))
    {
    $rep = $_POST['liste'];
    mysql_query("DELETE * FROM utilisateur WHERE id_utilisateur = ".$rep."";);
    }
else
    {
    echo 'Erreur';
    }
?>


Pour l'instant j'ai fais ça pour voir un peu mais ça ne marche pas. Je sais que ça doit venir de mon if mais je vois pas comment réparer mon erreur.
 
ps: Je précise que je débute en php alors soyez indulgent  [:tinostar]  
 
Merci pour votre aide  ;)


Message édité par Profil supprimé le 17-06-2009 à 09:59:27
Reply

Marsh Posté le 16-06-2009 à 16:55:12   

Reply

Marsh Posté le 16-06-2009 à 16:59:49    

Manque des guillemets autour de la valeur de tes options :o (et $_POST existe de toute façon, donc tu ferais mieux de tester directement si $_POST['liste'] existe).

 

Ensuite si tu veux bel et bien supprimer l'entrée de ta base mysql, il faudrait faire un

Code :
  1. mysql_query("DELETE * FROM utilisateur WHERE id_utilisateur='$rep'" );

Message cité 1 fois
Message édité par Yagmoth le 16-06-2009 à 17:03:42

---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !
Reply

Marsh Posté le 16-06-2009 à 17:01:57    

Ah tiens ça me fait penser à une chose. Quelle est la différence entre isset($_POST) et isset($_POST['liste'])
Isset vérifie si la variable existe bien vrai ? Donc autant mettre isset($_POST) qui vérifie l'ensemble des variables passant par POST non ?  [:cupra]

Reply

Marsh Posté le 16-06-2009 à 17:04:33    

 

Non ça va juste vérifier que le tableau $_POST existe... or il existe toujours, qu'il soit vide ou non :D


Message édité par Yagmoth le 16-06-2009 à 17:07:20

---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !
Reply

Marsh Posté le 16-06-2009 à 17:13:49    

J'arrive pas à placer correctement mes guillemets. A chaque fois j'ai un parse error  :sweat:

Reply

Marsh Posté le 16-06-2009 à 17:21:44    

Ton code et la ligne d'erreur ? :o (effectivement il manque des guillemets simple lors de l'affichage des options...)


Message édité par Yagmoth le 16-06-2009 à 17:22:41

---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !
Reply

Marsh Posté le 16-06-2009 à 17:23:58    

Ligne 13:
 

echo "<option value=$row[id_util]>$row[nom_util] $row[prenom_util]</option>";


Mais là dedans je vois pas trop où placer mes guillemets parce que à chaque fois ça me et un parse error à cette ligne  :??:
 
edit: guillemet ou quote ?


Message édité par Profil supprimé le 16-06-2009 à 17:24:18
Reply

Marsh Posté le 16-06-2009 à 17:30:51    

Essaie ça :

 
Citation :

echo "<option value=\"$row['id_util']\">$row['nom_util'] $row['prenom_util']</option>";

 

En fait autour du "value" de l'option, il faut mettre des guillemets double, sans quoi si ton nom comprend un espace, ça va devenir ininterprétable (et puis de toute façon ce ne serait pas W3C compliant). De même, il faut mettre des guillemets simple pour récupérer la valeur correspondant à la clef d'un tableau (comme tu l'avais fait pour $_POST['liste']).


Message édité par Yagmoth le 16-06-2009 à 17:33:47

---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !
Reply

Marsh Posté le 16-06-2009 à 18:13:50    

Yagmoth a écrit :

Manque des guillemets autour de la valeur de tes options :o (et $_POST existe de toute façon, donc tu ferais mieux de tester directement si $_POST['liste'] existe).
 
Ensuite si tu veux bel et bien supprimer l'entrée de ta base mysql, il faudrait faire un

Code :
  1. mysql_query("DELETE * FROM utilisateur WHERE id_utilisateur='$rep'" );



pas de "*" pour delete (anéfé, mysql supprime la ligne de toute façon). Donc :

Code :
  1. DELETE FROM utilisateur WHERE id_utilisateur = '$rep'


Reply

Marsh Posté le 16-06-2009 à 18:35:05    

Je test ça demain et je vous tiendrai au courant  :jap:
 
Au lycée on nous faisait toujours écrire le * dans nos requête à la main  :sweat: ²


Message édité par Profil supprimé le 16-06-2009 à 18:38:48
Reply

Marsh Posté le 16-06-2009 à 18:35:05   

Reply

Marsh Posté le 16-06-2009 à 18:42:47    

un * dans un delete [:mlc2]


Message édité par Profil supprimé le 16-06-2009 à 18:42:54
Reply

Marsh Posté le 16-06-2009 à 18:49:32    

Ben ouais, pour dire de tout sélectionner pour détruire  :sweat:

Reply

Marsh Posté le 16-06-2009 à 19:10:43    


 
Mea culpa  :jap: Je ne l'avais pas mis au départ, puis j'ai édité... en regardant un forum où il y avait une ânerie.


---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !
Reply

Marsh Posté le 17-06-2009 à 08:41:34    

J'ai toujours un parse error pour ma ligne 13
 

echo "<option value="$row['id_util']">$row['nom_util'] $row['prenom_util']</option>";


J'vais trifouiller un peu histoire de voir d'où ça vient  :D

Message cité 1 fois
Message édité par Profil supprimé le 17-06-2009 à 09:03:44
Reply

Marsh Posté le 17-06-2009 à 08:55:42    

T'as essayé la solution de Yagmoth ?
 

Citation :

echo "<option value=\"$row['id_util']\">$row['nom_util'] $row['prenom_util']</option>";

Reply

Marsh Posté le 17-06-2009 à 09:03:06    

Oui, c'est celle que j'avais testé d'ailleurs

Reply

Marsh Posté le 17-06-2009 à 09:23:10    

Essaye avec la concaténation alors :
 
echo "<option value=\"" . $row['id_util'] . "\">" . $row['nom_util'] . " " . $row['prenom_util'] . "</option>";

Reply

Marsh Posté le 17-06-2009 à 09:27:33    


Ca doit venir des quotes/doubles quotes  :D  
 
Solution qui devrait marcher :

Code :
  1. echo '<option value="'.$row['id_util'].'">'.$row['nom_util'].' '.$row['prenom_util'].'</option>';


En règle général, quand j'ai ce genre de problème :
- Je procède par concaténation plutôt qu'avec des guillemets - même si ça fait perdre un peu de perf'
- Je décompose en plusieurs lignes.
 
[Edit]Grilled  :cry:


Message édité par macgawel le 17-06-2009 à 09:28:41
Reply

Marsh Posté le 17-06-2009 à 09:55:52    

héhé merci plus de parse error maintenant  :D  
 
Par contre toujours impossible de supprimer l'utilisateur sélectionné  :(

Reply

Marsh Posté le 17-06-2009 à 09:56:04    


 
Heu t'avais bien placé les backslashs devant les " entourant la valeur de ton option ? Parce que ce n'est pas le cas dans le quote que tu fais juste au dessus...
 
laisse moi deviner... id_utilisateur != id_util ? :D
 

Code :
  1. mysql_query("SELECT * FROM utilisateur WHERE id_utilisateur = ".$rep."";);


 
>>
 

Code :
  1. mysql_query("DELETE FROM utilisateur WHERE id_util='$rep' " );



Message édité par Yagmoth le 17-06-2009 à 09:57:50

---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !
Reply

Marsh Posté le 17-06-2009 à 10:03:33    

Mais pourquoi j'avais mis un select moi ?  [:transparency]  
 
Non même en corrigeant avec le DELETE ça ne marche toujours pas, qu'es-ce donc ce délire ?  [:transparency] ²

Reply

Marsh Posté le 17-06-2009 à 10:05:28    

Envoie ton code actuel en entier :o


---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !
Reply

Marsh Posté le 17-06-2009 à 10:09:55    

Tu l'aurau voulu :o
 

<h3>Supprimer un utilisateur</h3>
<form action="admin.php?m=supprimer_util" method="POST">
<p>Sélectionnez un professeur à supprimer</p>
    <select name="liste">
        <?php
        mysql_connect('localhost','root','');
        mysql_select_db('logiciel');  
         
        $sql = "SELECT id_util,nom_util, prenom_util FROM utilisateur";
        $res = mysql_query($sql);
        while($row = mysql_fetch_array($res))
            {
            echo '<option value="'.$row['id_util'].'">'.$row['nom_util'].' '.$row['prenom_util'].'</option>';    
            }
        ?>
    </select>
<input type="submit" value="Supprimer" name="supprimer"/>  
</form>
<?php
if(isset($_POST['liste']))
    {
    $rep = $_POST['liste'];
    echo 'coucou les gens HFR';
    mysql_query("DELETE FROM utilisateur WHERE id_utili = '$rep'" );
    }
else
    {
    echo 'Erreur';
    }
?>


Tu l'as eu  :o ²
 
A noté que le message "Coucou les gens HFR" s'affiche bien. Donc c'est ma requête qui doit merder en toute logique, pourtant c'est un truc tout simple sans FK ni rien alors je vois pas où est le pb  :??:

Reply

Marsh Posté le 17-06-2009 à 10:12:15    

un 'i' en trop dans ta requête :o Id_util, pas id_utili, faut taper avec un doigt :o


Message édité par Yagmoth le 17-06-2009 à 10:13:04

---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !
Reply

Marsh Posté le 17-06-2009 à 10:13:37    

Code :
  1. if(isset($_POST['liste']))
  2.    {
  3.    $rep = $_POST['liste'];
  4.    echo 'coucou les gens HFR';
  5. /* Debug */
  6.    $requete = "DELETE FROM utilisateur WHERE id_utili = '$rep'";
  7.    echo $requete;
  8.    mysql_query($requete) or die (mysql_error());
  9. /* Fin Debug */
  10.    }
  11. else
  12.    {
  13.    echo 'Erreur';
  14.    }
  15. ?>


Reply

Marsh Posté le 17-06-2009 à 10:14:47    

La honte quoi  [:mister yoda]  
 
ça marche bien ce coup ci  :D  Merci à tous pour le coup de main et vite vite on part du topic où je vais finir dans les plus belles hontes  :D ²

Reply

Marsh Posté le 17-06-2009 à 12:50:26    


Non, dans ce cas c'est :

Code :
  1. DELETE FROM ma_table
  2. # ou (je crois) :
  3. TRUNCATE TABLE `ma_table`

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed