Bouton supprimer

Petit nouveau ! | 4 Messages

18 févr. 2013, 16:38

Salut all the world !
J'ai fait un système de contact basique sur mon site avec un panel d'admin TRES basique :
Image
Image

Le panel :
Image

La SQL :
Image

Le seul problème c'est que j'aimerais intégrer au panel d'admin un bouton supprimer. Qui supprime 1 message(ceui concerné). Il est apparent MAIS il ne marche pô. J'ai essayé pas mal de codes et je vous avoue que je ne comprends pas où est mon erreur. Donc bon j'ai tout effacé et je vous donné le code sans bug mais incomplet tel qu'il est actuellement :
<u>Support:</u><br />
<?php
try
{
    // On se connecte à MySQL
    $bdd = new PDO('mysql:host=[[HOTE]].net;dbname='[[DBNAME]]', '[[PSEUDO]]', '[[MDP]]');
}
catch(Exception $e)
{
    // En cas d'erreur, on affiche un message et on arrête tout
        die('Erreur : '.$e->getMessage());
}
 
// Si tout va bien, on peut continuer
 
// On récupère tout le contenu de la table contact
$reponse = $bdd->query('SELECT * FROM contact');
 
// On affiche chaque entrée une à une
while ($donnees = $reponse->fetch())
{
?>
    <p>
    <EM><?php echo $donnees['pseudo']; ?></EM>, dont l'ip est <EM><?php echo $donnees['ip']; ?></EM> et l'email est <EM><?php echo $donnees['email']; ?></EM> a post&#233; le <EM><?php echo $donnees['date']; ?></EM>
    &#224; <EM><?php echo $donnees['heure']; ?></EM> le message suivant : <br />
	<EM><?php echo $donnees['message']; ?></EM>
   <form name="form" method="post" action="">
        <input type="Submit" value="Supprimer" name="bouton">
</form></p>
<?php
}
 
$reponse->closeCursor(); // Termine le traitement de la requête
 
?>
Voilà, j'aimerais juste un p'tit coup d'main de la part d'un zentil môssieur pour pouvoir installer ce zouli bouton. T^T
Mârshi. :3

ViPHP
AB
ViPHP | 5818 Messages

18 févr. 2013, 18:11

Dans ton formulaire il faudrait mettre un input de type "hidden" et qui ait pour valeur l'id du message à supprimer.

Ensuite, en admettant que aies nommé cet input "id_suppr" le code php pour effacer le message ressemblerait à
if(isset($_POST['bouton'],$_POST['id_suppr']))
{
$id = intval($_POST['id_suppr']);// pour être certain de recevoir une valeur de bon type, on pourrait utiliser filter_input à la place

$sql = "DELETE FROM contact WHERE id = '".mysql_real_escape_string($id)."'";
//...
}
Je t'ai donné l'exemple avec l'ancienne syntaxe, à toi de l'adapter à pdo

Petit nouveau ! | 4 Messages

18 févr. 2013, 18:58

Merci beaucoup !! =D

J'ai essayé ceci :
<center><u>Support:</u></center><br />
<?php
try
{
    // On se connecte à MySQL
    $bdd = new PDO(--HOTE, NOM DE BASE, ID ET MDP--);
}
catch(Exception $e)
{
    // En cas d'erreur, on affiche un message et on arrête tout
        die('Erreur : '.$e->getMessage());
}
 
// Si tout va bien, on peut continuer
 
// On récupère tout le contenu de la table jeux_video
$reponse = $bdd->query('SELECT * FROM contact');
 
// On affiche chaque entrée une à une
while ($donnees = $reponse->fetch())
{
if(isset($_POST['bouton'],$_POST['id_suppr']))
{

$id = intval($_POST['id_suppr']);// pour être certain de recevoir une valeur de bon type, on pourrait utiliser filter_input à la place

$sql = "DELETE FROM contact WHERE id = '".mysql_real_escape_string($id)."'";
//...
}
?>

    <p>
    <EM><?php echo $donnees['pseudo']; ?></EM>, dont l'ip est <EM><?php echo $donnees['ip']; ?></EM> et l'email est <EM><?php echo $donnees['email']; ?></EM> a post&#233; le <EM><?php echo $donnees['date']; ?></EM>
    &#224; <EM><?php echo $donnees['heure']; ?></EM> le message suivant : <br />
	<EM><?php echo $donnees['message']; ?></EM>
   <form name="form" method="post" action="">
   <input type="hidden" value="$donnees['id']" name="id_suppr">
        <input type="Submit" value="Supprimer" name="bouton">
</form><p>-----------
<?php
}
 
$reponse->closeCursor(); // Termine le traitement de la requête
 
?>
Erreur :

Code : Tout sélectionner

Warning: mysql_real_escape_string(): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in /public_html/admin/index.php on line 50 Warning: mysql_real_escape_string(): A link to the server could not be established in /public_html/admin/index.php on line 50

Eléphant du PHP | 343 Messages

18 févr. 2013, 22:03

Utilise pas mysql_real_escape_string avec PDO
Développeur web

Petit nouveau ! | 4 Messages

18 févr. 2013, 22:08

Je met quoi alors ? =/

Eléphant du PHP | 343 Messages

18 févr. 2013, 22:14

Vu que tu passes un intval dessus, je dirais pas besoin mais dans le doute tu peux faire 1 prepare (ou 1 quote) ;)
Développeur web

Petit nouveau ! | 4 Messages

18 févr. 2013, 22:18

J'ai mit ça, désolé mais chuis totalement paumé. T___T
$id = intval($_POST['id_suppr']);// pour être certain de recevoir une valeur de bon type, on pourrait utiliser filter_input à la place

$sql = "DELETE FROM contact WHERE id = '($ip)'"; //...
}

ViPHP
AB
ViPHP | 5818 Messages

20 févr. 2013, 00:33

Il faut utiliser la fonction quote de pdo pour les requêtes non préparées. Si tu tapes "quote pdo" dans google tu auras les bonnes réponses. Dans ton cas :
$sql = "DELETE FROM contact WHERE id = ".$bdd->quote($id)."";
Mais il ne faut pas mettre ce code dans une boucle (pourquoi faire ?)