Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
666 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Redirection de page après formulaire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Redirection de page après formulaire

n°1501599
tease_part​y
TT un jour, TT toujours
Posté le 11-01-2007 à 09:08:14  profilanswer
 

Salut,
 
Je dois me connecter à mon compte via un formulaire. Quand les données entrées ne sont pas valide j'aimerai que l'utilisateur soit redirigé vers une autre page. Seulement, j'ai l'erreur suivante:
 

Citation :

Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'root1'@'localhost' (using password: NO) in /var/www/ouverture.php on line 2
 
Warning: Cannot modify header information - headers already sent by (output started at /var/www/ouverture.php:2) in /var/www/ouverture.php on line 6


 
Donc la première est normale, puisque le login est mauvais OK, mais la deuxième j'ai du mal à piger. Il me dit que quelque chose à déjà était envoyé dans le header. Voici le code:
 

Citation :

<html>
<?php $connexion = mysql_connect($_POST["serveur"], $_POST["utilisateur"], $_POST["password"]);
   if ($connexion>0)
 echo "<br />Connection effectuee le <font color=\"orange\"><b>".date("d/m/y - H:i:s" )."</b></font>";  
   else
 header("location: redir.php" );
 exit;?>  
<head>...


 
Si je met la redirection avant tout forcément elle fonctionne, mais dans mon cas précis je suis obligé de vérifier si les données entrées dans le formulaire sont bonnes. Donc comment pourrais-je faire pour vérifier les données et rediriger si celles ci ne sont pas bonnes ?
 
 :jap:

mood
Publicité
Posté le 11-01-2007 à 09:08:14  profilanswer
 

n°1501600
FlorentG
Unité de Masse
Posté le 11-01-2007 à 09:18:59  profilanswer
 

Il ne faut jamais envoyer quelque chose au client avant de toucher aux headers, c'est logique. Pour ça, il y a l'output buffering qui permet de tout stocker dans un buffer. Ou alors coder proprement [:dawak] D'abord tester les données, et suivant le résultat inclure le code HTML à générer.

 

Accessoirement, tu utilises un header Location, qui va utiliser un '302 Permanently Moved', ce qui n'est pas conseillé, suivant la recommendation HTTP 1.1. Il faut utiliser un 303 See Other, valide après une requête POST. De plus, l'url doit être absolue :

Code :
  1. header('Location: http://pouet.com/redir.php', true, 303);


Message édité par FlorentG le 11-01-2007 à 09:19:09
n°1501604
tease_part​y
TT un jour, TT toujours
Posté le 11-01-2007 à 09:29:13  profilanswer
 

Merci pour les infos. Enfait J'ai compris le principe qu'il ne fallais rien envoyer avant que ce soit redirigé, mais là, je dois tester si les données sont valides. Si elles y sont j'accède à ma page (le reste du code), soit je redirige vers redir.php. Donc je suis obligé de mettre quelque chose avant le header().

 
Citation :

<html>
<?php $connexion = mysql_connect($_POST["serveur"], $_POST["utilisateur"], $_POST["password"]);
   if ($connexion>0)
 echo "<br />Connection effectuee le <font color=\"orange\"><b>".date("d/m/y - H:i:s" )."</b></font>";
   else
 header('Location: http://localhost/redir.php', true, 303);
 exit;
?>
<head>

 

Puisque je fais un test avant l'éventuel redirection, comment puis-je faire ?
 :sweat:

Message cité 1 fois
Message édité par tease_party le 11-01-2007 à 09:29:23
n°1501613
FlorentG
Unité de Masse
Posté le 11-01-2007 à 10:05:45  profilanswer
 

tease_party a écrit :

mais là, je dois tester si les données sont valides. Si elles y sont j'accède à ma page (le reste du code), soit je redirige vers redir.php. Donc je suis obligé de mettre quelque chose avant le header().


C'est qu'il y a un défaut de conception... Dès qu'on envoie quelque chose (un simple <html> suffit), les headers sont envoyés, donc on ne peut plus y toucher. Le truc pas normal :D, c'est que t'affiche un <html>, alors que tu ne sais pas encore si les données sont valides ou pas, donc problème :(

 

On peut reformuler tout ça en :

Code :
  1. <?php
  2.  $connexion = mysql_connect($_POST["serveur"], $_POST["utilisateur"], $_POST["password"]);
  3.  
  4.  if(!$connexion) {
  5.    header('Location: http://localhost/redir.php', true, 303);
  6.    exit();
  7.  }
  8. ?><html>
  9.  
  10. <br />Connection effectuee le <font color="orange"><b><?php echo date('d/m/y - H:i:s') ?></b>


Message édité par FlorentG le 11-01-2007 à 10:05:57
n°1501616
tease_part​y
TT un jour, TT toujours
Posté le 11-01-2007 à 10:26:10  profilanswer
 

