8717 sujets

Développement web côté serveur, CMS

salut, j'ai fait un formulaire pour un livre d'or. Le script de contrôle est en PHP. Le script PHP est avec le HTML sur la même page (livredor.php). Tout fonctionne bien SAUF lorsque je renvoie des champs vides ou manquants. Mon but est de réafficher la page avec le formulaire puisque les champs sont vides. Mais l'affichage de la nouvelle page se fait en dessous de celle en cours. Donc je vois deux fois ma bannière un en dessous de l'autre.
J'utilise la fonction INCLUDE(./livredor.php) pour réafficher le formulaire s'il est vide. Avant je voulais utiliser HEADER(location:./livredor.php) mais j'ai un message d'erreur: "Warning,......"
En bref, mon but est de rediriger l'internaute vers le formulaire d'origine s'il fait une erreur ou un oubli dans les champs. Rien d'autre que cela. Voici ci-après le code PHP du script:

.........
.............. HTML avec la bannière et le formulaire
.....................



<?php

// Partie PHP après validation du formulaire, fichier invoqué "message.php"


// Mettons le (future) fichier dans une variable
$commentaires="messages.txt";

// assignons nos 2 variables du formulaire et on en profite pour les protégers des balises HTML
$pseudo=htmlentities($_POST['pseudo']);
$prenom=htmlentities($_POST['prenom']);
$titre=htmlentities($_POST['titre']);
$mail=htmlentities($_POST['mail']);
$message=htmlentities($_POST['message']);

// Pensons au retour à la ligne et au stripslashes pour la variable $message
$message=stripslashes(nl2br($message));

// On met en place quelques conditions pour les cellules (nom et message)
// On vérifie avant tout si le fichier existe si ce n'est pas le cas on le crée
if(!is_file($commentaires))
{
$verif=@fopen($commentaires,"w+");
}

// On vérifie que le login ou le message ne soient pas vide
elseif (trim($message)=="" || trim($pseudo)=="" || trim($prenom)=="" || trim($mail)=="" || trim($titre)=="")
{

include('./livredor.php');
// On sort du script !
exit;
}

// Après ces quelques vérification d'usage on passe à l'exécution de ce formulaire


// Si ok on ouvre en écirture-enregistrement du fichier message.txt
$verif=@fopen($commentaires,"r+");

// On analyse les anciennes données et on les stocks
$stock=@fread($verif,filesize($commentaires));

// On met la date dans une varialbe
$date=date ("d/m/Y um H:i");

// On paramètre le tout dans la variable $opinion
$opinion="<b>".$prenom."</b>"." "."<b>".$pseudo."</b> a écrit le : ".$date."<br />\n".$message."<br />\n<hr />";

// On remet le curseur du fichier en début de ligne
rewind($verif);

// On insère le nouveau commentaire
fputs($verif,$opinion." \n".$stock);

// On clore le fichier
fclose($verif);

// On affiche le tout
readfile($commentaires);


?>

</body>
</html>



Merci de votre aide
Ton système est presque correct, sauf que si ton champ est vide il faut initialiser une variable, par exemple $erreur_champ_nom à 1, et dans ta partie HTML tu inclus un code de ce genre


<?php
  if(isset($erreur_champ_nom)){
    if($erreur_champ_nom == 1){
      echo 'Le champ nom n\'est pas rempli';
    }
  }
?>


avant/après ou dedans le champ nom.

Ca te permettra de n'avoir qu'un seul formulaire.

Ai-je été assez clair? Smiley smile
Modifié par Mr A (21 Jan 2006 - 17:05)
@midiweb

Est-ce que tu pourrais baliser ton code avec le BBCode [ code][/code ] (sans les espaces) comme spécifié dans les règles du forum* ?

Ça le rendra plus lisible.

upload/1-code.gif

Merci.

* que tu as lues et approuvées en t'inscrivant.