Bonjour mes chers amis.
Dans mon code suivant le deuxième if ne fonctionne pas de même que le else pourtant je l'ai bien écrit . la condition n'est toujours pas fonctionnelle. Aidez-moi svp.voici le formulaire et son traitement.

<form method="post" action="post.php?id=<?php echo $_GET['id'];?>">
<input type="text" name="pseudo" placeholder="votre pseudo" id="text" size="45" maxlength="30"/> <br/>
<textarea name="cont_com" >

</textarea><br/>
<input type="submit" name="envcom" value="Envoyer" />

</form>
if(isset($_POST['envcom']))
{
if(isset($_POST['pseudo']) AND !empty($_POST['pseudo']) AND isset($_POST['cont_com']) AND !empty($_POST['cont_com']))
{
$pseudoS = utf8_encode(mysql_escape_string($_POST['pseudo']));
$cont_comS = htmlspecialchars($_POST['cont_com']);

$req = $bdd->prepare("INSERT INTO commentaires(id, cont_com, aut_com, dat_com, id_art) VALUES('', :cont_com, :aut_com, '',:id_art)");

$req->execute(array( 
'cont_com' => $cont_comS,
'aut_com' => $pseudoS,
'id_art' => $info_article['id']

)) or die(mysql_error());
header('Location: post.php?id='.$_GET['id'].'');

}
else 
{

echo "Tous les champs sont obligatoires.";
}

}

?>

4 réponses


Si tu ne rentres pas même dans la première condition, le problème se situe avant. Pourrais-tu poster le formulaire avec ?

Bonsoir,

Etes-vous sûr d'atteindre ce 2ème if ? Rentre-t-il déjà dans le 1er ?

zakou3
Auteur

pardon je viens d'ajouter le script du formulaire . aidez moi svp.

Bonjour, bonjour, :)

Je ne vois pas de grosse faute dans ton code... Pour ma part je n'ai aucun problème sur mon serveur avec ce fichier :

<?php

if(isset($_POST['envcom']))
{
if(isset($_POST['pseudo']) AND !empty($_POST['pseudo']) AND isset($_POST['cont_com']) AND !empty($_POST['cont_com']))
{
echo '<h1>Je suis dedans</h1>';

}
else 
{

echo "Tous les champs sont obligatoires.";
}

}

?>

Quelles informations utilent :

Pour commencé, mysql_escape_string et mysql_error sont à utilisé si tu utilises l'extension mysql de php. Mais tu n'utilises pas cette extension, tu utilises l'extension pdo... ;)

Ensuite, un htmlspecialchars ne doit être utilisé qu'a l'affichage de données et non lors de l'insertion en base de données... :-°

Pourquoi tester si la valeur de ton boutton est défini ? Dès que l'utilisateur clique sur le bouton, TOUTES les variables POST sont créer... Donc d'après la conjoncture de la confiture, si la variable contenant le "clique du bouton" existe alors le pseudo aussi...

Pourquoi faire un isset suivi d'un empty ?
La doc' sur empty dit ceci :

Retourne FALSE si var existe et est non-vide, et dont la valeur n'est pas zéro. Ce qui suit est considéré comme étant vide :

  • "" (une chaîne vide)
  • 0 (0 en tant qu'entier)
  • 0.0 (0 en tant que nombre à virgule flottante)
  • "0" (0 en tant que chaîne de caractères)
  • NULL
  • FALSE
  • array() (un tableau vide)
  • $var; (une variable déclarée, mais sans valeur)

Isset fais la même chose mais avec moins de restriction.

On peux donc rendre ton code "plus clair" en suivant ces quelques conseils (tu en fais ce que tu veux ;) ) comme ceci :

<?php

if(!empty($_POST['pseudo']) AND !empty($_POST['cont_com'])){
    $pseudoS = utf8_encode($_POST['pseudo']);   //a la rigueur tu peux la garder même si je ne vois pas pourquoi...
    $cont_comS = $_POST['cont_com'];

    //Gestion des erreurs...
    try{
        $req = $bdd->prepare("INSERT INTO commentaires(id, cont_com, aut_com, dat_com, id_art) VALUES('', :cont_com, :aut_com, '',:id_art)");

        $req->execute(array( 
            'cont_com' => $cont_comS,
            'aut_com' => $pseudoS,
            'id_art' => $info_article['id']
        ));     
    }
    catch(PDOException $e){
        die($e->getMessage());
    }

    header('Location: post.php?id='.$_GET['id'].'');
}
else {
    echo "Tous les champs sont obligatoires.";
}

?>

Voilà voilà. Bonne continuation. :)

Cordialement.