Update : Problème de mise à jour bdd

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Update : Problème de mise à jour bdd

par Sirgeese » 17 févr. 2009, 17:37

Merci pour ton aide guilt92.

J'ai procédé aux modifications que tu proposes, mais ça ne change rien, et je n'ai aucune erreur particulière d'afficher.

Edit :

Par contre, je viens de corriger un détail tout bête mais qui à son importance. En effet, mon id dans ma base de données était en majuscule, je l'ai corrigé et mis en minuscule, et hop, le script fonctionne nettement mieux.

Le seul problème restant viens du formulaire de modification qui ne mets pas à jour la bdd.

par guilt92 » 17 févr. 2009, 17:00

Bonjour,

Tu ne peux pas modifier directement une variable en $_POST ou en $_GET

Je te conseille donc de faire un truc du genre :
if (isset($_GET['supprimer_media'])) // Si on demande de supprimer un média 
{ 
    // Alors on supprime le média correspondant 
    // On protège la variable "id_media" pour éviter une faille SQL 
    $delete_id = addslashes($_GET['supprimer_media']); 
    mysql_query('DELETE FROM media WHERE id=\'' . $delete_id . '\''); 
} 
Et si comme je le pense tes id sont des nombres tu n'as pas besoin de les entourer de '
Ensuite essaye de voir si le problème ne vient pas de la requête en ajoutant des or die(mysql_error()) après tes mysql_query =>
if (isset($_GET['supprimer_media'])) // Si on demande de supprimer un média 
{ 
    // Alors on supprime le média correspondant 
    // On protège la variable "id_media" pour éviter une faille SQL 
    $delete_id = addslashes($_GET['supprimer_media']); 
    mysql_query('DELETE FROM media WHERE id=\'' . $delete_id . '\'') or die(mysql_error()); 
} 

Update : Problème de mise à jour bdd

par Sirgeese » 17 févr. 2009, 16:02

Bonjour à tous,

Je crée un script pour gérer une petite base de médias.
Pour se faire, je récupère ma table et la liste sous forme de tableau avec les options de modification et suppression pour chaque média. J'ai également une option en haut de tableau pour 'ajouter' un nouveau média.

Le hic, c'est que la modification et la suppression ne fonctionne pas comme je le souhaite.
La modification se comporte comme un 'ajout'. Il m'envoie sur la page formulaire vide que je doit remplir, en lieu et place d'une formulaire ayant récupéré les données et juste à modifier.

Pour la suppression, elle ne fonctionne pas. Je pense que le problème de la modification réglera celui de la suppresion, mais pour le moment, je cale complètement et je ne vois pas d'ou vient mon problème. :(

Je vous donnes les 2 codes du script pour plus de compréhension :

"Liste des Médias et options d'ajout, modification et suppression".
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Liste des Médias</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <style type="text/css">
        h2, th, td
        {
            text-align:center;
        }
        table
        {
            border-collapse:collapse;
            border:2px solid black;
            margin:auto;
        }
        th, td
        {
            border:1px solid black;
        }
        </style>
    </head>
    
    <body>
 
<h2><a href="ajouter_media.php">Ajouter un média</a></h2>
<?php
mysql_connect("localhost", "root", "");
mysql_select_db("stock");
//-----------------------------------------------------
// Vérification 1 : est-ce qu'on veut ajouter un nouveau média ?
//-----------------------------------------------------
if (isset($_POST['type']) AND isset($_POST['reference']) AND isset ($_POST['quantite']))
{
    $type = addslashes($_POST['type']);
    $reference = addslashes($_POST['reference']);
	$quantite = addslashes($_POST['quantite']);
	
    // On vérifie si c'est une modification de média ou pas
    if ($_POST['id_media'] == 0)
    {
        // Ce n'est pas une modification, on crée une nouvelle entrée dans la table
        mysql_query("INSERT INTO media VALUES('', '" . $type . "', '" . $reference . "', '" . $quantite . "')");
    }
    else
    {
        // On protège la variable "id_media" pour éviter une faille SQL
        $_POST['id_media'] = addslashes($_POST['id_media']);
        // C'est une modification, on met juste à jour le type, la référence et la quantité
        mysql_query("UPDATE media SET type='" . $type . "', reference='" . $reference . "'quantite='" . $quantite . "',  WHERE id='" . $_POST['id_media'] . "'");
    }
}
 
