Comment rediriger une page php ? header ?

Bonjour,
header('Location: adressemsg.php'); ne fonctionne pas sur ma page !
est ce que je peux utiliser window.location sous une if de php ?
Configuration: Windows XP
Firefox 2.0.0.14

5 réponses

  1. header("Location: ... doit marcher. Un message d'erreur est-il affiché ? le fichier existe-t-il bien dans le même dossier que le script courant ?

    Window.location c'est du Javascript qui est donc exécuté en local après que le script PHP ne soit terminé sur le serveur et la page HTML affiché.
    1. voila ma page :

      <?php
      session_start();
      ?>
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml">
      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
      <title>Document sans titre</title>
      </head>

      <body>
      <?php
      $dest=$_POST['dest'];
      $pseudo=$_SESSION['pseudo'];
      $msg=$_POST['msg'];
      $db =mysql_connect('localhost','root','');
      mysql_select_db('tvs');

      $app=''; $tut='';

      $sql = "select pseudo from apprenant ";
      $req = mysql_query($sql);
      while($data=mysql_fetch_array($req))
      {
      if ($pseudo==$data['pseudo']){$app='ok';}
      }

      $sql = "select pseudo from tuteur ";
      $req = mysql_query($sql);
      while($data=mysql_fetch_array($req))
      {
      if ($pseudo==$data['pseudo']){$tut='ok';}
      }

      if (($app == 'ok' ) || ( $tut == 'ok' ))
      {
      $req= "INSERT INTO message VALUES ('','$pseudo','$dest','$msg');";
      mysql_query($req);
      }

      if (($app == '' ) && ( $tut == '' ))
      { header('Location: adressemsg.php');
      }
      ?>
      </body>
      </html>
    2. @ziedzicoest ce que je peux utiliser un script de window.location sous if ?
    3. @ziedzicoje voix cette page a l'ecran tte blache et il n'ya pas d'erreur
  2. Merci de "ta page" mais tu ne réponds pas à mes deux questions.
    1. et si je fais
      ?><script language="javascript">
      <!--
      window.location='adressemsg.php';
      //-->
      </script><?php

      entre les accolades de if la redirection se fait mais sans les conditions de if
  3. Seconde question : as-tu vérifié que le fichier cible était bien présent dans le même dossier que le script en cours ?
    Quelques remarques sur ton script :

    1.il serait préférable de faire les tests dans les select mysql :
    $sql = "select pseudo from apprenant where pseudo = '" . $pseudo . "'";
    $req = mysql_query( $sql );
    if( mysql_num_rows( $req ) >= 1 )
    	$app = 'ok';
    else
    	$app = '';
    
    $sql = "select pseudo from tuteur where pseudoo='" . $pseudo . "'";
    $req = mysql_query($sql);
    if( mysql_num_rows( $req ) >= 1 )
    	$tut = 'ok';
    else
    	$tut = '';
    


    2. Il serait préférable de formatter ton script de manière à montrer les blocs logiques : tu y gagneras au deboguage

    3. le header serait mieux avant toute sortie html. Ce qui donnerait qqch comme :

    <?php
    session_start();
    $dest = $_POST['dest'];
    $pseudo = $_SESSION['pseudo'];
    $msg = $_POST['msg'];
    $db = mysql_connect( 'localhost', 'root', '');
    mysql_select_db( 'tvs' );
    
    $sql = "select pseudo from apprenant where pseudo = '" . $pseudo . "'";
    $req = mysql_query( $sql );
    if( mysql_num_rows( $req ) >= 1 )
    	$app = 'ok';
    else
    	$app = '';
    
    $sql = "select pseudo from tuteur where pseudoo='" . $pseudo . "'";
    $req = mysql_query($sql);
    if( mysql_num_rows( $req ) >= 1 )
    	$tut = 'ok';
    else
    	$tut = '';
    
    if( ($app == 'ok' ) || ( $tut == 'ok' ) )
    	{
    	$req= "INSERT INTO message VALUES ('','$pseudo','$dest','$msg');";
    	mysql_query($req);
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    	<html xmlns="http://www.w3.org/1999/xhtml">
    	<head>
    		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    		<title>Document sans titre</title>
    	</head>
    	<body>
    		Insertion effectuée
    	</body>
    </html>
    <?php
    	}
    
    if( ($app == '' ) && ( $tut == '' ) )
    	header('Location: adressemsg.php');
    ?>
    
    1. merci bien, je vais voir si ca marche.
    2. insertion effectuée pourtant le pseudo est faux
  4. Retrousse tes manches : place des echo aux endroits judicieux de ton script pour voir comment il se comporte et détecter où un pb se pose.
    1. Le header doit être inséré seulement au début de ton script php, sans que ton html ne soit entamé... sinon il ne fonctionnera pas et le header sert à google au référencement, alors je doute que ce soit une bonne idée d'utiliser cette fonction