[php débutant] formulaire avec mess. d'erreur (tp minichat siteduzero)

formulaire avec mess. d'erreur (tp minichat siteduzero) [php débutant] - PHP - Programmation

Marsh Posté le 04-02-2012 à 11:14:56    

Salut à tous,
 
j'essaie de comprendre comment fonctionne le php depuis peu, et je lis donc le site du zero.
 
Depuis quelques jours j'essaie de refaire le tp "mini chat" en apportant quelques modifications. ( http://www.siteduzero.com/tutoriel [...] -chat.html )
 
Ya une modif que je n'arrive absolument pas à faire...
C'est envoyer un message d'erreur quand les gens valident sans rien mettre dans les form.
 
Ce que j'ai réussi à a faire, c'est éviter la moindre modification si ya rien (on valide, mais rien ne se passe). Mais je voudrais en plus rajouter un message d'erreur (ex: "Il manque ton nom" ).
 
Pouvez-vous m'expliquer comment faire ca, car là je suis completement bloqué...
 
Merci beaucoup :)
 

Reply

Marsh Posté le 04-02-2012 à 11:14:56   

Reply

Marsh Posté le 04-02-2012 à 11:17:12    

Je précise le code pour la modif faite :

 

dans la mage minichat_post :

Code :
  1. <?php
  2. // Connexion à la base de données
  3. try
  4. {
  5.     $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
  6.     $bdd = new PDO('mysql:host=localhost;dbname=test2', 'root', '', $pdo_options);
  7.     if($_POST['pseudo']!="" AND $_POST['message']!="" )
  8. {
  9.     // Insertion du message à l'aide d'une requête préparée
  10.     $req = $bdd->prepare('INSERT INTO minichat (pseudo, message) VALUES(?, ?)');
  11.     $req->execute(array($_POST['pseudo'], $_POST['message']));
  12.    
  13.     // Redirection du visiteur vers la page du minichat
  14.     header('Location: minichat.php');
  15. }
  16. else
  17. {
  18. header('Location: minichat.php');
  19. }
  20. }
  21. catch(Exception $e)
  22. {
  23.     die('Erreur : '.$e->getMessage());
  24. }
  25. ?>


Message édité par benbigboss le 04-02-2012 à 11:56:27
Reply

Marsh Posté le 04-02-2012 à 11:31:11    

Un truc assez simple à faire pour cela (je pense) :
 

Code :
  1. else
  2. {
  3.     header('Location: messages.php');
  4.     if($_POST['pseudo']=="" )
  5.     {
  6.        echo '<p><strong>Renseignes ton pseudo, s'ilteplease </strong></p>';
  7.     }
  8.     else
  9.     {
  10.        echo '<p><strong>Ecris un message, au moins :D </strong></p>';
  11.     }
  12. }


 
Ca fait un petit moment que j'ai pas fait de php, mais logiquement ça devrait marcher :-)


Message édité par adwer le 04-02-2012 à 11:32:17
Reply

Marsh Posté le 04-02-2012 à 11:57:47    

En fait j'avais pensé à faire ca, mais comme là on est dans le fichier minichat_post.php (donc pas celui qui contient le formulaire et les messages), le echo n'apparait jamais sur la page visible...

Reply

Marsh Posté le 04-02-2012 à 12:36:53    

J'avais pas tilté, j'avoue :p
Ce que tu peux faire, à ce moment la, c'est préciser dans la redirection qu'y a une erreur, ta redirection pourrait ressembler à ça :  
 
header('Location: minichat.php?error=nom');
 
et tu récupères le code d'erreur avec un $_GET['error'], que tu testes pour savoir si tu dois afficher un message d'erreur

Reply

Marsh Posté le 04-02-2012 à 13:27:13    

Ha oui !
Très bonne idée !
 
En revanche, ca renvoie un messsage d'erreur quand je charge le page pour la première fois car la variable error n'est pas définie.
Dur l'apprentissage du php !

Reply

