Php/mysql Notice: Undefined index: submit

Bonjour,
Il y'a mon code sign.php pour inserer les donnees dans la base qui me renvoi cette erreure que je comprends pas:
Notice: Undefined index: submit in C:\Program Files\EasyPHP 2.0b1\www\training\application\sign.php on line 6

voici le code
sign.php

<?php
include "connection.php";
include ("usefulfunc.php");
$page_title = "Sign My Guest Book!!";
include "start_pag.php";
$submit=$_POST["submit"];
if ($submit == "Sign!"){
$errmsg = create_entry($name,$location,$email,$url,$comments);
if (empty($errmsg))
{
include "end_page.php";
exit;
}
}
?>

<form method=POST>
<table>
<?php

print_input_fields("name","location","email","url");
?>
<tr>
<td valign=top align=rigth><b>Comments:</b></td>
<td valign=top align=left><textarea name=comments cols=40 rows=4></textarea></td>
</tr>

</table>
<input type=submit name=submit value="Sign!">
<input type=reset name=reset value="Start Over">

</form>

Et voici la function create_entry pour analyser et inserer les donnees dans la base:

function create_entry($name,$location,$email,$url,$comments){
$errmsg = "";
if(empty($name)){
$errmsg .= "<li>you have to put in a name!\n";
}
if (empty($email)){
$errmsg .="<li>insert an email please\n";
}
else {
$query = "select * from guestbook where email = '$email'";
$result = safe_query($query);
if(mysql_num_rows($result) > 0) {
$errmsg .="<li>this email has already sign this guestbook.\n";
}
}
if (empty($errmsg)){
$query = "insert into guestbook"
."(name,location,email,url,comments) values "
."('$name','$location','$email','$url','$comments')";
$result = mysql_query($query);

?>
<h2>Thanks!!</h2>
<h2><a href="view.php">View Arly's Guest Book!!!</a></h2>
<?php

}
else{
include("sign.php");
}

}
?>

Merci d'avance pour votre reponse.
Configuration: Windows Vista
Firefox 3.0.13

9 réponses

  1. la clé submit n'hexiste pas dans le $_POST !

    En fait, il est possible selon les navigateurs, et selon les circonstances, que les valeurs des input type submit ne passent pas. En plus la value du champs submit sers aussi à l"affichage, donc, le jour ou tu veux changer les Sign! par Go ... tu est obligé d'adapter le reste du code ...

    Je te suggère de rajouter un
    <input type='hidden' name='test' value="ok" />
    


    et de tester le $_POST['test']
    C'est plus fiable ...
    0
    1. tu peux etre un peu plus claire s'il te plait, car je suis just un debutant dans la programation php/mysql,
      Que veux tu dire par tester $_POST['test']?
      0
      1. que dans ton code sign.php, tu teste si le bouton à été cliqué ... mais comme je te dis, ça ne marche pas à tous les coups.

        rajoute donc dans ton formulaire :
        <input type='hidden' name='test' value="ok" />


        et remplace
        $submit=$_POST["submit"];
        if ($submit == "Sign!"){ 

        par :
        if( !empty( $_POST['test'] ) ){
        0
        1. Merci bcp, je l'ai fait et avec submit le probleme est resolu mais il me viens presque le meme probleme avec les autres variables voici le message d'errore qui s'affiche:
          Notice: Undefined variable: name in C:\Program Files\EasyPHP 2.0b1\www\training\application\sign.php on line 8

          Notice: Undefined variable: location in C:\Program Files\EasyPHP 2.0b1\www\training\application\sign.php on line 8

          Notice: Undefined variable: email in C:\Program Files\EasyPHP 2.0b1\www\training\application\sign.php on line 8

          Notice: Undefined variable: url in C:\Program Files\EasyPHP 2.0b1\www\training\application\sign.php on line 8

          Notice: Undefined variable: comments in C:\Program Files\EasyPHP 2.0b1\www\training\application\sign.php on line 8

          Merci d'avance pour ton aide
          0
          1. utilise le $_POST pour récupérer tes valeurs :

            $errmsg = create_entry($_POST['name'],$_POST['location'],$_POST['email'],$_POST['url'],$_POST['comments']);
            0
            1. Merci beaucoup de votre aide, le probleme est resolu maitenant
              0
              1. Il y 'a un autre probleme qui m'embette, j'ai lempression que ma function create_entry que voici:

                function create_entry($name,$location,$email,$url,$comments){
                $errmsg = "";
                if(empty($name)){
                $errmsg .= "<li>you have to put in a name!\n";
                }
                if (empty($email)){
                $errmsg .="<li>insert an email please\n";
                }
                else {
                $query = "select * from guestbook where email = '$email'";
                $result = safe_query($query);
                if(mysql_num_rows($result) > 0) {
                $errmsg .="<li>this email has already sign this guestbook.\n";
                }
                }
                if (empty($errmsg)){
                $query = "insert into guestbook"
                ."(name,location,email,url,comments) values "
                ."('$name','$location','$email','$url','$comments')";
                $result = mysql_query($query);

                ?>
                <h2>Thanks!!</h2>
                <h2><a href="view.php">View Arly's Guest Book!!!</a></h2>
                <?php

                }
                else{
                echo "operation failed\n";
                }

                }
                ?>

                quand j'utilise $errmsg="<li>you have.......\n" et if(empty($errmsg)){.....

                une fois que les valeures sont submit... via le code sign.php, n'execute pas les operations de verification si le
                $name a bien etait introduite ou si le $email existe deja il sort directement et viens a else pour m'aficher operation failed.
                aucune errore ne m'est affiche.

                voici sign.php
                <?php
                include "connection.php";
                include ("usefulfunc.php");
                $page_title = "Sign My Guest Book!!";
                include "start_pag.php";

                if(!empty($_POST['test'])){
                $errmsg = create_entry($_POST['name'], $_POST['location'], $_POST['email'] , $_POST['url'] , $_POST['comments']);
                if (empty($errmsg))
                {
                include "end_pag.php";
                exit;
                }
                }
                ?>

                <form method=POST>
                <table>
                <?php

                print_input_fields("name","location","email","url");
                ?>
                <tr>
                <td valign=top align=rigth><b>Comments:</b></td>
                <td valign=top align=left><textarea name=comments cols=40 rows=4></textarea></td>
                </tr>

                </table>
                <input type=submit name=submit value="Sign!">
                <input type=reset name=reset value="Start Over">
                <input type='hidden' name='test' value="ok" />
                </form>

                Merci d'avance pour l'aide
                0
                1. OULA ...

                  il te manque un return $errmsg; à la fin de la fonction ( pour récupérer l'erreur)
                  0
                  1. Merci beaucoup, apres avoir ajoute cela et fait quelque retouche a mon code cela marche bien maintenant.
                    0