Selection du langage refuse de s'exécuter qd j'appuis sur "ok"

loulouking -  
 loulouking -
Bonjour à tous,

Je suis débutant et j'ai deja posé à peu près la meme question un peu avant mais je galère toujours ac mon code pour le langage..
J'ai donc toujours un fichier langues.php inclus dans mon site mais celui ci ne s'execute pas : je sélectionne le langage Anglais par exemple et quand j'appuis sur Ok ca rafraîchi la page pour retomber sur la même page alors qu'on était censé allé sur une page English.php..
Merci d'avance pour votre aide et désole de vous embetter avec ces questions qui vous paraissent surement enfantine..

Me fichier langue.php est inclus grace à :<?php include("langues.php"); ?>
Puis le code de langues.php est :

<body>
<FORM Action="Francais.php" method="post">
<SELECT name="langues" size="1">
<Option value="Francais">Francais</option>
<Option value="English">English</option>
</select>
<input type="submit" value="OK">
</form>

<body/>
<?php
if(isset($_POST['langues'])){
if ($_post['langues']=='Francais') {
header ('location: Francais.php');

}

else if ($_post['langues']=='English') {
header ('location: English.php');
}
}




A voir également:

3 réponses

Utilisateur anonyme
 
Bonjour

Il faut absolument écrire $_POST et pas $_post comme tu les fais. PHP est sensible à la casse (majuscules / minuscules) dans les noms de variables.

Il faut aussi obligatoirement mettre tout appel à la fonction header AVANT l'envoi de texte à la page. Dans ton cas, ça veut dire qu'il faut faire comme dans les exemples qui t'avaient été donnés dans l'autre discussion : mettre tout ton PHP avant le <body> et même le <html> et le <!doctype> qu'il doit y avoir avant.
0
loulouking
 
Merci beaucoup pour ta réponse, j'ai modifié les erreurs dont tu m'a parlé :
<?php
if(isset($_POST['langues'])){
if ($_POST['langues']=='Francais') {
header ('location: Francais.php');

}

else if ($_POST['langues']=='English') {
header ('location: English.php');
}
}


?>

<body>
<FORM Action="Francais.php" method="post">
<SELECT name="langues" size="1">
<Option value="Francais">Francais</option>
<Option value="English">English</option>
</select>
<input type="submit" value="OK">
</form>

<body/>
Mais ça ne marche tjs pas et si je dois mettre une balise doctype tu pourrais me donner le code que je dois mettre et l'endroit ou l'insérer ça serait super sympa..
Et je tiens encore à m'excuser pour mon ignorance..
0
Utilisateur anonyme
 
Malgré ses gros défauts, ton code marche chez moi tel qu'il est.
Commence par corriger la balise </body> (tu as mis <body/>)

Si ça ne marche pas alors qu'il est en include dans un autre, c'est que dans cet autre fichier tu envoies des données AVANT le include. C'est interdit. Tu ne dois pas avoir de echo qui s'exécute ni aucun code HTML avant l'appel à la fonction header.

Il y aune autre cause possible, c'est qu'il y a quelque chose avant le <?php : Es-tu sûr de n'avoir aucun espace ni ligne vide ? Et si tu travailles en UTF-8, enregistres-tu bien ton fichier SANS BOM (si tu ne connais pas, on en reparlera) ?

Peux-tu essayer "langues.php" tout seul pour voir s'il marche ?
0
loulouking
 
Ok merci beaucoup ça marche vrmt cette fois !!! mais j'ai juste 2 ou 3 petites questions : un code php ne se met jamais avt un html ?? C'est quoi un nom ?
Et je sais que je suis perfectionniste mais quand je clique sur anglais pour aller à ma page anglaise, ça marche bien mais il y'a écrit français dans la sélection du langage alors que la page est en Anglais....
En tout cas merci 1000x pour tes réponses, elle m'aident vrmt!!
0
Utilisateur anonyme
 
un code php ne se met jamais avt un html ?
Bien sûr que si ! Le code php peut se mettre avant, pendant et après le html
Ce qu'il n'est pas possible de faire, c'est d'utiliser la fonction header quand on a commencé à envoyer du html. Cette fonction comme son nom l'indique, fait appel aux en-têtes HTTP (attention, j'ai bien dit en-têtes HTTP, rien a voir avec la balise <HEAD> ou <HEADER> du HTML).
Or, les en-têtes http (que tu ne vois pas normalement, même quand tu regardes le source de la page) sont envoyés avant les données (normal pour des en-têtes), donc avant le HTML. Donc dès que tu envoies des données, tu ne peux plus utiliser la fonction header, mais aussi toutes les fonctions qui font appel aux en-têtes : session_start et l'envoi de cookies.

C'est quoi un nom ?
Je suppose que tu veux dire un BOM ?
BOM = Byte Order Mark. C'est un caractère spécial constitué de 3 octets et qui est lié à l'encodage utf8. De nombreux éditeurs de texte l'insèrent en début de fichier si on en règle pas correctement l'option. C'est une plaie pour le PHP : il est invisible donc on ne le remarque pas. Mais comme il est avant <?php, il est envoyé dès le début du script, donc on ne peut plus utiliser header et compagnie. Et on se gratte la tête si on ne connaît pas, car on est sûr(à tort) qu'il n'y a rien avant <?php
0
loulouking
 
Merci pour tes réponses et j'imagine que c'est trop complique d'avoir un code php qui affiche anglais qd la page est en Anglais mais en tout cas merci pour tes réponses!!
0