//--------------------------------------------------------
// Vérification 2 : est-ce qu'on veut supprimer un média ?
//--------------------------------------------------------
if (isset($_GET['supprimer_media'])) // Si on demande de supprimer un média
{
    // Alors on supprime le média correspondant
    // On protège la variable "id_media" pour éviter une faille SQL
    $_GET['supprimer_media'] = addslashes($_GET['supprimer_media']);
    mysql_query('DELETE FROM media WHERE id=\'' . $_GET['supprimer_media'] . '\'');
}
?>
<table><tr>
<th>Modifier</th>
<th>Supprimer</th>
<th>Type</th>
<th>Référence</th>
<th>Quantité</th>
</tr>
<?php
$retour = mysql_query('SELECT * FROM media ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les médias
{
?>
<tr>
<td><?php echo '<a href="ajouter_media.php?modifier_media=' . $donnees['id'] . '">'; ?>Modifier</a></td>
<td><?php echo '<a href="liste_media.php?supprimer_media=' . $donnees['id'] . '">'; ?>Supprimer</a></td>
<td><?php echo stripslashes($donnees['type']); ?></td>
<td><?php echo stripslashes($donnees['reference']); ?></td>
<td><?php echo stripslashes($donnees['quantite']); ?></td>
</tr>
<?php
} // Fin de la boucle qui liste les médias
?>
</table>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Ajouter un média</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <style type="text/css">
        h3, form
        {
            text-align:center;
        }
        </style>
    </head>
    
    <body>
<h3><a href="liste_media.php">Retour à la liste des médias</a></h3>
<?php
mysql_connect("localhost", "root", "");
mysql_select_db("stock");
if (isset($_GET['modifier_media'])) // Si on demande de modifier un média
{
    // On protège la variable "modifier_media" pour éviter une faille SQL
    $_GET['modifier_media'] = mysql_real_escape_string(htmlspecialchars($_GET['modifier_media']));
    // On récupère les infos du média correspondant
    $retour = mysql_query('SELECT * FROM media WHERE id=\'' . $_GET['modifier_media'] . '\'');
    $donnees = mysql_fetch_array($retour);
    
    // On place le type et la référence dans des variables simples
    $type = stripslashes($donnees['type']);
    $reference = stripslashes($donnees['reference']);
	$quantite = stripslashes($donnees['quantite']);
    $id_media = $donnees['id']; // Cette variable va servir pour se souvenir que c'est une modification
}
else // C'est qu'on ajoute un nouveau média
{
    // Les variables $type  $contenu  et $quantite sont vides, puisque c'est un nouveau média
    $type = '';
    $reference = '';
	$quantite = '';
    $id_media = 0; // La variable vaut 0, donc on se souviendra que ce n'est pas une modification
}
?>
<form action="liste_media.php" method="post">
	<p>Type : <input type="text" size="20" name="type" value="<?php echo $type; ?>" /></p>
	<p>Référence :<input type="text" size="30" name="reference" value="<?php echo $reference; ?>" /></p>
	<p>Quantité : <input type="text" size="10" name="quantite" value="<?php echo $quantite; ?>" /></p>   
	
    <input type="hidden" name="id_media" value="<?php echo $id_media; ?>" />
    <input type="submit" value="Envoyer" />


</form>
</body>
</html>
Ma table :

Code : Tout sélectionner

id type reference quantite [code] Si vous avez un début de solution, je prends avec plaisir. Merci d'avance pour votre aide. :wink: