Bonjour a tous voici mon problème j'ai suivi le tutoriel livre d'or php tous fonctionne par contre si je clique sur envoyer sans rien n’écrire dans les casse il envoie quand un message vide comment puis je faire j'ai essayer en me servant du tutoriel pour qu'il marque un message comme quoi les champs ne sont pas rempli il m'affiche bien le texte mais envoie quand même le message vide.
voila si quelqu'un peu m'aider merci.

voici mon code

<section id="content">
        <div class="padding">
        <div class="scroll">
        <div class="padding-right">
            <h3>Livre d'Or</h3>
            <div align="center" class="wrapper">

<?php
require "config.php";
mysql_connect (DB_SERVER,DB_LOGIN,DB_PASS);  
mysql_select_db (DB_NAME);
mysql_query ('SET NAMES' .DB_ENC);

if (!empty ($_POST)) {
extract ($_POST);
    $valid = true;
    if(empty($pseudo)){
        $valid=false;
        $erreurpseudo="Vous n'avez pas rempli votre nom";

        }

        if(empty($message)){
        $valid=false;
        $erreurmessage="Vous n'avez pas rempli votre message";

        }

        if($valid){
                echo "tous les champ sont bon";

                }

$ip=$_SERVER "REMOTE_ADDR"];
$sql="INSERT INTO livreor (pseudo,message,ip) VALUES (' $pseudo','$message','$ip')";
$req= mysql_query ($sql) or die ('Erreur SQL !<br>' .$sql.'<br>'.mysql_error() );

    }
?>
<form method="post" action="livreor.php">
        <p>Laissez nous un message !</p>

            Votre nom : <input type="text" name="pseudo" id="pseudo"/><br /><br />
            <span class="error-message"><?php if(isset($erreurpseudo)) echo $erreurpseudo; ?></span> <br />          

            Message :<br /><br />
            <textarea name="message" id="message"rows="8" cols="35"></textarea><br /><br />
            <span class="error-message"><?php if(isset($erreurmessage)) echo $erreurmessage; ?></span>

            <input type="submit" value="Envoyer" /><br /><br /><hr />

    </form>

<?php
$sql="SELECT * FROM livreor ORDER BY id DESC";
$req= mysql_query ($sql) or die ('Erreur SQL !<br>' .$sql.'<br>'.mysql_error() );
while ($data=mysql_fetch_assoc ($req)) {
        echo "<strong>".$data "pseudo"] ."</strong><br />";
        echo "<p>".$data "message"]."<hr /></p>";
    }

mysql_close();
?>

12 réponses


Essaye:

if($valid) {
    $ip=$_SERVER "REMOTE_ADDR"];
    $sql="INSERT INTO livreor (pseudo,message,ip) VALUES (' $pseudo','$message','$ip')";
    $req= mysql_query ($sql) or die ('Erreur SQL !<br>' .$sql.'<br>'.mysql_error() );
}

Salut,
S j'ai bien compris tu voudrai que si les champs sont vide, la soumission du poste est annulé, est que sa te retourne un message,
si c'est bien sa ^^ GrafikArt,à fait un tutoriel la dessus : voici le tutoriel.

J'espère que sa pourra t'aider.

lidian
Auteur

Merci djtec mais cela ne fonctionne pas

BlackDesign je vais regarder ce tuto mais sinon ses a peu prés ça je veut surtout que quand on clic sur envoyer et qu'il n'y a rien dans mes champs il n'envoye pas le formulaire.
voir peut etre un bouton a cocher qui bloc le bouton envoyer si ses pas cocher.

merci

lidian
Auteur

Toujour pas de solution je ne trouve pas help please

Salut, je recherche une solution, je pense que c'est tous simple en plus ^^
par contre j'ai remarqué que tu avait des espaces entres !empty et ($_POST); je ne sais pas si sa joue, mais on ne sais jamais, tu à la même chose pour ton extract, sinon quand tu remplie bien tous les champs, ton message de confirmation s’affiche bien ?

Tien essaie ce code on ne sais jamais :

if(isset($_POST) && !empty($_POST)){
    extract($_POST);

    if(empty($pseudo) || empty($message)){
        if(empty($pseudo)) { $erreurpseudo="Vous n'avez pas rempli votre nom"; }
        if(empty($message)) { $erreurmessage="Vous n'avez pas rempli votre message"; }
    } else {
        $ip=$_SERVER "REMOTE_ADDR"];
        $sql="INSERT INTO livreor (pseudo,message,ip) VALUES (' $pseudo','$message','$ip')";
        $req= mysql_query ($sql) or die ('Erreur SQL !<br>' .$sql.'<br>'.mysql_error() );

        echo "tous les champ sont bon";
    }
}
lidian
Auteur

Alors j'ai enlever les espaces sa change rien sinon les message pseudo et message s'affiche quand les champ son vide et envoie quand meme un message vide et le message de confirmations'affiche aussi quand ses rempli.

j'ai essayer le code mais sa plate tout erreur

Désolé, j'ai oublier de fermer une paranthese :

if(empty($pseudo) || empty($message)){
lidian
Auteur

Merci BlackDesign apparament sa fonctionne qu'elle etait le probleme pour info merci

Bah en faite, j'ai juste fait des vérification sur ce qui est poster.

// On vérifie que $_POST existe, et qu'il n'est pas vide
if(isset($_POST) && !empty($_POST)){
    extract($_POST);

    // Si le pseudo ou le message est vide
    if(empty($pseudo) || empty($message)){
        if(empty($pseudo)) { $erreurpseudo="Vous n'avez pas rempli votre nom"; } // Si c'est le pseudo qui est vide
        if(empty($message)) { $erreurmessage="Vous n'avez pas rempli votre message"; } // Si c'est le message qui est vide
    }
    // Sinon, tous va bien, et on peut exécuté le script
    else {
        $ip=$_SERVER "REMOTE_ADDR"];
        $sql="INSERT INTO livreor (pseudo,message,ip) VALUES (' $pseudo','$message','$ip')";
        $req= mysql_query ($sql) or die ('Erreur SQL !<br>' .$sql.'<br>'.mysql_error() );

        echo "tous les champ sont bon";
    }
}

J'espère que sa t'aide.

lidian
Auteur

merci beaucoup pour ton aide

Le problème est plus simple que cela. La superglobal _POST est toujours défini, donc isset ($_POST) sera toujours vrai. De plus vu que tu fait un formulaire, et que même si tu ne mets rien dans le champs, elle sera quand même présente dans le tableau _POST.

Voici un code qui devrai répondre à tes attentes.

<?php
    require_once ('config.php');
    mysql_connect (DB_SERVER, DB_LOGIN, DB_PASS) or exit ('Erreur SQL : Une erreur est survenue lors de la connexion.');
    mysql_select_db (DB_NAMES) or exit ('Erreur SQL : Une erreur est survenue lors de la selection de la base de données.');
    mysql_query ('SET NAMES' .DB_ENC) or exit ('Erreur SQL : Une erreur est survenue a la ligne : ' . __LINE__ );
    if (isset ($_POST 'message'], $_POST 'message']) && !empty ($_POST 'message']) && !empty ($_POST 'pseudo'])) {
        $_POST 'message']   = mysql_real_escape_string ($_POST 'message']);
        $_POST 'pseudo']    = mysql_real_escape_string ($_POST 'pseudo']);
        $requete_sql    = "INSERT INTO `livreor` (`pseudo`, `message`, `ip`) VALUES ('{$_POST 'pseudo']}', '{$_POST 'message']}', '{$_SERVER 'REMOTE_ADDR']}')";
        $sql    = mysql_query ($requete_sql) or exit ('Erreur SQL : Une erreur est survenue a la ligne '. __LINE__.'<br>'.mysql_error ());

    } else {
        // Erreur
    }