Fonction header () pour rediriger

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Fonction header () pour rediriger

par alaingpl » 14 avr. 2007, 23:49

Cela peut paraître "idiot" mais essayes avec des doubles quotes.
<?php 
header("Location: connexion.php"); 
?>

par dannowel » 14 avr. 2007, 16:12

Personne aurait une autre idée ? Problème de serveur local peut-être ?

UP !

Merci.

par dannowel » 10 avr. 2007, 07:49

Ryle :

C'est un problème de copier/coller de ma part désolé. Je peux t'assurer qu'au nombre de jours que je me suis cassé la tête pour ce problème que le <?php est bien coller dans le haut :P

Aureusms
Non, ma page n'Est pas inclue dans une autre, le traitement des données se fais dans le même fichier.

Existe-il une fonction pour voir ce qu'il y a dans le fameux header ?

Merci!

par Aureusms » 09 avr. 2007, 11:19

Bonjour, j'ai vite lu mais je n'est pas vu cette question : Ta page n'est pas inclue dans une autre ?

par Ryle » 09 avr. 2007, 10:33

Euh... ben là on voit clairement qu'il y a une ligne blanche avant ton "<?php" ... donc un retour à la ligne... donc l'envoi de données (même vide, même si retour charriot, même si espace, même si...) au navigateur avant l'appel au header() ... d'où le message d'erreur ;)

Les premiers caractères de ta première ligne, le tout début du début de ton fichier - que si tu pouvais écrire avant c'est que t'es pas encore au bon endroit ;) - doivent être "<?php" :)

par dannowel » 09 avr. 2007, 09:54

Voilà pour le test que j'ai fais:

Code : Tout sélectionner

<?php header('Location: connexion.php'); ?>
Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\profil\test.php:1) in c:\program files\easyphp1-8\www\profil\test.php on line 2
Et voici pour mon script:

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at c:\program files\easyphp1-8\www\profil\connexion.php:1) in c:\program files\easyphp1-8\www\profil\connexion.php on line 8

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\program files\easyphp1-8\www\profil\connexion.php:1) in c:\program files\easyphp1-8\www\profil\connexion.php on line 8
:arrow: output started at c:\program files\easyphp1-8\www\profil\test.php:1
Ça pointe étrangement au même endroit...

Merci !

par Cyrano » 09 avr. 2007, 08:55

Bon attends, procédons par ordre : ton message d'erreur indique une ligne précise dans un fichier clairement identifié : l'erreur se produit donc sur ladite ligne ou avant : ton fichier qui redirige vers connexion.php génère la même erreur, dis-tu : quelle erreur exactement ? Nous montrerais-tu l'intégralité du message ?

par dannowel » 09 avr. 2007, 08:37

Merci pour votre soutien!

Expreg:
Merci pour le tuyau, il est génial le programme! ;)

Cyrano:
J'ai essayé avec:

Code : Tout sélectionner

if(isset($_POST['connexion']) && (isset($_POST['utilisateur']) && !empty($_POST['utilisateur'])) && (isset($_POST['motpasse']) && !empty($_POST['motpasse'])))


mais ça me donne toujours les erreurs et ce, même si je met session_start(); avant ou après la condition...

Ryle:
Est-ce que ton fichier connexion.php est appellé en direct ? ou bien ne serait-il pas inclu par un autre script qui enverrait les en-têtes (genre pseudo-frames), te privant de ces fonctionnalités ?
Effectivement, j'appèle directement le fichier avec la fonction "Web local" d'Easyphp. Le seul code que je vois qui pourrait être gênant est le code html, mais comme je l'ai mentionné plus tôt le code suivant ne fonctionne pas non plus...

Code : Tout sélectionner

<?php header('Location: connexion.php'); ?>
Existe-il une fonction pour vérifier ce qu'il y a dans le header ? Est-ce que ob_start pourrait régler le problème ? Si oui comment l'utiliser ?


Merci encore !

:wink:

par Ryle » 08 avr. 2007, 11:31

