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

  FORUM HardWare.fr
  Programmation
  PHP

  Afficher message avant header();

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Afficher message avant header();

n°897758
steevi2307
Posté le 13-11-2004 à 20:55:17  profilanswer
 

Voici mon problème
 
if ($requete) {
  echo("<p><font face=verdana size=2>Votre ajout a bien été  
                envoyé.<br>.<br>Vous êtes ajouté dans la DB des  
                Users</font></p>" );
   
                header("Location:login.php" );
}
 
Il passe directement ds le .php sans afficher les messages, meme un sleep(x) ne fctionne pas.
 
Merci de votre aide.

mood
Publicité
Posté le 13-11-2004 à 20:55:17  profilanswer
 

n°897775
esox_ch
Posté le 13-11-2004 à 21:04:52  profilanswer
 

les header doivent etre envoyés avant que quoique se soit soit envoyé dans l'html

n°897791
steevi2307
Posté le 13-11-2004 à 21:34:06  profilanswer
 

esox_ch a écrit :

les header doivent etre envoyés avant que quoique se soit soit envoyé dans l'html


 
mais si je veux afficher ce msg, je dois faire quoi ?

n°897796
scull
MySCULL cay bon mangez en!
Posté le 13-11-2004 à 21:42:39  profilanswer
 

faire une redirection en javascript comme sur ce forum par exemple


---------------
Créer son forum gratuit |  Mon beau blog phpBB caÿ le mal :o
n°897800
masklinn
í dag viðrar vel til loftárása
Posté le 13-11-2004 à 21:59:51  profilanswer
 

pourquoi une redirection javascript?
 
ya un truc vachement bien, c'est <meta http-equiv="Refresh" content="timer;url=@">
tu remplaces timer par le temps (en secondes) avant redirection, le @ par l'adresse de destination (login.php par exemple) et p00f
 [:spamafote]


Message édité par masklinn le 13-11-2004 à 22:00:22

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°897809
scull
MySCULL cay bon mangez en!
Posté le 13-11-2004 à 22:15:39  profilanswer
 

autant pour moi...
en plus c'est sa que j'utilise sur mes forums :S
:lol:


---------------
Créer son forum gratuit |  Mon beau blog phpBB caÿ le mal :o
n°897816
Master_Jul
Posté le 13-11-2004 à 22:32:51  profilanswer
 

Sinon pour info, y'a la sortie bufferisée : ob_start() qui permet de s'afranchir des problèmes de header(), cookie, etc.


---------------
En français, on écrit "connexion", pas "connection".
n°897956
steevi2307
Posté le 14-11-2004 à 08:02:36  profilanswer
 

Comment pourrais-je adapter mon script alors avec la solution de Masklinn ??
 
if ($ok == 1){
  mysql_connect("localhost","root","" );
  $connexion = mysql_select_db("accounters" );
     
  if ($connexion) echo "=> Vous etes bien connecté à la DB  
                           des Accounts mangagers <=";
  else echo "=> Echec lors de la connexion <=";
     
$requete = mysql_query ("INSERT INTO personnes (nom, prenom, login, service, aile) VALUES ('$nom','$prenom','$login','$service','$aile')" );
 
if ($requete) {
  echo("<p><font face=verdana size=2>Votre ajout a bien été envoyé.<br>.<br>Vous êtes ajouté dans la DB des Users</font></p>" );
  header("Location:login.php" );
 }
 else {
     echo ("<p><font face=verdana size=2>Problème de  
            requete au serveur PHP</font></p>" );
     echo ("<p><font face=verdana size=2>Veuillez  
            cliquer sur la flèche précédente de votre  
            navigateur</font></p>" );
 }
}

n°898023
masklinn
í dag viðrar vel til loftárása
Posté le 14-11-2004 à 12:03:01  profilanswer
 

on peut avoir une adresse histoire de voir la page finale?
puis le script complet aussi, mis en forme avec des balises

Code :
  1. Code :
    1. et

histoire que ce soit lisible


Message édité par masklinn le 14-11-2004 à 12:05:59

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°898361
steevi2307
Posté le 14-11-2004 à 19:22:15  profilanswer
 

<html>
<head></head>
<body>
 
<?
 
$ok = 1;
 
$nom = $_POST["c_nom"];
$prenom = $_POST["c_prenom"];
$login = $_POST["c_login"];
$service = $_POST["c_service"];
$aile= $_POST["c_aile"];
$langue = $_POST["c_langue"];
 
 
if ($nom == "" ){ //nom du champ1
echo("<font face=verdana size=2>Vous n'avez pas complété le champ nom.</font><br>" ); //message qui s'affiche si le visiteur n'a pas rempli ce champ
$ok = 0; //si le champ1 n'a pas été rempli, la variable ok prend la valeur de 0
}
 
if ($prenom == "" ){
echo("<font face=verdana size=2>Vous n'avez pas complété le champ prénom.</font><br>" );
$ok = 0;
}
 
if ($login == "" ){
echo("<font face=verdana size=2>Vous n'avez pas complété le champ login.</font><br>" );
$ok = 0;
}
 
if ($service == "" ){
echo("<font face=verdana size=2>Vous n'avez pas complété le champ service.</font><br>" );
$ok = 0;
}
 
if ($aile == "" ){
echo("<font face=verdana size=2>Vous n'avez pas complété le champ aile.</font><br>" );
$ok = 0;
}
 
if ($langue == "0" ){
echo("<font face=verdana size=2>Vous n'avez pas complété le code langue.</font><br>" );
$ok = 0;
}
 
// retour au formulaire
 
if ($ok == 0) {
 //echo("<p>&nbsp;</p><p>&nbsp;</p><p align=\"center\"><a href=\"1.php\"><strong>Retour</strong></a></p>" );
 echo ("<p><font face=verdana size=2>Veuillez cliquer sur la flèche précédente de votre navigateur</font></p>" );
}
if ($ok == 1){
 
 //connnexion pour l'ajout :
 
 mysql_connect("localhost","root","" );
  $connexion = mysql_select_db("accounters" );
     
  if ($connexion) echo "=> Vous etes bien connecté à la DB des Accounts mangagers <=";
  else echo "=> Echec lors de la connexion <=";
     
 $requete = mysql_query
       ("INSERT INTO personnes (nom, prenom, login, service, aile) VALUES ('$nom','$prenom','$login','$service','$aile')" );
 if ($requete) {
  echo("<p><font face=verdana size=2>Votre ajout a bien été envoyé.<br>.<br>Vous êtes ajouté dans la DB des Users</font></p>" );
  header("Location:login.php" );
 }
 else {
  echo ("<p><font face=verdana size=2>Problème de requete au serveur PHP</font></p>" );
  echo ("<p><font face=verdana size=2>Veuillez cliquer sur la flèche précédente de votre navigateur</font></p>" );
 }
}
 
?>
 
</body>
</html>

mood
Publicité
Posté le 14-11-2004 à 19:22:15  profilanswer
 

n°898363
Master_Jul
Posté le 14-11-2004 à 19:29:27  profilanswer
 

A la place des :
$nom = $_POST["c_nom"];  
 
http://www.phpdebutant.org/article113.php
Chapitre 7
extract($_POST,EXTR_OVERWRITE);
 
Les champs vides, ça se vérifie en JS. Contente toi de ne pas exécuter la requête si l'un des champs n'est pas rempli en PHP.
 
Sinon comme autres remarques, on met plutôt les infos de connexion dans un fichier à part qu'on inclue, c'est plus propre.  
 
Les booléens (true, false) permettent de se passer de "ok=1" pas très parlant.
 
A la place de tes :
"Veuillez cliquer sur la flèche précédente de votre navigateur"
 
Dis plutôt : "Vous allez être redirigé vers la page précédente dans 3 secondes."
 
Et ajoute dans les meta de cette page ce dont Masklinn t'as parlé.


Message édité par Master_Jul le 14-11-2004 à 19:37:35
n°898366
masklinn
í dag viðrar vel til loftárása
Posté le 14-11-2004 à 19:37:13  profilanswer
 

Master_Jul a écrit :

A la place des :
$nom = $_POST["c_nom"];  
 
http://www.phpdebutant.org/article113.php
Chapitre 7
extract($_POST,EXTR_OVERWRITE);


Bof, $_POST est très bien [:spamafote]
et au moins t'es sûr de pas manger de problèmes de collisions :o  

Citation :

Les champs vides, ça se vérifie en JS. Contente toi de ne pas exécuter la requête si l'un des champs n'est pas rempli en PHP.


Faut arrêter la drogue hein [:totoz]  
Si le JS est désactivé sur la machine client, je te signale que les champs ne sont pas vérifiés > bravo, DTC en beauté et ton client l'a dans le baba
Les formulaires, ca se vérifie/traite toujours à l'arrivée côté serveur
 
 
steevi > je t'ai demandé d'utiliser les balises

Code :
  1. Code :
    1. et


pour mettre ton script en forme
parce que là c'est illisible [:itm]
 
A part ca:
 

  • Le traitement des informations PHP doit se faire avant la balise <html>

N'effectue aucun affichage, stocke les flags pour savoir ce que tu dois affiché, mais effectue tes tests & calculs avant le début de page, ca permet de clarifier le bordel

  • De plus, effectuer les tests avant permet de balancer tranquillement ses headers et de pouvoir conditionner l'utilisation de metas (qui se positionnent dans le head)
  • use et abuse d'isset sur $_POST et $_GET, ca permet d'éviter pas mal de problèmes


 
En gros ici:
 
1ère partie php
Vérifier la validité des champs $_POST et stocker les valeurs (si besoin est), si tous sont valides alors armer le flag (genre $ok = true), sinon le désarmer ($ok = false)
 
Si tous le champs sont valides et vérifiés, effectue ta requête SQL
 
2e partie, html
dans le head, afficher le meta kivabien
<meta http-equiv="Refresh" content="5;url=login.php"> si le flag est armé (que le machin a réussi)
rien ou <meta http-equiv="Refresh" content="5;url=ta_page_précédente"> si flag pas armé
 
3e partie, encore html
dans le head, affiche le(s) message(s) kivonbien:
Si réussite, ben que ca a réussi
Si échec, sur quels champs
 
Une alternative serait, en cas d'échec, de re-afficher le form d'origine (dans cette page, pas en renvoyant l'utilisateur à l'autre page) avec toutes les valeurs correctes déjà remplies, de cette manière l'utilisateur n'a qu'à compléter ce qui manque (en se basant sur tes messages) et à renvoyer [:youpi]  
 

Citation :

"Contente toi de ne pas exécuter la requête si l'un des champs n'est pas rempli en PHP."


Oui je sais lire, un champ peut être rempli avec une valeur censée être invalide (genre "ornithorynque" dans la langue) avec JS désactivé c'est pas vérifier > tous les champs sont remplis, mais la valeur non vérifiée a 9 chances sur 10 de crasher ta base ou ton script, quand c'est pas un trou de sécurité béant [:itm]  
 
Il ne faut jamais faire confiance à un utilisateur, et il faut tout vérifier de là ou on a le contrôle.
Or au niveau du JS le webmestre n'a AUCUN contrôle


Message édité par masklinn le 14-11-2004 à 19:54:33

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°898367
Master_Jul
Posté le 14-11-2004 à 19:38:38  profilanswer
 

Masklinn : Tu sais lire ?
"Contente toi de ne pas exécuter la requête si l'un des champs n'est pas rempli en PHP."

n°899352
steevi2307
Posté le 15-11-2004 à 20:00:51  profilanswer
 

Master_Jul a écrit :

Masklinn : Tu sais lire ?
"Contente toi de ne pas exécuter la requête si l'un des champs n'est pas rempli en PHP."


"
2e partie, html
dans le head, afficher le meta kivabien
<meta http-equiv="Refresh" content="5;url=login.php"> si le flag est armé (que le machin a réussi)
rien ou <meta http-equiv="Refresh" content="5;url=ta_page_précédente"> si flag pas armé
 
3e partie, encore html
dans le head, affiche le(s) message(s) kivonbien:
Si réussite, ben que ca a réussi
Si échec, sur quels champs "
 
comment tu fais pour tester des champs en html, suis dsl mais j'ai jamais fait de html/php

n°899366
Master_Jul
Posté le 15-11-2004 à 20:09:02  profilanswer
 

Je te conseille ce cours très intéressant et complet en français :
http://www.le-webmestre.net/web/cours/javascript/

n°899367
masklinn
í dag viðrar vel til loftárása
Posté le 15-11-2004 à 20:11:37  profilanswer
 

tu places un mini bout de PHP dedans
genre

Code :
  1. <head>
  2.     <title>titre_page</title>
  3.     <?php
  4.         if(flag_ok)
  5.             echo "<meta...>";
  6.     ?>
  7. </head>


qui peut devenir

Code :
  1. <head>
  2.     <title>titre_page</title>
  3.     <?php if(flag_ok) echo "<meta...>"; ?>
  4. </head>


 
et si t'as de gros morceaux de html "conditionnels"

Code :
  1. <?php
  2. if(ma_condition)
  3. {?>
  4.     <!--
  5.         code html
  6.     -->
  7. <?php
  8. }
  9. else
  10. {?>
  11.     <!--
  12.         re_html
  13.     -->
  14. <?php
  15. }?>


par contre si tu utilises la 2e méthode, avoir une indentation très propre devient essentiel pour ne pas se perdre dans le source

Master_Jul a écrit :

Je te conseille ce cours très intéressant et complet en français :
http://www.le-webmestre.net/web/cours/javascript/


[:rofl]

Citation :

<script language="JavaScript">
Mon code javascript
</script>


[:rofl][:rofl][:rofl][:rofl][:rofl]
 
il tue ton site [:loom the gloom]


Message édité par masklinn le 15-11-2004 à 20:15:10

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°899391
steevi2307
Posté le 15-11-2004 à 21:06:47  profilanswer
 

"Une alternative serait, en cas d'échec, de re-afficher le form d'origine (dans cette page, pas en renvoyant l'utilisateur à l'autre page) avec toutes les valeurs correctes déjà remplies, de cette manière l'utilisateur n'a qu'à compléter ce qui manque (en se basant sur tes messages) et à renvoyer."
 
Comment faire cela ?
 
NB: merci de tous tes conseils, ils fonctionnent très bien !!!!

n°899415
masklinn
í dag viðrar vel til loftárása
Posté le 15-11-2004 à 21:33:59  profilanswer
 

steevi2307 a écrit :

"Une alternative serait, en cas d'échec, de re-afficher le form d'origine (dans cette page, pas en renvoyant l'utilisateur à l'autre page) avec toutes les valeurs correctes déjà remplies, de cette manière l'utilisateur n'a qu'à compléter ce qui manque (en se basant sur tes messages) et à renvoyer."
 
Comment faire cela ?
 
NB: merci de tous tes conseils, ils fonctionnent très bien !!!!


Bah c'est pas très compliqué ca
 
Imaginons que ton form de base soit un truc à la con, disons un input text et un submit, ca va donner:

Code :
  1. <form action="validate.php" method="post">
  2.     <input type="text" name="mon_texte" /><br />
  3.     <input type="submit" value="send" /> <input type="reset" />
  4. </form>


Donc ca ca va nous donner un form tout con, comme ca:
http://img117.exs.cx/img117/364/miniform.png
 
Maintenant imaginons que le résultat n'est pas valide (bon avec l'exemple c'est pas facile, mais on s'en fout :whistle: )
Disons qu'au cours de l'initialisation la valeur de l'input text a été stockée dans la variable $text.
 
On veut réafficher le form, mais prérempli avec les valeurs reçues, on va pour cela utiliser l'attribut value des input, qui permet de fournir une valeur de départ (ou valeur par défaut)
Donc on remet notre form d'origine, mais on ajoute un attribut "value" pour l'input:text

Code :
  1. <form action="validate.php" method="post">
  2.     <input type="text" name="mon_texte" value="<?php print $text; ?>" /><br />
  3.     <input type="submit" value="send" /> <input type="reset" />
  4. </form>


et dans ce value on insère le truc qu'on a reçu.
 
et on se retrouve avec un champ pré-rempli avec la valeur réceptionnée
http://img37.exs.cx/img37/8088/miniform_pre.png
l'utilisateur n'a plus qu'à remplir ce qui manque, à re-submit, ca va renvoyer le form à la page et refaire un test de validation :)  
(et re-re-afficher le form si c'est toujours pas bon :o ).
 
Cette méthode fonctionne nickel avec les inputs, avec les <select> c'est un peu plus compliqué (regarde l'attribut "selected" des <option> ), mais loin d'être infaisable :)  
 
ouala, t'as plus qu'à modifier ton script pour faire ca
 
PS: j'ai pas testé si le code inséré en PHP fonctionnait, c'est à vérifier, il faut peut être retoucher un peu le bouzin


Message édité par masklinn le 15-11-2004 à 21:35:56

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody

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

  Afficher message avant header();

 

Sujets relatifs
Afficher le lien d'une image dans une textbox?[Java] IHM dynamique - afficher à la volée
Afficher/Masquer du texte[PHP] download JPG HEADER application/jpg
[perl et formulaires] afficher tous les param()Astuces pour afficher l'uptime, et stats reseaux ?
pb pour afficher resultat requete mssqlMessage de confirmation avant changement de page
Afficher caractères pique, coeur,etc...[Header HTTP] Filename et filetype
Plus de sujets relatifs à : Afficher message avant header();


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