Bonjour à tous,

Je ne connais encore pas grand chose en javascript et ajax, en m'inspirant d'un des tutoriel Poster un formulaire en AJAX
j'ai voulu supprimer une entrée en AJAX...
Voyez vous mon erreur? a mon avis je renseigne mal le nom du formulaire dans le code ajax ?

code ajax dans le head:

<script type="text/javascript">
$(function() {
$("#form2").submit(function(){
        del = $(this).find("input[name=del]").val();
        $.post("delete.php",{del: del}, function(data) {});
    return false;
    });
});
</script>

code php:

<?php
include"connect.php";
$sql = 'SELECT * FROM base WHERE label= "graphisme" ORDER BY id DESC';
$q = mysql_query($sql);
echo '<form method="post" action="#" id="form2" >';
while($donnees = mysql_fetch_array($q)) {
echo $donnees'titre']." : ". $donnees'texte'];
echo '<input type="submit" name="del'.$donnees'id'].']" value="supprimer" /> <br />';
}
echo '</form>';
?>

code de la page delete.php

<?php
include"connect.php";
extract ($_POST);
if(isset($_POST'del']))
foreach($_POST'del'] as $key => $value)
{
mysql_query ('DELETE FROM base WHERE id = '.(int)$key);
}
?>

Merci d'avance

16 réponses


djtec
Réponse acceptée

Pour supprimer le li fait $(this).parent().remove(); et je comprends pas trop ou est placé ta div car quand ton code que tu nous donne y a pas de div

adrienanorm
Auteur
Réponse acceptée

okkkkk merci parfait j'ai de quoi m'mamuser un peu!
(j'avais rajouté la div après coup autour du li mais sa ne fonctionnais pas et c'est plus propre avec (this).parent )

Essaye ça:

<script type="text/javascript">
$(function() {
    $("#form2").submit(function(){
            del = $(this).find("input[name=del]").val();
            $.ajax({
                "url" : "delete.php",
                "type" : "POST",
                "data" : {
                    "del" : del
                }
                "dataType" : "json",
                "success" : function(){

                }
            });
            return false;
    });
});
</script>

non toujours pas... n'y a t-il pas une erreur a votre avis au niveau
de mon appellation de la variable de mon input supprimer:

name="del'.$donnees'id'].']"

et de ce que je récupère dans ma page delete.php:

$_POST'del']

ne manque t'il pas le $donnees dans la page delete? que je ne serrais pas trop comment mettre...?

Dans ta page delete.php tu devrais faire un print_r($del) afin de voir si tu récupères bien ton id (visualise dans lka console de chrome), et avant ça rajoute alert(del);return false; juste avant $.ajax histoire de voir la aussi si tu récupères bien l'id

en effet je ne recupere pas l'id, le message alert me dit undefined
j'ai fais quelques tests je ne vois pas trop cmt le renseigner

C'est normal ton champs s'appelle del[id] et non pas del tout court .Je te conseille de le nommé del_<?php $donnee'id'];?> et de mettre dans le js
del = $(this).find("input[name=del_<?php $donnee['id'];?>]").val();

j'ai essayer ca aussi en vain, mais ca a évolué...

L'alert(del) me donne pour chaque entrées l'ID de la première entrée, (plutôt que de me donner chacun son ID en vu d'être DELETE par la suite) une idée...?
je continue à chercher aussi..

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
    $("#form2").submit(function(){
            del = $(this).find("input[name=del]").val();
            alert(del);return false;     
    });
});
</script>
</head>
<body>
<?php
include"connect.php";
$sql = 'SELECT * FROM base WHERE possesseur= "florent" ORDER BY id DESC';
$q = mysql_query($sql);
echo '<ul>';
    echo '<form method="post" action="#" id="form2" >';
    while($donnees = mysql_fetch_array($q)) {
        echo '<li>';
            echo $donnees'nom'].' : '. $donnees'console'].' id: '.$donnees'ID'];
            echo '<input type="hidden" name="del" value="'.$donnees'ID'].'" /> ';
            echo '<input type="submit" value="supprimer" />';
        echo '</li>';
    }
 echo '</ul>';
echo '</form>';
?>

C'est normal vu que dans ton code tu génère un input submit pour chaque ligne.

Il faut qu'un seul submit par formulaire.

Donc je te conseille de transformer ton input hidden en bouton et de supprimer ton submit comme ceci:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
    $("input[name=del]").click(function(){
            del = $(this).attr('id');
            alert(del);return false;     
    });
});
</script>

</head>

<body>

