Erreur lors d'une modification de la base de donnée par formulaire php

Résolu
sebing Messages postés 144 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 3 novembre 2010 - 26 sept. 2009 à 17:58
sebing Messages postés 144 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 3 novembre 2010 - 28 sept. 2009 à 21:39
Bonjour,

Je ne sais pas se que j'ai en ce moment mais je n'arrive plus a modifier les codes correctement.
Voila j'ai une liste que je prends sur ma base de donnée, que je veux modifier.
Lors de la sélection de la ligne, mon formulaire se renseigne bien avec les données que je veux modifier, mais lorsque je change une donnée et que je valide. la page s'ouvre de nouveau avec toutes les cases vierges et rien n'a été modifié dans la base de donnée.
Voici mon code de la page modif.matchs.seniors.php:
<? //VARIABLES GENERALES
include("../data.php");
global $dbserver;
global $dbdb;
global $dbuser;
global $dbpass;
//CONNEXION A LA BASE DE DONNEES
$base =  @MYSQL_CONNECT ("$dbserver","$dbuser","$dbpass") or die ("Erreur: impossible de communiquer avec la base de données.
Vérifiez les donnés du fichier  data.php .

");
mysql_select_db("dbdb",$base);
if (isset($_GET['modifier_matchs_seniors'])) // Si on demande de modifier un matchs
{

    // On protège la variable "modifier_matchs" pour éviter une faille SQL
    $_GET['modifier_matchs_seniors']  = mysql_real_escape_string(htmlspecialchars($_GET['modifier_matchs_seniors']));
    // On récupère les infos des membres correspondants
    $retour = mysql_query('SELECT * FROM matchs_seniors WHERE id=\'' . $_GET['modifier_matchs_seniors'] . '\'');
    $donnees = mysql_fetch_array($retour);
    
    // On place le titre et le contenu dans des variables simples
   $date= stripslashes($donnees['date']);
   $heure = stripslashes($donnees['heure']);
$home = stripslashes($donnees['home']);
$visiteur = stripslashes($donnees['visiteur']);
$score = stripslashes($donnees['score']);
 $id_matchs_seniors = $donnees['id']; // Cette variable va servir pour se souvenir que c'est une modification
}
else // C'est qu'on rédige un nouveau membre
{
    // Les variables $  sont vides, puisque c'est un nouveau membre
    $date = '';
    $heure = '';
    $home = '';
    $visiteur = '';
    $score = '';
    $id_matchs_seniors = 0; // La variable vaut 0, donc on se souviendra que ce n'est pas une modification
}

?>
<form action="modif_matchs_seniors.php" method="post">
date : " />



    heure :

    <textarea name="heure" cols="10" rows="1">
    <?php echo $heure; ?>
    </textarea>

    
    Home :

    <textarea name="home" cols="15" rows="2">
    <?php echo $home; ?>
    </textarea>

    
    Visiteur :

    <textarea name="visiteur" cols="30" rows="3">
    <?php echo $visiteur; ?>
    </textarea>

    
    
    Score :

    <textarea name="score" cols="15" rows="3">
    <?php echo $score; ?>
    </textarea>

   
    
    " />
    


</form>


Merci de m'aider.

Bon week end

Seb

6 réponses

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
27 sept. 2009 à 21:03
Il y a bien modification, mais ce sont toutes mes lignes qui se modifient , pourtant je prends par id????

Il n'y a aucune clause WHERE dans ta requête UPDATE !!
// On protège la variable "id_matchs_seniors" pour éviter une faille SQL

On utilise mysql_real_escape_string pour cela, pas addslashes.


Cordialement,


Kohntark -
3
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
27 sept. 2009 à 13:06
Salut,

J'ai regardé très brièvement ... je me suis juste arrêté au fait que ton formulaire fait un post, et qu'il n'y a nul part trace d'une récupération des données ($_POST())
Il manque du code à première vue.

Cordialement,


Kohntark -
0
sebing Messages postés 144 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 3 novembre 2010
27 sept. 2009 à 20:24
J'ai trouvé la première erreur:
C'est la ligne
<form action= "modif_matchs_seniors.php" method="post">

Je dois mettre
<form action="list_matchs_seniors.php" method="post">
c'est la feuille qui liste mes pages et c'est a cette endroit que je choisi de modifier une ligne.

Mais maintenant j'ai un nouveau problème:

Il y a bien modification, mais ce sont toutes mes lignes qui se modifient , pourtant je prends par id????

Mais ou est cette nouvelle erreur:

Voici le code de ma page list_matchs_seniors.php
<?php
//VARIABLES GENERALES
include("../data.php");
global $dbserver;
global $dbdb;
global $dbuser;
global $dbpass;
//CONNEXION A LA BASE DE DONNEES
$base = @MYSQL_CONNECT ("$dbserver","$dbuser","$dbpass") or die ("Erreur: impossible de communiquer avec la base de données.
Vérifiez les donnés du fichier  data.php .

");
mysql_select_db("dbdb",$base);

//-----------------------------------------------------
// Vérification 1 : y a t'il des matchs?
//-----------------------------------------------------
if (isset($_POST['date']) AND isset($_POST['heure']) AND isset($_POST['home']) AND isset($_POST['visiteur']) AND isset($_POST['score']))
{
    $date  = addslashes($_POST['date']);
    $heure = addslashes($_POST['heure']);
    $home = addslashes($_POST['home']);
    $visiteur = addslashes($_POST['visiteur']);
    $score = stripslashes($donnees['score']);
 
    // On vérifie si c'est une creation de matchs ou pas
    if ($_POST['id_matchs_seniors'] == 0)
    {
        // Ce n'est pas une modification, on crée une nouvelle entrée dans la table
        mysql_query("INSERT INTO matchs_seniors VALUES('', '" . $date . "', '" . $heure . "', '" . $home . "', '" . $visiteur . "', '" . $score . "')");
    }
    else
    {
        // On protège la variable "id_matchs_seniors" pour éviter une faille SQL
        $_POST['id_matchs_seniors'] = addslashes($_POST['id_matchs_seniors']);
        // C'est une modification, on peut tout mettre à jour
        mysql_query("UPDATE matchs_seniors SET date='" . $date . "', heure='" . $heure . "', home='" . $home . "', visiteur='" . $visiteur . "', score='" . $score . "'");
    }
}
 
//--------------------------------------------------------
// Vérification 2 : est-ce qu'on veut supprimer un matchs?
//--------------------------------------------------------
if (isset($_GET['supprimer_matchs_seniors'])) // Si on demande de supprimer un matchs
{
    // Alors on supprime le membre correspondant
    // On protège la variable "id_matchs_seniors" pour éviter une faille SQL
    $_GET['supprimer_matchs_seniors'] = addslashes($_GET['supprimer_matchs_seniors']);
    mysql_query('DELETE FROM matchs_seniors WHERE id=\'' . $_GET['supprimer_matchs_seniors'] . '\'');
}
?>
<table><tr>
<th>Date</th>
<th>Heure</th>
<th>Home</th>
<th>Visiteur</th>
<th>score</th>
<th>Modifier</th>
<th>supprimer</th>
</tr>
<?php
$retour = mysql_query('SELECT * FROM matchs_seniors ORDER BY date');
while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les matchs
{
?>
<tr>
<td><?php echo stripslashes($donnees['date']); ?></td>
<td><?php echo stripslashes($donnees['heure']); ?></td>
<td><?php echo stripslashes($donnees['home']); ?></td>
<td><?php echo stripslashes($donnees['visiteur']); ?></td>
<td><?php echo stripslashes($donnees['score']); ?></td>
<td><?php echo '[modif_matchs_seniors.php?modifier_matchs_seniors=' . $donnees['id'] . ' '; ?>modifier]</td>
<td><?php echo '[list_matchs_seniors.php?supprimer_matchs_seniors=' . $donnees['id'] . ' '; ?>Supprimer]</td>
</tr>
<?php
} // Fin de la boucle qui liste les matchs
?>

