Salut a tous ! voila j'ai u petit souci avec les redirections en php puisque j'utilise une reecriture d'url du coup ca plante a chaque que j'essai de faire quelque chose du genre

header('location:/index');

Merci

26 réponses


kewai
Réponse acceptée
$message =  extract($_SESSION['flash']);

Là tu l'as, ton tableau ;)

Ben c'est logique en plaçant /index ca va te rediriger vers ton domaine/index.
Si ton routing n'est pas réalisé de la sorte, ben c'est pas gagné.

Si tu veux rester dans le même répertoire met juste : index
Si tu veux remonter d'un : ../index
Si tu veux carrement ailleur : /dossier-site/ailleur/index

merci. je teste et je fais un retour mais néanmoin je vous presente le code de mon htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]

loOl oui dans mon code c'est bien mis Location

Alors déjà pour que le code fonctionne logiquement :

<?php
header('Location:index.php');
?>

Cela devrait marcher car tu as mis /index qui redirige dans le dossier "index" et non le fichier index.php, fin je crois que c'est ça l'erreur..

Perso, je mets toujours l'URL complète dans mes redirections !

<?php
header('Location: http://www.mondomaine.com/');

De plus après ta redirection, n'oublie pas de mettre un exit; car il se peut que ton script continu de tourner un peu.

EDIT : et surtout il ne faut pas faire d'affichage avant ton header() sinon ça génére une erreur aussi.

JeremDevWeb exactement je dis que j'ai fichier htaccess. j'ai tester la solution de JacobDelCroix et ca marche seule probleme c'est que mon message flash ne marche pas voila le code

<?php
class Session{

    public function __construct(){
        session_start();

    }

    public function setFlash($message,$type = 'success'){

        $_SESSION['flash'] = array(
            'message'=>$message,
            'type'   => $type
             );

        ob_start();

            $render = $_SESSION['flash']['message'];

            require  root.ds.'app'.ds.'Vues'.ds.'Elements'.ds.$_SESSION['flash']['type'].".php";

            $_SESSION['flash']['message'] = ob_get_clean();
    }

    public function flash(){
        if (isset($_SESSION['flash'])) {

            echo $_SESSION['flash']['message'];

                unset($_SESSION['flash']);
        }  
    }

}

lorsque je fais $session->flash() il devrait normalement me retourner les message flash mais il ne le fais pas a cause de la redirection or moi j'aimerai bien avoir le message apres la redirection et lorsque j'actualise la page que le message disparaisse

Tu n'as pas oublié le exit; après ton header() ? Sinon fait nous voir le code qui enregistre le message flash et qui redirige aussi.

voila

$this->Session->setFlash("Nous avons bien recu votre demande !","success");
 var_dump(header("Location: index"));
 exit;

var_dump() ? pourquoi ?

Oups pardon j'avais completement oublier de l'enlever mais meme sans le probleme demeure

Hello,

Il va falloir que tu commences à être un peu plus précis, car ca devient vachement fouilli !

As-tu des messages d'erreurs => si oui lesquelles?
Comment/sur quels fichiers tu gères ton setFlash(), redirection et flash() ?
N'hésite pas à non montrer l'architecture de ton projet, pour qu'on vérifie si tout existe. (écrit bien les noms de fichiers tels qu'ils sont)

ok, bon ca marche.
j'ai mon sur ma page contact sur lequel j'ai un formulaire et lorsque le formulaire est envoye je creer mon message flash ensuite je redirige
voila le code de mon controller

class PagesController extends Controller{

    public function index(){

            }

     public function formulaire(){
            // validation des donnees

        $this->Form->name('name')->required();
        $this->Form->name('creation')->required();
        $this->Form->name('email')->required();
        $this->Form->name('tel')->required()->alfa();

        if ($this->isPost()){

            if (isset($this->data['logo']['name'])) {
                //validation et enregistrement du fichier

                if ($this->Form->extensionFichier($this->data['logo'],['.jpg','.jpeg','.png','.psd','.psb','.gif'])){

                    $this->Form->deplaceFichier($this->data['logo']);

                    $email = new Email();
                    print_r($email); 

                    $f = $this->data['logo']['name'];

                    $email->setTo('amani.jose@outlook.fr', 'Recipient 1')
                                 ->setSubject('Test Message')
                                 ->setFrom('sender@gmail.com', 'Mail Bot')
                                 ->addMailHeader('Cc', 'mramanijose@gmail.com', 'Bill Gates')
                                 ->addGenericHeader('X-Mailer', 'PHP/' . phpversion())
                                 ->addGenericHeader('Content-Type', 'text/html; charset="utf-8"')
                                 ->addGenericHeader('Content-Transfert-Encoding', 'base64')
                                 ->addGenericHeader('Content-Disposition', "attachment; filename='$f'")
                                 ->EmailVars($this->data)
                                 ->setMessage('test')
                                 ->addAttachment($this->data['logo']['name']); 
                    $send = $email->send();
                    if ($send) {
                        echo 'mail ok';
                    }else{
                        echo "no ok";
                    }

                    //la je cree mon message flash
                    $this->Session->setFlash("Nous avons bien recu votre demande !","success");

                    header("Location:index");exit;

                }
     }

        }

ensuite j'affiche le message flash dans ma vue grace a ce code (j'ai deja balance le code de ma classe qui gere les messages flash plus haut)

 <?php $this->Session->flash(); ?>

le probleme c'est que lorsque la redirection est effectuer le message flash n'est pas affiche.
Merci

essayes un extract de $_SESSION['flash']['message']; et affiches le avant de détruire la session flash ;)

Comme je te l'ai déjà dit ne pas faire de l'affichage AVANT ta redirection... Donc tu peux enlever tes echo, print_r et autres ! De plus je te conseille de mettre une vraie URL dans ton header() !

SquallX je ne comprend pas bien ta solution tu peux reexplique avec du code ? STP

JacobDelcroix je ne fais aucun affichage avant la redirectio je mes juste mon message en session avant de rediriger. pour l'url elle marche bien et me redirige sur la bonne page

Tu as un print_r et un echo avant ton header() dans le code que tu as posté.

non non regarde bien c'est un echo et un unset

Dans ton contrôleur...

$message =  extract($_SESSION['flash']['message']);
echo $message;

http://php.net/manual/fr/function.extract.php
Lis la doc. Ca fait pas de mal ;)

je ne pense pas que le problem vienne du print_r meme quand je le retire c'est pareil.
loOl SquallX c'est compris mais si j'utilise extract une fois redirige la variable disparait :(

Retire tous les affichages de texte
les print_r et echo (ceux du résultat d'envoi de l'email)

c'est fais mais j'ai toujour mon message flash qui n'affiche pas :(

Si tu supprimes tout ce qui concerne l'envoie d'une email et que tu testes, tu as ta redirection avec ton flash ou non ?

Tu dois mettre ce que SquallX ta donné dans la page index

Quand je fais ce que SquallX a demander sur la page index j'ai cette erreur
Details

Type: ErrorException
Code: 2
Message: extract() expects parameter 1 to be array, string given
File: E:\EasyPHP\data\localweb\Powercom\app\Vues\Pages\index.php
Line: 69
Trace

je ne sais pas ce j'ai touche mais je crois qu'il c'est decide enfin a marche !!!! MERCI A TOUS POUR VOS AIDES SANS VOUS JE N'Y SERAI PAS ARRIVE !!! THANK YOU FOR ALL !!!