<?php
include"connect.php";
$sql = 'SELECT * FROM base WHERE possesseur= "florent" ORDER BY id DESC';
$q = mysql_query($sql);
echo '<ul>';
    echo '<form method="post" action="#" id="form2" >';
    while($donnees = mysql_fetch_array($q)) {
        echo '<li>';
            echo $donnees'nom'].' : '. $donnees'console'].' id: '.$donnees'ID'];
            echo '<input type="button" name="del" id="'.$donnees'ID'].'" value="Supprimer" /> ';
        echo '</li>';
    }
 echo '</ul>';
echo '</form>';
?>

merci djtec je ne savais pas qu'il fallait mettre un bouton plutôt qu'un input en cas de répétition.
si je peux oser une dernière question...

qu'est ce que je récupère dans ma page delete.php avec la proposition de golendercaria?
car $del ne marche pas

mysql_query ('DELETE FROM base WHERE ID = '.(int)$del);

y a t-il un rapport avec $.ajax ?

Mercii

<script type="text/javascript">
$(function() {
    $("#form2").submit(function(){
            del = $(this).find("input[name=del]").val();
            $.ajax({
                "url" : "delete.php",
                "type" : "POST",
                "data" : {
                    "del" : del
                }
                "dataType" : "json",
                "success" : function(){
                 }
            });
            return false;
    });
});
</script>

Et bien dans ta page delete du fais extract($_POST); comme tu fesais puis après au lieu de récupérer la valeur en fesant $_POST"del"] et ben tu fais $del car extract() te permet de transformer $_POST"tavariable"] en $tavariable.

Dans ton js tu dis que del est la valeur de l'input et tu dis aussi que del est un index de data donc essaye de faire plutôt delValue = $(this).find("input[name=del]").val(); car peut-être que ça fait un conflit.

Mais avec delValue = $(this).find("input[name=del]").val(); je ne récupere pas l'id de l'entrée ?
j'ai essayer en vain, je remet mon code.

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
    $("input[name=delete]").click(function(){
            delValue = $(this).attr('ID');
            $.ajax({
                "url" : "delete.php",
                "type" : "POST",
                "data" : {
                "del" : delValue
                }
                "dataType" : "json",
                "success" : function(){
                }
            });
            return false;     
    });
});
</script>
</head>
<body>
<?php
include"connect.php";
$sql = 'SELECT * FROM base WHERE possesseur= "florent" ORDER BY id DESC';
$q = mysql_query($sql);
echo '<ul>';
    echo '<form method="post" action="#" id="form2" >';
    while($donnees = mysql_fetch_array($q)) {
        echo '<li>';
            echo $donnees'nom'].' : '. $donnees'console'].' id: '.$donnees'ID'];
            echo '<input type="button" name="delete" id="'.$donnees'ID'].'" value="Supprimer" /> ';
        echo '</li>';
    }
 echo '</ul>';
echo '</form>';
?>

Page delete.php :

<?php
include"connect.php";
extract ($_POST);
foreach($del as $key => $value)
{
mysql_query ('DELETE FROM base WHERE id = '.(int)$key);
}
?>

Normal car tu utilise pas ton foreach comme il faut ton foreach($del as $key => $value) met plutôt foreach($del as $value) et ensuite tu fais (int)$value

Après si tu veux garder ton foreach comme il est met $value à la place de $key dans ton mysql_query()

toujours pas...
étant donné que la fonction cible le bouton, est il utile de garder le formulaire autour?

Je viens de voir que tu as oublié une virgule après l'accolade de data dans ton js.

Ensuite je viens de tester ton code et c'est ton foreach qui bloque et puis en faites tu n'as pas besoin de foreach vu que quand tu clique sur le bouton il ne supprime que 1 id donc enlève le.

oui j'avais vu entre temps la virgule merci
Ok pour le foreach, effectivement il n'y avait plus de tableau a parcourir comme on lui donne l'id.
Merci beaucouppp

Par contre je rajoute un $("#test").remove(); après $.ajax({ ... }); pour que la ligne se supprime en instantané
et une div id="test" autour de mon pak <li> ... </li>
mais il me supprime <u><em>visuellement</em></u> la première ligne dans tous les cas, quand j'actualise, la bonne ligne est bien sûr supprimée.

Normal je me dis, je met donc l'id de mon entrée dans l'id de la div: <div id="'.$donnees'id'].'">
et dans le js $("#<?php $donnees'id']; ?>").remove();

mais plus de ligne qui se supprime visuellement, elles le sont évidement quand je rechare la page