Vous avez raison tous les deux, empty() est différent de isSet() et ne permet pas de savoir si une variable est définie ou non, mais elle ne génère pas de message d'alerte si elle ne l'est pas ;)
empty() est l'opposé de (boolean) var, excepté le fait qu'aucune alerte n'est générée lorsqu'une variable n'est pas définie.
Je suis d'accord avec Cyrano sur le fait que ca soit pas super logique, mais null est bien automatiquement considéré comme une chaine vide et pas comme un null pointer exception...

En revanche pour en revenir au problème, il suffit que l'index appellé dans $_POST n'existe pas pour générer le warning.. mais dans ce cas il le verrait apparaitre à l'écran. S'il ne le voit pas, c'est que les alertes sont désactivées, et les header() et session_start() devraient fonctionner...

Est-ce que ton fichier connexion.php est appellé en direct ? ou bien ne serait-il pas inclu par un autre script qui enverrait les en-têtes (genre pseudo-frames), te privant de ces fonctionnalités ?

par Expreg » 08 avr. 2007, 10:21

Ma config est en error_reporting E_ALL, donc je devrais donc avoir un warning :(
<?php
// $var='';
if(isset($var))
{
echo '$var définie';
}
else
{
echo '$var pas définie';
}
//===============
echo '<hr />';
//===============
if(!empty($var))
{
echo '$var définie';
}
else
{
echo '$var pas définie, ou vaut 0 ou est vide';
}
?>
A l'affichage ça donne :
$var pas définie
$var pas définie, ou vaut 0 ou est vide

par Cyrano » 08 avr. 2007, 09:47

Tu utilises empty() mais sans vérifier au préalable si l'index existe :
Bah c'est bon !
!empty() vérifie bien que les variables existent ! (pas besoin de isset()) :wink:
Objection votre honneur : isset() vérifie l'existence, empty() vérifie le contenu d'une variable existante et si elle n'existe pas, empty va renvoyer true mais génèrera également un warning.

par Expreg » 08 avr. 2007, 09:33

Tu utilises empty() mais sans vérifier au préalable si l'index existe :
Bah c'est bon !
!empty() vérifie bien que les variables existent ! (pas besoin de isset()) :wink:

par Cyrano » 08 avr. 2007, 09:30

Je serais tenté de croire que si tu obtiens un message d'erreur à la ligne où tu as mis ton session_start(), c'est parce que tu as une erreur envoyée depuis la précédente ligne :
<?php


if(isset($_POST['connexion']) && (!empty($_POST['utilisateur'])) && (!empty($_POST['motpasse'])))
{  
   session_start();
    //.....
Tu utilises empty() mais sans vérifier au préalable si l'index existe : en débuggage strict, ça génère un warning... qui fait planter le session_start().

La solution serait la suivante :
-1- Commencer par mettre le session_start() au début de toutes façons;
-2- vérifier l'existence d'une variable pour pouvoir tester si elle est vide ou non

Ça va donner :
<?php
session_start();
if(isset($_POST['connexion']) && 
  (isset($_POST['utilisateur']) && !empty($_POST['utilisateur'])) && 
  (isset($_POST['motpasse']) && !empty($_POST['motpasse']))
)
{  
    //....

par Expreg » 08 avr. 2007, 09:22

Je viens de copier/coller ton premier pavé de code et en dehors d'un problème (de syntaxe il me semble) avec ton js justement, la page s'affiche correctement.

Au lieu d'utiliser ton bloc-note, utilises un outil un peu plus adapté permettant une coloration syntaxique.
Tiens, vas voir ça, c'est gratos et en français :
Notepad++

par dannowel » 08 avr. 2007, 08:27

Je viens de faire un test avec seulement le code ci-dessous et je l'ai loadé avec EasyPHP et j'ai la même erreur, donc j'ai un gros :?: qui me vient à l'esprit ! :?

Code : Tout sélectionner

<?php header('Location: connexion.php'); ?>
Rendu où j'en suis, je mentionne aussi que je code mes scripts avec le bon vieux Bloc-Note si ça peut aider


Merci !