Ah oui j'avais pas vue ca comme ca  :) . Enfait j'avais testé en mettant le HTML après le php, mais ca ne fonctionnait pas non plus. J'avais lu sur le net que c'était à cause de l'utilisation du echo dans mon if. Seulement, même avec ta solution, le truc ne fonctionne pas:
 

Citation :


<?php
 $connexion = mysql_connect($_POST["serveur"], $_POST["utilisateur"], $_POST["password"]);
 if(!$connexion) {
 header('Location: http://localhost/redir.php', true, 303);
 exit();
 }
?>
<html>
<head>[...]


 

Citation :

Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'root1'@'localhost' (using password: NO) in /var/www/ouverture.php on line 2
 
Warning: Cannot modify header information - headers already sent by (output started at /var/www/ouverture.php:2) in /var/www/ouverture.php on line 4


 
Es que ca serai pas du à l'erreur générée par le mauvais login ou mdp ? Puisque le message: Warning: mysql_connect() [func... est écrit automatiquement peut être que sa écrit dans le header, et du coup sa fait pas la redirection . Es qu'il existe un moyen de ne pas afficher ce message d'erreur ?
 
Sinon je ne comprend pas car il n'y a absolument rien devant le <?php, même pas un saut de ligne, un caractère ... rien  :pt1cable:  

n°1501618
FlorentG
Unité de Masse
Posté le 11-01-2007 à 10:27:47  profilanswer
 

Et voilà :D L'erreur cause l'envoi des headers :D Là on rentre dans la gestion des erreurs plus complexe :

  • Désactivation par @ (bof)
  • error_handler custom
  • Désactivation des erreurs (nécessaire en prod)

n°1501622
tease_part​y
TT un jour, TT toujours
Posté le 11-01-2007 à 10:44:30  profilanswer
 

:cry:  
 
Bon alors là c'est la merde, j'ai regardé sur le net je trouve rien pour désactiver les messages "warning" de mysql. Le code est compliqué à mettre en oeuvre pour dégager le message qui me gène ?

n°1501671
chani_t
From Dune
Posté le 11-01-2007 à 12:31:32  profilanswer
 

raaa... au lieu de chercher à ne pas afficher les erreurs, cherche plutôt à les résoudre... ici c'est juste un soucis d'autorisation d'accés à ta bdd... résoud ça et tu n'auras plus de soucis ;)
 
sinon pour désactiver le revois d'erreurs 2 soluces.... :
1 - tu as accés au serveur, et tu peux modifier son fichier d'initialisation... ben tu modifie la ligne error reporting il me semble...
 
2 - tu fais un ini_set sur justement l'error reporting.. voir ICI
 
Ce que j'ais pour la phase de test :

Code :
  1. error_reporting (E_ALL | E_STRICT);      //filtrage des erreurs reportées
  2.   ini_set('display_errors', true);      //affichage des erreurs
  3.   ini_set('html_errors', false);       //désactivation des liens html dans les erreurs
  4.   ini_set('display_startup_errors',true);     //affichage des erreurs de démarrage
  5.   ini_set('log_errors', true);       //création d'un fichier de log
  6.   ini_set('error_log', 'journal/error.log');    //localisation du fichier de log
  7.   ini_set('error_prepend_string','<font color="red">'); //début mise en forme erreur
  8.   ini_set('error_append_string','</font>');    //fin mise en forme erreur
  9.   ini_set('ignore_repeated_errors', true);     //ignorer les erreurs répétées


Pour ma phase en prod :

Code :
  1. error_reporting (E_ALL);        //filtrage des erreurs reportées
  2.   ini_set('display_errors', false);      //affichage des erreurs
  3.   ini_set('html_errors', false);       //désactivation des liens html dans les erreurs
  4.   ini_set('display_startup_errors',false);    //affichage des erreurs de démarrage
  5.   ini_set('log_errors', true);       //création d'un fichier de log
  6.   ini_set('error_log', 'journal/error.log');    //localisation du fichier de log
  7.   ini_set('error_prepend_string','<font color="red">'); //début mise en forme erreur
  8.   ini_set('error_append_string','</font>');    //fin mise en forme erreur
  9.   ini_set('ignore_repeated_errors', true);    //ignorer les erreurs répétées


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Redirection de page après formulaire

 

Sujets relatifs
[PERL] Timeouts et redirection de STDOUT et STDERRRedirection dans une image?
comment raffraichir une seule partie d une page wew[C# .NET 2.0] Un contrôle ajouté disparaît qd on reload la page
[php] ouvrir une page d'un site hebergé sur OVHInterface connection serveur ftp. formulaire html + variable JS
verification de formulaire assez spécialeImprimer formulaire
Formulaire tag HTMLFormulaire qui crée une page
Plus de sujets relatifs à : Redirection de page après formulaire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR