Supprimer une ligne dans la BDD

Répondre
Arthezius
le 29/11/2008 à 17:02
Arthezius
Bonjour, en fait j'arrive pas a supprimer une ligne dans ma base de donnée.
Enfin je sais le faire mais j'ai un code assez complexe et avec lequel je n'arrive pas a me dépatouiller.

Voici l'extrait du code qui nous interesse:
<?php
if (isset($_POST['suppr']) && $_POST['suppr'] == 'Supprimer')
{$mysql_id = mysql_connect('***', '***', '***');
mysql_select_db('***', $mysql_id) or die(mysql_error());

$sql = 'DELETE INTO blog_categories WHERE id='.$data['id'].'';
if(mysql_query($sql)){$notif='<p class="admin"><strong>Effacement effectué.</strong></p>';}
else{die('Echec. Erreur SQL !'.$sql.'<br />'.mysql_error());}
}
?>

[...]
<?php
$mysql_id = mysql_connect('***', '***', '***');
mysql_select_db('darkent', $mysql_id) or die(mysql_error());
$sql = 'SELECT * FROM blog_categories ORDER BY categorie ASC';
$list = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

/*if($list == ''){echo '<p class="cat"><em>Aucune catégorie</em></p>';}*/
echo'<form method="post" action="categories_art.php">';
while ($data = mysql_fetch_array($list))
{echo'<p class="cat"><input type="checkbox" name="cat_'.$data['id'].'" /> '.$data['categorie'].'</p>';}
echo'<p class="admin"><input type="submit" name="suppr" value="Supprimer" /></p></form>';?>

Bien sur il n'y a pas que ça et si vous voulez je vous met le code complet, mais c'est avec cette partie que j'ai le problème.
Il m'affiche le message suivant:
Echec. Erreur SQL !DELETE INTO blog_categories WHERE id=
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INTO blog_categories WHERE id=' at line 1

J'ai l'impression qu'il n'arrive pas à récupérer le nom de la ligne que je voudrai supprimer.
Arthezius
LA GLOBULE
le 29/11/2008 à 19:40
LA GLOBULE
Alors, plusieurs choses à dire :)

1) es tu sur que $data['id'] dans la page ou tu lances ton DELETE ? Je n'en suis pas sur, je ne vois pas la déclaration de $data
2) Quand tu places des variables PHP dans tes requetes SQL, il faut protéger ces variables afin de pas risquer d'injection SQL. Pour cela, tu peux utiliser la fonction mysql_escape_string
3) Quand tu copies colles ton code sur le wall, penses à ne pas copier coller tes login / mot de passe MySQL :)
Arthezius
le 29/11/2008 à 19:56
Arthezius
1) Le $data['id'] est en fait déclaré à l'affichage complet de la page. Autrement dans le formulaire, avant d'envoyer la requète pour la suppression de la ligne. Pour être plus précis, un while me permet d'afficher tout les lignes. A chaque affichage, j'affiche un checkbox pour sélectionner une ligne et j'utilise la variable $data['id'] dans le name pour les différencier.
Toutefois je voudrai le réutiliser pour supprimer la ligne.
http://www.lephpfacile.com/wall/wall-1654.php

2)Je n'en suis qu'a la première version de mon code. La partie sécurisation viendra ensuite. Je ne me suis pas encore penché sur la question. Merci toutefois pour le conseil.

3) Mes identifiants ne son utilisé qu'en local. Ceux utilisé en distant son totalement différent. Donc aucun souci a ce niveau.

Merci pour ton aide en tout cas.
Arthezius
LA GLOBULE
le 30/11/2008 à 00:38
LA GLOBULE
1) Oui, $data['id'] existe dans la page ou tu affiches les checkbox, mais pas dans la page qui fait la suppression SQL.
Dans cette page, tu dois récupérer les checkbox cochées dans ton tableau $_POST. D'ailleurs, afin de faciliter la récupération de la liste des checkbox cochées, je te conseille d'utiliser un tableau pour le name de tes checkbox.

Ex :

<input type="checbox" name="liste[]" value="<?php echo htmlentities($data['id']); ?>" />


Tu récupéreras les checkboxs cochées dans le tableau $_POST['liste'].

2) Cela devrait être un automatisme :)
Arthezius
le 30/11/2008 à 01:56
Arthezius
En fait je me suis visiblement mal exprimé dans mes précédement messages ou j'ai oublié d'en faire la précision.
Il s'agissait en fait d'une seule et même page d'ou j'avais extrait les deux morceau de code.
Toutefois, il y avais bien une erreur dans mon code. Une erreur toute bête en fait.
J'avais mis:
while ($data = mysql_fetch_array($list)) 
{echo'<p class="cat"><input type="checkbox" name="cat_'.$data['id'].'" /> '.$data['categorie'].'</p>';}
echo'<p class="admin"><input type="submit" name="suppr" value="Supprimer" /></p></form>';?>

Au lieu de:
while ($data = mysql_fetch_array($list))
{echo'<p class="cat"><input type="checkbox" name="cat" value="'.$data['id'].'" /> '.$data['nom_cat'].'</p>';}
echo'<p class="admin"><input type="submit" name="suppr" value="Supprimer" /></p></form>';?>

Le problème étant au niveau du name="" dans le checkbox ou j'avais oublié de value=""

En tout cas, je vais maintenant me renseigner sur le htmlentities().
Merci pour cette suggestion.
Arthezius
Arthezius
le 30/11/2008 à 01:58
Arthezius
Je vais aussi me renseigner sur le mysql_escape_string dont tu me parlais.

Merci encore.
Arthezius
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours