8721 sujets

Développement web côté serveur, CMS

Bonjour,
Je poste dans le forum car je bloque sur quelque chose de stupide où je ne trouve pas l'erreur.
Dans la page php que je suis en train de créer on peut modifier les champs d'une table dans une BDD MySQL hébergée sous free. Rien de bien extraordinaire.
Le principe est le suivant, une page qui afficher les données de la table dans un tableau html avec un bouton "modifier" pour chaque ligne si jamais on veut modifier un enregistrement de la table. Bref. Quand on clique sur le bouton, l'ID de la ligne à modifier en envoyer en GET.
Quand on appelle la page de modification, je récupère le paramètre URL en GET et je remplis préalablement les champs du formulaire avec les données dans la table.
J'ai déjà procédé de cette manière pour modifier d'autres tables et ça marche très bien.
Donc j'ai refait un copier/coller du code en adaptant les requêtes et tout ce qu'il fallait modifier.
Seulement cette fois-ci ça ne marche pas Smiley fache
Les champs sont bien remplis avec les données de la table donc le paramètre GET est bien récupéré. Mais quand on modifie un champs et qu'on clique sur le bouton, les données ne sont pas enregistrées dans la BDD et le header location ne fonctionne pas Smiley biggol
J'en déduis donc que c'est ma requête UPDATE qui ne passe pas alors qu'elle est toute bête...
Vous trouverez sûrement très rapidement où ça bloque car ça ne doit pas être un gros problème... Smiley ravi
Je vous poste le code de la page qui modifie:


<?php session_start(); 
if (!isset($_SESSION['email'])) {
   header ('Location: index.php');
   exit(); 
}
ini_set('display_errors', true);
ini_set('display_startup_errors', true);
error_reporting(E_ALL);
 
    $id_tournee = (isset($_GET['tournee'])) ? (int)$_GET['tournee'] : 0;
 
    $base = mysql_connect ('sql.free.fr', '*******', '******'); 
    mysql_select_db ('*******', $base);
    $sql = 'SELECT Numero, Nb_pt_liv, Pickup, Nb_km, Chauffeur, Date_liv FROM tournee_tnt WHERE ID_TNT="'.$id_tournee.'"';
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    $data = mysql_fetch_array($req);           
    $numero = htmlentities($data['Numero'], ENT_QUOTES, 'UTF-8');
    $nbp = htmlentities($data['Nb_pt_liv'], ENT_QUOTES, 'UTF-8');
    $nbr = htmlentities($data['Pickup'], ENT_QUOTES, 'UTF-8');
    $nbk = htmlentities($data['Nb_km'], ENT_QUOTES, 'UTF-8');
    $chauffeur = htmlentities($data['Chauffeur'], ENT_QUOTES, 'UTF-8');
    $date_liv = htmlentities($data['Date_liv'], ENT_QUOTES, 'UTF-8');
echo "je suis au début ";
if (isset($_POST['modifier']) && $_POST['modifier'] == 'Modifier') {       
echo "je suis dans le modifier";       
    $new_numero = mysql_real_escape_string($_POST['numero']);
    $new_nbp = mysql_real_escape_string($_POST['nbp']);
    $new_nbr = mysql_real_escape_string($_POST['nbr']);
    $new_nbk = mysql_real_escape_string($_POST['nbk']);
    $new_chauffeur = mysql_real_escape_string($_POST['chauffeur']);
    $new_date_liv = mysql_real_escape_string($_POST['date_liv']);
     
echo "je suis à la fin de modifier";   
if (isset($_POST['numero']) AND $_POST['numero'] !== "")
    { 
    echo "je suis dans numero";
     if (isset($_POST['nbp']) AND $_POST['nbp'] !== "")
       {
       echo "je suis dans nbp";
         if (isset($_POST['nbr']) AND $_POST['nbr'] !== "")
            {
            echo "je suis dans nbr";
             if (isset($_POST['nbk']) AND $_POST['nbk'] !== "")
                {
                echo "je suis dans nbk";
                 if (isset($_POST['chauffeur']) AND $_POST['chauffeur'] !== "")
                    {
                    echo "je suis dans chauffeur";
                     if (isset($_POST['date_liv']) AND $_POST['date_liv'] !== "")
                        {
                            echo "je suis dans date_liv ";
                            $base = mysql_connect ('sql.free.fr', '*******', '******'); 
                            mysql_select_db ('********', $base);
                            $sql ='UPDATE tournee_tnt SET
                            Numero ="'.$new_numero.'",
                            Nb_pt_liv ="'.$new_nbp.'",
                            Pickup ="'.$new_nbr.'",
                            Nb_km ="'.$new_nbk.'",
                            Chauffeur ="'.$new_chauffeur.'",
                            Date_liv ="'.$new_date_liv.'",
                            WHERE ID_TNT ="'.$id_tournee.'"';
                            $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());             
                        }
                    } 
                }
            }
        }
header('Location: tnt.php');exit();
    }
}
?>
<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
        <title>Gestion des feuilles de route</title>
        <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.css" />
        <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
        <script src="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.js"></script>
    </head>
    <body>
        <div data-role="page">
            <div data-role="header">
                <a href="tnt.php" data-icon="back">Retour</a>
                <h1>Gestion des feuilles de route</h1>
            </div><!-- /Entete de la page -->
            <div data-role="content">
                <form action="modifier_tnt.php" method="post" id="modif_tnt">
                    <ul data-role="listview">
                        <li data-role="list-divider">Numéro de la tournée</li>
                            <li><input type="text" name="numero" id="numero" value="<?php echo $numero; ?>" /></li>
                        <li data-role="list-divider">Nombre de points</li>
                            <li><input type="text" name="nbp" id="nbp" value="<?php echo $nbp; ?>" /></li> 
                        <li data-role="list-divider">Nombre de ramasses</li>
                            <li><input type="text" name="nbr" id="nbr" value="<?php echo $nbr; ?>" /></li> 
                        <li data-role="list-divider">Nombre de kilomètres</li>
                            <li><input type="text" name="nbk" id="nbk" value="<?php echo $nbk; ?>" /></li>
                        <li data-role="list-divider">Chauffeur</li>
                            <li><input type="text" name="chauffeur" id="chauffeur" value="<?php echo $chauffeur; ?>" /></li>                           
                        <li data-role="list-divider">Date</li>
                            <li><input type="text" name="date_liv" id="date_liv" value="<?php echo $date_liv; ?>" /></li> 
                        <p><label for="modifier"></label><input type="submit" name="modifier" id="modifier" value="Modifier" data-theme="b" /></p>                       
                    </ul>
                </form>
            </div>
            <div data-role="footer">
                <h4>&copy; Antony 2013</h4>
            </div><!-- /Pied de page -->
        </div>
        <?php
            if (isset($erreur)) echo '<br /><br />',$erreur; 
        ?>
    </body>
</html>


J'ai placé des "écho" un peu partout entre mes "if" et en fait je ne rentre même pas dans le "if" qui détermine si j'ai bien appuyé sur le bouton modifier.

Donc j'ai regardé la syntaxe de mes noms et l'orthographe mais tout est identique. Donc je ne comprends pas pourquoi je ne rentre pas dans ce "if".

Merci beaucoup pour votre aide Smiley lol
Modifié par WeezyF (20 Jul 2013 - 14:30)
Bonjour,
J'ai beau chercher, je ne vois pas d'où peut venir ton problème... Est ce que le nom de ta page est bien modifier_tnt.php? Et est ce que tu peux afficher le contenu de $_POST?
Bonjour,

Si tu ne vois aucun echo, je pense que l'erreur vient plus de la requete SELECT et fais donc échouer ton script.
tu n'as aucun détail sur l'erreur? tu as activer le mode debug?
Un petit var_dump($_POST); sur le haut de la page pourrait être utile à vue de nez ^^

Je ne suis pas certaine du tout que le bouton submit envoie la moindre donnée ^^ (et donc ton $_POST['modifier'] n'apparaîtrait pas dans le var_dump)
Lothindil a écrit :

Je ne suis pas certaine du tout que le bouton submit envoie la moindre donnée ^^ (et donc ton $_POST['modifier'] n'apparaîtrait pas dans le var_dump)


J'étais perplexe aussi mais en faisant le test je me suis aperçu que la variable $_POST['modifier'] contient bien l'attribut value du bouton submit. Smiley lol
Modifié par toukilbv (10 Jul 2013 - 15:39)
ça ne change rien que sans le var_dump qui lui donnera la valeur de $_POST, il ne pourra pas savoir où est son soucis, vu qu'il n'aura pas le typage et la valeur exacte des variables ^^
Bonjour,
je suis désolé de ne répondre que maintenant mais j'étais en vacance pendant une semaine, donc je ne pouvais donner suite à mon post.

Je vois que mon problème laisse plusieurs personnes perplexes...

Je ne comprends pas comment utiliser le var_dump. Je le place "var_dump($_POST);" au début de mon code mais rien ne s'affiche dans la page.

Et quand je le place juste au dessus de la condition qui vérifie si j'ai appuyé sur le bouton "Modifier", j'ai ceci qui apparait:
array(0) {
}
Je ne comprends pas à quoi cela correspond.
Merci de votre participation et de votre aide Smiley smile
La fonction var_dump() affiche le contenu d'une variable.

D'après ce que tu dis, var_dump($_POST) t'indique qu'aucune variable n'a été transmise via la méthode POST puisqu'il t'affiche un tableau vide.
Pourtant quand je regarde dans la console de débug de chrome, les données en POST sont correctement transmises.
Si tu places le var_dump($_POST) après la méthode error_reporting(E_ALL) tu n'as rien qui s'affiche ?
Bonjour,

c'est une excellente remarque cela me permet maintenant d'avoir une page avec tous les echo et les messages d'erreur affichés.
Voici ce que cela me renvoie maintenant que j'ai rajouté ce que tu m'as spécifié:

je suis au début je suis dans le modifierje suis dans numeroje suis dans nbpje suis dans nbrje suis dans nbkje suis dans chauffeurje suis dans date_liv UPDATE tournee_tnt SET Numero ="155", Nb_pt_liv ="55", Pickup ="3", Nb_km ="500", Chauffeur =" ALDANA Antony", Date_liv ="2013-06-05", WHERE ID_TNT =1Erreur SQL !
UPDATE tournee_tnt SET Numero ="155", Nb_pt_liv ="55", Pickup ="3", Nb_km ="500", Chauffeur =" ALDANA Antony", Date_liv ="2013-06-05", WHERE ID_TNT =1
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE ID_TNT =1' at line 8


Bon et bien affaire résolu, il fallait juste que je supprime la virgule avant le WHERE pour que l'erreur parte.
Merci à tous pour votre aide et votre temps passé à m'aider !

ps: par contre je sais pas si il y a une système de sujet résolu, je le trouve pas...
Modifié par WeezyF (19 Jul 2013 - 14:20)