Effacer ligne base de données

WRInaute discret
Bonjour,

Je préviens que je suis un autodidacte (encore niveau débuttant) en php.

Voici mon problème j'ai créé un petit script php avec un formulaire pour pouvoir mettre en ligne des actualités.

Il marche très bien. Or, pour l'instant dès que l'événement est passé je me connecte à la base de données et je l'efface manuellement. Mais ce n'est pas très pratique. Je pensais donc créer un petit formulaire où écrire l'id de l"actualité à effacer.

Voici mes problème :

le petit script pour effacer, pourtant banale ne marche pas du tout :

Code:
<?php
define('CONF_ONLY', true);
include("./config.php");
mysql_connect($dbhost , $dbuser , $dbpasswd);
mysql_select_db($dbname);
$sql = 'DELETE * FROM `t_mus` WHERE `idann` ='$id' ;';
$result = mysql_query($sql);   
if($result)
{
echo("La suppression à été correctement effectuée") ;
}
else
{
echo("La suppression à échouée") ;
}

     mysql_close();
?>

Il se connecte bien à la base de données mais :

- il n'efface rien du tout. Si je remplace '$id' par l'id de l'actu à supprimer rien ne se passe. Et pourtant le même script avec select affiche les infos de cette table.

- deuxième gros problème. Si j'arrive à faire marche cette instruction, je ne sais pas comment relier ce script à un formulaire pour que je lui donne l'id à supprimer.

Si vous avez des suggestions, je vous en remercie par avance.
 
WRInaute impliqué
Ton problème est le SQL à priori, pas le PHP.

Un DELETE en SQL supprime forcément toute une "ligne", donc il ne faut pas spécifier les champs à supprimer.
La syntaxe est donc : DELETE FROM table WHERE condition;
 
WRInaute discret
Bonjour,

t_mus est la table, je n'ai justement pas spécifié le champs.

J'ai donc élimine le *

$sql = 'DELETE FROM `t_mus` WHERE `idann` =$id;';

Mais cela ne marche pas :(
 
WRInaute passionné
As-tu un message d'erreur ?
As-tu essayé de tester la requête dans l'administration de la base de données ?
 
WRInaute accro
Toujours essayer sa requête dans un simple client sql avant toute intégration au code, et ceci pour n'importe quel langage. ex: l'onglet sql de phpmyadmin
 
WRInaute impliqué
* signifie tous les champs en SQL. Donc tu avais bien spécifié "tous les champs".

Ensuite, une erreur PHP : '$id'
La concaténation se fait avec des points : '.$id.'
 
WRInaute discret
il te suffit de faire echo $sql en php pour voir ton erreur
Merci,

Mais rien ne s'affiche. Voilà tout le code dans post.php:

Code:
<?php
include("/config.php");

// Insertion dans la base
$id = $_GET["idann"];     
mysql_connect($dbhost , $dbuser , $dbpasswd);
mysql_select_db($dbname);

$sql = 'DELETE FROM `t_mus` WHERE `idann` =$id LIMIT 1;';
$result = mysql_query($sql);   
if($result)
{
echo("La suppression à été correctement effectuée") ;
}
else
{
echo("La suppression à échouée") ;
}

 mysql_close();
?>

Il ne reconnait pas idann, car si je remplace le bon chiffre
ça marche.

L'idann est fourni par un formulaire :

Code:
<form name="f2" onSubmit="return check2()"  METHOD="POST" ACTION="form.php">
<table border=0 cellpadding=3 width="549" align="center" cellspacing="0" bgcolor="#e8e8e8">
<tr>
<td width="144"><span style="font-size: 10pt;"><font face="Arial"><b>ID</b> :</td>
<td width="387"> 
<input type="text" name="idann" value="" size=30>
</td>
</tr>
<tr> 
<td width="144"> 
<input type="reset" name="reset" value="Effacer">
</td>
<td align=RIGHT width="387"> 
<input type="submit" name="  O K  " value="  OK !  ">
</td>
</tr>
</table>
</form>


Peut-être que le problème est là.

Est-ce la fonction $_get qui récupère l'information ?

Merci encore.
 
WRInaute accro
>> $sql = 'DELETE FROM `t_mus` WHERE `idann` =$id LIMIT 1;';

apres ca tu met : echo $sql;

et tu aura ta requete telle qu'elle est éxécutée (et tu verras que $id est à la palce de sa valeur)
 
WRInaute discret
Tu vas la mettre ta requete dans phpmyadmin ou pas ? lol

Oui, je l'ai fait et donc ce n'est pas un problème de requête :

As-tu essayé de tester la requête dans l'administration de la base de données ?


DELETE FROM `t_mus` WHERE `idann` =6

comme ça, ça marche...
.


$sql = 'DELETE FROM `t_mus` WHERE `idann` =$id LIMIT 1;';

apres ca tu met : echo $sql;

DELETE FROM `t_mus` WHERE `idann` =$id LIMIT 1;La suppression à échouée :(

$id = $_GET["idann"];
PAR
$id = $_POST["idann"];

très bonne suggestion car si je mets echo $id apparait le bon chiffre donc on est sur la bonne voie et je me demande pourquoi quand il se trouve après idann= il n'est pas remplacé :x
 
Nouveau WRInaute
Euh... à prioris les simple/double quotes ne changent rien. Ce n'était pas plutôt le ; en trop juste après le LIMIT 1?

Code:
$sql = 'DELETE FROM `t_mus` WHERE `idann` =$id LIMIT 1;';
 
WRInaute accro
Si on met un LIMIT 1 , il serait pas plus judicieux de mettre aussi un ORDER by pour être sure que le premier supprimé soit bien celui désiré ?
 
WRInaute accro
>> Euh... à prioris les simple/double quotes ne changent rien

ca change tout pourtant

$id=1

echo "$id"; -> 1
echo '$id'; -> $id
 
WRInaute discret
Si on met un LIMIT 1 , il serait pas plus judicieux de mettre aussi un ORDER by pour être sure que le premier supprimé soit bien celui désiré ?

Une bonne idée. Même si dans la même page où se trouve le formulaire, avant celui-ci, je fais afficher toutes les actualités de la section avec leur "ID" bien en gras, histoire de ne pas faire de bêtises.
 
Discussions similaires
Haut