Erreur lors d'une modification de la base de donnée par formulaire php [Résolu]

sebing 144 Messages postés mercredi 3 février 2010Date d'inscription 3 novembre 2010 Dernière intervention - 26 sept. 2009 à 17:58 - Dernière réponse : sebing 144 Messages postés mercredi 3 février 2010Date d'inscription 3 novembre 2010 Dernière intervention
- 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
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention - 27 sept. 2009 à 21:03
3
Merci
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 -

Merci kohntark 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de kohntark
kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention - 27 sept. 2009 à 13:06
0
Merci
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 -
Commenter la réponse de kohntark
sebing 144 Messages postés mercredi 3 février 2010Date d'inscription 3 novembre 2010 Dernière intervention - 27 sept. 2009 à 20:24
0
Merci
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
Commenter la réponse de sebing
sebing 144 Messages postés mercredi 3 février 2010Date d'inscription 3 novembre 2010 Dernière intervention - 28 sept. 2009 à 10:20
0
Merci
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
Commenter la réponse de sebing
kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention - 28 sept. 2009 à 16:38
0
Merci
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 -
Commenter la réponse de kohntark
sebing 144 Messages postés mercredi 3 février 2010Date d'inscription 3 novembre 2010 Dernière intervention - 28 sept. 2009 à 21:39
0
Merci
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
Commenter la réponse de sebing

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.