Et lorsque je veut modifier, c'est la page modif_matchs_seniors.php qui s'ouvre avec les données du match que l'on veut modifier, le code est plus haut.
Merci encore

Bonne soirée
0
sebing Messages postés 144 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 3 novembre 2010
28 sept. 2009 à 10:20
Merci,

J'ai rajouté la clause where que j'ai effacée par erreur, et maintenant ça fonctionne merci

Par contre je ne sais pas me servir de mysql_real_escape_string.

Si je remplace addslashes par mysql_real_escape_string ça ne marche plus.

Une autre question: comment faire pour que la date soit au format jj/mm/aaaa? j'ai beau chercher je ne comprends pas où placer les codes.

Désolé de vous harceler de question mais je suis perdu.

Merci encore bonne journée.
Cordialement
Seb
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
28 sept. 2009 à 16:38
Par contre je ne sais pas me servir de mysql_real_escape_string.

=> voir la doc, tout est dedans.

Si je remplace addslashes par mysql_real_escape_string ça ne marche plus.

... et peut on savoir ce que ça fait au juste ? une erreur ? pas d'affichage ? autres ?
Tu peux sortir ta requête du mysql_query est l'afficher pour voir à quoi elle ressemble et surtout traite les erreurs !!
Ca te permettra sans doute de trouver le pb :
$sql = "UPDATE matchs_seniors SET date='" . $date . "', heure='" . $heure . "', home='" . $home . "', visiteur='" . $visiteur . "', score='" . $score . "'";
echo '<hr />debug : '.$sql.'
';
if (false === mysql_query($sql)) die(mysql_error());

Assure toi également que les guillemets magiques ne sont pas activés (voir get_magic_quotes_gpc)

Une autre question: comment faire pour que la date soit au format jj/mm/aaaa? j'ai beau chercher je ne comprends pas où placer les codes.

Où souhaites tu qu'elle le soit ? A l'affichage ? dans la base ?
Le mieux serait sans doute un unique champ de type DATETIME directement dans la DB.


Cordialement,

Kohntark -
0
sebing Messages postés 144 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 3 novembre 2010
28 sept. 2009 à 21:39
Merci pour tous ces renseignements.
Je vais me pencher dessus dans la semaine et je vous tiens au courant.
.. et peut on savoir ce que ça fait au juste ? une erreur ? pas d'affichage ? autres ?

Rien ne se passe, mais je vais étudier la doc que vous m'avez conseillée.
Où souhaites tu qu'elle le soit ? A l'affichage ? dans la base ?
Le mieux serait sans doute un unique champ de type DATETIME directement dans la DB.

Je suis chez free, est il possible de le faire au niveau de la base?

Merci encore.

Cordialement.

Seb
0
Rejoignez-nous