Marsh Posté le 04-02-2012 à 13:34:53    

Pour savoir si une variable est définie, t'as la fonction isset(taVariable) :)


Message édité par adwer le 04-02-2012 à 13:35:12
Reply

Marsh Posté le 04-02-2012 à 14:09:05    

Oui j'utilise
if(isset($error)
{echo $error;}
else
{...}
mais ca ne semble pas fonctionner...
 
Sinon, je pensais à definir la variable error ="" sur la page minichat, et quand on valide, la variable prend une autre valeur selon que les form sont remplies ou non...
 
Possible de définir $error=="" dès le 1er chargement de minichat ?
 
Merci beaucoup :)

Reply

Marsh Posté le 04-02-2012 à 14:28:30    

Tu dois faire isset($_GET['error'])  pour récupérer la valeur de error depuis  l'URL, c'est bien ce que tu fais ?

Reply

Marsh Posté le 04-02-2012 à 14:38:53    

oui oui tout à fait,

 

mais au premier chargement de la page, c'est à dire quand j'appelle la feuille minichat.php, l'url ne contient que www.[]/minichat.php, il n'y a donc pas de variable error, d'où le message d'erreur sur la page...


Message édité par benbigboss le 04-02-2012 à 14:39:20
Reply

Marsh Posté le 04-02-2012 à 14:38:53   

Reply

Marsh Posté le 04-02-2012 à 14:50:38    

ouais, mais isset devrait vérifier si ta variable existe, enfin d'après mes souvenirs... C'est bizarre :/

Reply

Marsh Posté le 04-02-2012 à 15:07:04    

En fait, j'ai trouvé, tu m'as vraiment bien aidé, merci !
 
Je vais pointer toutes mes pages vers www.[]/minichat.php?error=
et faire un echo $error;
 
Comme ca, rien n'apparait,
et quand les formes sont vides, ca renverra un minichat.php?error=il manque un nom !'); (ddans le header:('location).
 
Merci beaucopu !
 
Reste plus qu'à comprendre comment mettre des accents dans l'url
 
A+
 
 

Reply

Marsh Posté le 04-02-2012 à 15:57:41    

Ca marche, bien trouvé, j'y avais pensé mais je trouvais ça moche :p
A+

Reply

Marsh Posté le 04-02-2012 à 18:18:31    

Halala

 

Maintenant, quand j'envoie mon site sur le serveur (1and1), j'ai une erreur

Citation :

Warning: Cannot modify header information - headers already sent by (output started at /homepages/45/dXXXXXX//htdocs/minichat_post.php:5) in /homepages/45/dXXXXXX/htdocs/minichat_post.php on line 23

 

Pourtant mon code fonctionne bien chez moi !

 
Code :
  1. <html>
  2. <meta charset="utf-8" />
  3. <?php
  4. try
  5. {
  6.     $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
  7.     $bdd = new PDO('mysql:host=ddbXXX.1and1.com;name=dbXXXX', 'dbXXXXX', 'YYYYYY', $pdo_options);
  8.     if($_POST['pseudo']!="" AND $_POST['message']!="" )
  9. {
  10.  
  11.     $req = $bdd->prepare('INSERT INTO commentaires (pseudo, message) VALUES(?, ?)');
  12.     $req->execute(array($_POST['pseudo'], $_POST['message']));
  13.    
  14.    
  15.     header('Location: messages.php?erreur=');
  16. }
  17. else
  18. {
  19. header('Location: messages.php?erreur=message d'erreur');
  20. }
  21. }
  22. catch(Exception $e)
  23. {
  24.     die('Erreur : '.$e->getMessage());
  25. }
  26. ?>
  27. </html>
 

Une idée ?
car là aussi totaly blocked !


Message édité par benbigboss le 04-02-2012 à 18:20:28
Reply

Marsh Posté le 04-02-2012 à 18:31:08    

Ha bah c'est bon,
 
Je devais supprimer <html> et <meta>
 
Cool !Tout fonctionne, merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed