Page 1 sur 1

Probleme de suppression dans la bdd

Posté : 10 déc. 2006, 11:25
par ALphaman
Bonjour tous le monde,

Je rencontre un petite probléme dans la suppression de la bdd, je m'explique, le code que j'ai crée a pour fonction de m'afficher dans un tableau les resultats d'une requete, jusque là tous va bien je pense, et la derniere colonne de ce tableau et composée d'une liste deroulante affichant l'entrée ici de la table ble ( en INT, donc par exemple 20 afficheras les chiffres de 0 a 20 ) pour toute les entrées.
Ensuite je selectionne un de ces chiffres ( au hazard sa na pas d'importance car la partie qui update l'entrée si le chiffre est plus petit que le total n'est pas encore faite ) Puis je clique sur le bouton OK.

Et bien mon probleme est que cela ne supprime pas l'entrée sur la ligne ou j'ai cliquer OK mais une autre en particulier la derniere .

Petit probleme 2 : Les entrées du tableau ne se mette pas à jour, apres OK , il faut que je reactualise la page pour voir enfin la mise à jours des entrées.

Je vous met le code qui devré effectuer ceci
// POST
echo '<form action="marche.php" method="post">';

// Tu affiches ici que l'entête de ta table !
echo '
       <table width="580" height="42" border="1">
   <tr>
                 <td>Nom</td>
            <td>Quantité</td>
            <td>Prix</td>
			   <td>Choix</td>
        </tr>
    ';

// données effacées...
if (isset($_POST['resse']))
{
mysql_query ('DELETE FROM commerce WHERE id_commerce = "'.$_POST['resse'].'"');
}

$ress = mysql_query ('SELECT * FROM commerce');
// ----------------- boucle pr afficher toute les entrée de la table commerce ---------  


// Tu débutes ensuite ta boucle !
while ($donnees = mysql_fetch_array ($ress))    
{
    $nom_res = $donnees['objet'];
    $prix_res = $donnees['prix'];
    $quantite_res = $donnees['quantite'];
    $id_denre = $donnees['id_commerce'] ;

    // -------tableau affichant toute les entrées -----------
    echo '
            <tr>
                <td width="107">'.$nom_res.'</td>
                <td width="181">'.$quantite_res.'</td>
                <td width="132">'.$prix_res.'</td>
				<td width="10">';
				
$nombre = 0;
echo'<select name="nbr">';
while ($nombre <= $quantite_res)
{
echo '<option value="fr">'.$nombre.'</option>';
$nombre++;
}
echo '<INPUT TYPE="hidden" name="resse" VALUE="'.$id_denre.'"><input type="Submit" value="Ok"></select></td></tr>';

}

//-- fin du If--------------

echo '</table><br /><br /><input type="submit" value="Achat">';

mysql_close(); 

?>
Il ya encore du code au dessus qui effectue la vente ( a partir de la table membre vers la table ici commerce )si il ya besoin faite le moi savoir

Merci je bloque vraiment la

Posté : 10 déc. 2006, 12:28
par Ryle
Il y a plusieurs choses qui ne vont pas. La première c'est l'imbrication de tes éléments html :
echo '<select name="nbr">'; 
...
echo '<INPUT TYPE="hidden" name="resse" VALUE="'.$id_denre.'"><input type="Submit" value="Ok"></select>
A l'intérieur d'un <select> tu ne dois trouver que des <option>, chez toi il y a un champ caché et un bouton submit dont le fonctionnement sera plus que douteux. (attention d'ailleurs à ton champ "resse", car celui-ci sera défini à chaque fois que tu soumettras le formulaire, et le isSet entrainera automatiquement le vidage de la table)

Une fois ceci réglé, ton second problème est que tes champs ont tous le même nom quelque soit la ligne concerné. Donc forcément, lorsque tu soumets le formulaire, tu ne récupères que les valeurs de la dernière ligne, puisque chaque variable vient écraser la précédente.

Le mieux est je pense de rajouter des crochets à tes noms de champs :
echo '<select name="nbr[]">'; 
ainsi tu peux garder les même, mais côté php, au lieu d'une valeur écrasée par la suivante, tu obtiendras un tableau de valeurs avec toutes les infos dont tu as besoin
print_r($_POST['nbr']);

Posté : 10 déc. 2006, 12:38
par ALphaman
Merci de ta réponse,

Donc j'ai fais les modifs que j'ai compris

Et voila ce que sa me donne
// POST
echo '<form action="marche.php" method="post">';

// Tu affiches ici que l'entête de ta table !
echo '
       <table width="580" height="42" border="1">
   <tr>
                 <td>Nom</td>
            <td>Quantité</td>
            <td>Prix</td>
			   <td>Choix</td>
        </tr>
    ';

// données effacées...
if (isset($_POST['resse']))
{
mysql_query ('DELETE FROM commerce WHERE id_commerce = "'.$_POST['resse'].'"');
}

$ress = mysql_query ('SELECT * FROM commerce');
// ----------------- boucle pr afficher toute les entrée de la table commerce ---------  


// Tu débutes ensuite ta boucle !
while ($donnees = mysql_fetch_array ($ress))    
{
    $nom_res = $donnees['objet'];
    $prix_res = $donnees['prix'];
    $quantite_res = $donnees['quantite'];
    $id_denre = $donnees['id_commerce'] ;

    // -------tableau affichant toute les entrées -----------
    echo '
            <tr>
                <td width="107">'.$nom_res.'</td>
                <td width="181">'.$quantite_res.'</td>
                <td width="132">'.$prix_res.'</td>
				<td width="10">';
				
$nombre = 0;
echo '<select name="nbr[]">'; 
while ($nombre <= $quantite_res)
{
echo '<option value="fr">'.$nombre.'</option>';
$nombre++;
}
echo '</select><INPUT TYPE="hidden" name="resse" VALUE="'.$id_denre.'"><input type="Submit" value="Ok"></td></tr>';

}

//-- fin du If--------------

mysql_close(); 

?>
Est ce bien sa ?

Posté : 10 déc. 2006, 13:23
par Ryle
Y a du mieux :)

Maintenant le problème que tu vas avoir, c'est que lorsque tu cliques sur un bouton submit, c'est tout le formulaire que tu envois. Et comme tous tes champs hidden se nomment "resse" tu vas avoir le même problème à ce niveau. C'est à dire que ton "isset($_POST['resse'])" renverra toujours vrai et la valeur de $_POST['resse'] sera égale au dernier $id_denre que tu auras traité.

On peut donc envisager un formulaire par ligne pour que seules les donénes d'une ligne soient envoyées à la fois, soit de même coller des crochets pour que tu récupères toutes les valeurs des champs "resse[]"

Mais l y a donc à mon avis un problème avec ton champ hidden, qui sera à chaque fois envoyé, et donc lancera à chaque fois le delete... est-ce le fonctionnement que tu attends ?

Posté : 10 déc. 2006, 13:56
par ALphaman
En gros le fonctionnement que je veux, est que lorsque je choisit un nombre dans la liste deroulante, et que je clique sur OK et bien que le chiffre entré soit envoyer grace à OK, et par consequent ( dans ce cas si on ne verifie pas si le nombre entrer est égale au nombre quantite_res ) l'entré soit supprimer.

Je sais pas si tu vois se que je souhaite

PS: J'ai pas tous compris dans ton msg :oops:

Posté : 10 déc. 2006, 22:11
par ALphaman
Est ce que tu aurais une solution pour résoudre ce probléme s'il te plait ? :cry: