Script php recharger deux fois la page pour afficher
Fermé
thiry
-
Modifié le 5 févr. 2022 à 22:36
jordane45 Messages postés 38300 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 novembre 2024 - 7 févr. 2022 à 14:07
jordane45 Messages postés 38300 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 novembre 2024 - 7 févr. 2022 à 14:07
A voir également:
- Script php recharger deux fois la page pour afficher
- Script vidéo youtube - Guide
- Supprimer une page word - Guide
- Traduire la page - Guide
4 réponses
yg_be
Messages postés
23342
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 novembre 2024
Ambassadeur
1 551
5 févr. 2022 à 20:36
5 févr. 2022 à 20:36
bonjour,
tu écris "Le problème est que une fois avoir rempli mon formulaire ,il est traité et il faut que je recharge la page manuellement pour avoir l'affichage de mes pages"
S'agit-il du formulaire de login traité par le code du login?
Montre nous le code avec l'appel à header.
Cela ne marche pas sur ton hébergeur: as-tu un message d'erreur?
Précise bien aussi, pour chaque page, comment elle s'appelle, et où elle se trouve.
tu écris "Le problème est que une fois avoir rempli mon formulaire ,il est traité et il faut que je recharge la page manuellement pour avoir l'affichage de mes pages"
S'agit-il du formulaire de login traité par le code du login?
Montre nous le code avec l'appel à header.
Cela ne marche pas sur ton hébergeur: as-tu un message d'erreur?
Précise bien aussi, pour chaque page, comment elle s'appelle, et où elle se trouve.
jordane45
Messages postés
38300
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 novembre 2024
4 704
5 févr. 2022 à 22:44
5 févr. 2022 à 22:44
Bonjour,
Reprenons le déroulement de ton code ...
On arrive sur la page index ... qui inclue la page de login (vu que les variables de session ne sont pas encore remplies )
On rempli le formulaire et on clique sur submit
Cela recharge la page index qui va encore inclure ta page de login ( vu que le traitement n'a pas encore été fait )
Et là .. il rempli les variables de session ... mais tu ne lui demandes pas de recharger à nouveau la page...
Donc ..
Dans l'immédiat, il te suffirait d'ajouter une "redirection" lorsque l'authentification est valide. Pour ça, tu peux utiliser l'instruction header de php.
Une autre solution .. ( le plus souvent utilisée...) c'est :
On arrive sur la page index ...
Si l'utilisateur n'est pas connecté on REDIRIGE ( avec l'instruction header ) vers la page de login ( je dis bien REDIRIGER et non INCLURE .. )
Une fois l'authentification faite, on redirige vers la page index
Reprenons le déroulement de ton code ...
On arrive sur la page index ... qui inclue la page de login (vu que les variables de session ne sont pas encore remplies )
On rempli le formulaire et on clique sur submit
Cela recharge la page index qui va encore inclure ta page de login ( vu que le traitement n'a pas encore été fait )
Et là .. il rempli les variables de session ... mais tu ne lui demandes pas de recharger à nouveau la page...
Donc ..
Dans l'immédiat, il te suffirait d'ajouter une "redirection" lorsque l'authentification est valide. Pour ça, tu peux utiliser l'instruction header de php.
Une autre solution .. ( le plus souvent utilisée...) c'est :
On arrive sur la page index ...
Si l'utilisateur n'est pas connecté on REDIRIGE ( avec l'instruction header ) vers la page de login ( je dis bien REDIRIGER et non INCLURE .. )
Une fois l'authentification faite, on redirige vers la page index
Bonjour et merci encore pour le coup de main =)
voici le code modifié de index :
Résultat page vierge de vierge, erreur avec l'appel de la fonction header car qd je décommente les echo, ils sont affichés et pas le login...
et le code modifié de login :
voici le code modifié de index :
<?php session_start();
include('scripts/config_perso.php');
if($maintenace==1){echo 'maintenance en cours';}
else{
//echo 'test session'.(isset($_SESSION['identite']));
if (isset($_SESSION['identite'])and isset($_SESSION['droits'])){
include('pages/header.php');?>
<?php
//echo '</br>'.debug($_SESSION['droits']);?>
<p>Vous êtes connectés en tant que <span class="identite"><?php echo espace($_SESSION['identite']); ?></span>.</p>
<ol>
<?php //fonction qui insère les pages en fonction des droits
foreach(array_keys($_SESSION['droits']) as $page){
//echo $page.' => '.$_SESSION['droits'][$page].'</br>';
if($_SESSION['droits'][$page]!=0){ ?>
<li><a href="index.php?a=<?php echo $page; ?>"><?php echo espace($page); ?></a></li>
<?php }
};
if (!empty($_GET['a'])){
$action = (!empty($_GET['a'])) ? $_GET['a'].'.php' : 'index.php';
//echo '</br> action = '.$action;
if (is_file('pages/'.$action)){
include('pages/'.$action);
}
}
elseif($_SESSION['droits']['vigi']==3){
//echo '</br> droits vigi = '. $_SESSION['droits']['vigi'];
include('pages/vigi.php');
}
else{
include('pages/presentation_site.php');
}
?></ol>
<form action="pages/deconnexion.php" method="post">
<p><input type="submit" value="Déconnexion" name="Déconnexion" id="Déconnexion"/></p>
</form>
</body>
</html>
<?php
}
else{
//echo '</br>header ok';
header('Location : pages/login.php');
//echo'</br>header passsé'; ?>
<?php
}
} ?>
Résultat page vierge de vierge, erreur avec l'appel de la fonction header car qd je décommente les echo, ils sont affichés et pas le login...
et le code modifié de login :
<?php
session_start();
include('config_perso.php');
$erreur='';
if (!(empty($_POST['username'])) and !(empty($_POST['password']))){
//echo '</br> cas où formulaire rempli';
$verif_username=true;
//echo 'formulaire complet </br>';
$username=$_POST['username'];
//echo $username;
$password=$_POST['password'];
//echo $password;
$requeteStatement=$bdd->prepare('SELECT * FROM connexion WHERE username=:username');
$requeteStatement->execute(['username'=>$username,
]);
$resultat=$requeteStatement->fetchAll();
//debug($resultat);
//echo 'test password : '.($resultat[0]['password']==$password);
if($resultat[0]['password']==$password)
{echo '</br>Rechrgez la page';
$_SESSION['identite']=$resultat[0]['identite'];
//echo 'test identité'.$_SESSION['identite'];
$_SESSION['droits']=droits($resultat[0]['droits']);
header('../index.php');
//echo 'test droits '.$_SESSION['droits'];
//$_SESSION['connexion']=isset($_SESSION['identite'])and isset($_SESSION['droits']);
//echo 'test connexion '.$_SESSION['connexion'];
}
else{
//echo '</br> connexion echouée';
$_SESSION['connexion']=0;
echo'</br>erreur d\'authentification : vérifiez votre identitfiant et
votre mot de passe<p>lien vers l\'espace d\'<a href="index.php"> authentification</a></p>';
//include('connexion_ko.php');}
}
}
else { //echo '</br> cas où formulire vide';
include('header.php');
?>
<h1>Identifiez-vous avant de découvrir ce site en conception</h1>
<div class="login" ><form method="post" action="">
<fieldset>Authentification
</br><p>Saisissez vos informations de connection pour accéder à votre contenu</br>
<label for="username">Identifiant : </label></br>
<input type="text" name="username" id="username" placeholder="Saisissez votre identifiant"/></br></br>
<label for="password"> Mot de passe : (8 caractères minimum, 1 majuscule et 1 minuscule)</label></br>
<input type="password" name="password" id="password" placeholder="Saisissez votre mot de passe"/></br>
<label for="checkbox">
<input type="checkbox" id="checkbox">
Afficher le mot de passe
</label></br>
<script type="text/javascript">$(document).ready(function(){
var checkbox = $("#checkbox");
var password = $("#password");
checkbox.click(function(){
if(checkbox.prop("checked")) {
password.attr("type", "text");
} else {
password.attr("type", "password");
}
});
});
</script>
<input type="submit" value="Se connecter"/>
</fieldset>
</form></div>
<p>Sinon, vous pouvez vous connecter avec ces informations: </br>
<ul><li>identifiant : visiteur</li>
<li> mot de passe : visiteur</li></ul>
<form action="pages/inscription.php" method="post">
<p><input type="submit" value="s'inscrire" name="inscription" id="inscription"/></p>
</form>
</p>
<?php } ?>
jordane45
Messages postés
38300
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 novembre 2024
4 704
Modifié le 6 févr. 2022 à 11:18
Modifié le 6 févr. 2022 à 11:18
Déjà, il serait bien d'utiliser les balises de code correctement c'est-à-dire en y précisant le langage afin que l'on ait la coloration syntaxique et une indentation propre du code .
Ensuite, l'instruction header ne peut pas se trouver après des instructions d'affichage que ça soit après des échos ou simplement des balises HTML.
(Ton include de ton fichier header par exemple)
Il faut donc modifier ton code afin de traiter la redirection avant d'afficher quoi que ce soit sur ta page
Ensuite, l'instruction header ne peut pas se trouver après des instructions d'affichage que ça soit après des échos ou simplement des balises HTML.
(Ton include de ton fichier header par exemple)
Il faut donc modifier ton code afin de traiter la redirection avant d'afficher quoi que ce soit sur ta page
jordane45
Messages postés
38300
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 novembre 2024
4 704
>
jordane45
Messages postés
38300
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 novembre 2024
6 févr. 2022 à 11:17
6 févr. 2022 à 11:17
Pour les balises de code Voici un tuto pour apprendre à les utiliser
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Merci encore pour le coup de main ça commence à m'énerver mais l'expérience sera utile sûrement pour mes futures études...
Alors voilà j'ai modifié mon index en appelant la fonction header avant d'appeler include. Résultat = page blanche... mais si je décommente le echo juste en dessous, il s'affiche donc la encore c'est le header qui bloque...
je te transmet le code le code de l'index(avec la bonne utilisation des balises ;-) )
et de plus, tu m'avais parlé de faire une redirection de login vers index une fois les données traitées or j'ai vraiment besoin "d'importer " certaines fonctions du fichier config_perso.php qui se trouve dans le dossier scripts.
Donc, en principe et en pratique je ne peux pas appeler la fonction header après include.
Après, je me suis renseigné sur des méthodes alternatives par exemple en utilisant la balise
Alors voilà j'ai modifié mon index en appelant la fonction header avant d'appeler include. Résultat = page blanche... mais si je décommente le echo juste en dessous, il s'affiche donc la encore c'est le header qui bloque...
je te transmet le code le code de l'index(avec la bonne utilisation des balises ;-) )
<?php session_start(); if (!(isset($_SESSION['identite'])and isset($_SESSION['droits']))){ header('Location : pages\login.php'); //echo '</br>header passé'; ?> <?php } else{ include('scripts/config_perso.php'); echo "</br>connectés"; include('pages/header.php'); //echo '</br>'.debug($_SESSION['droits']);?> <p>Vous êtes connectés en tant que <span class="identite"><?php echo espace($_SESSION['identite']); ?></span>.</p> <ol> <?php //fonction qui insère les pages en fonction des droits foreach(array_keys($_SESSION['droits']) as $page){ //echo $page.' => '.$_SESSION['droits'][$page].'</br>'; if($_SESSION['droits'][$page]!=0){ ?> <li><a href="index.php?a=<?php echo $page; ?>"><?php echo espace($page); ?></a></li> <?php } }; if (!empty($_GET['a'])){ $action = (!empty($_GET['a'])) ? $_GET['a'].'.php' : 'index.php'; //echo '</br> action = '.$action; if (is_file('pages/'.$action)){ include('pages/'.$action); } } elseif($_SESSION['droits']['vigi']==3){ //echo '</br> droits vigi = '. $_SESSION['droits']['vigi']; include('pages/vigi.php'); } else{ include('pages/presentation_site.php'); } ?> </ol> <form action="pages/deconnexion.php" method="post"> <p><input type="submit" value="Déconnexion" name="Déconnexion" id="Déconnexion"/></p> </form> </body> </html> <?php } ?>
et de plus, tu m'avais parlé de faire une redirection de login vers index une fois les données traitées or j'ai vraiment besoin "d'importer " certaines fonctions du fichier config_perso.php qui se trouve dans le dossier scripts.
Donc, en principe et en pratique je ne peux pas appeler la fonction header après include.
Après, je me suis renseigné sur des méthodes alternatives par exemple en utilisant la balise
<meta http-equiv="Refresh" content="0; url=../index.php" />à insérer quelque part dans mon code initial de login pour rediriger de login vers index ?
jordane45
Messages postés
38300
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 novembre 2024
4 704
6 févr. 2022 à 15:06
6 févr. 2022 à 15:06
Voici ton code quelque peu amélioré
<?php session_start(); //activer l'affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //récupération PROPRE des variables AVANT de les utiliser $identite = !empty($_SESSION['identite']) ? $_SESSION['identite'] : NULL; $droits = !empty($_SESSION['droits']) ? $_SESSION['droits'] : NULL; $action = !empty($_GET['a']) ? trim($_GET['a']).'.php' :NULL; if (!$identite && !$droits){ header('Location : pages\login.php'); exit; //toujours mettre un exit après un header } //pas besoin de ELSE .. si tu entres dans le IF tu es redirigé sur une autre page de toutes façons require_once 'scripts/config_perso.php'; echo "</br>connectés"; require_once 'pages/header.php'; // c'est lui qui contient le début de ton html ? ?> <p>Vous êtes connectés en tant que <span class="identite"><?php echo espace($identite); ?></span>.</p> <ol> <?php //fonction qui insère les pages en fonction des droits foreach($droits as $page){ ?> <li><a href="index.php?a=<?php echo $page; ?>"><?php echo espace($page); ?></a></li> <?php } if ($action){ //echo '</br> action = '.$action; if (file_exists('pages/'.$action)){ require_once 'pages/'.$action; } }elseif($droits['vigi']==3){ //echo '</br> droits vigi = '. $_SESSION['droits']['vigi']; include 'pages/vigi.php'; } else{ include 'pages/presentation_site.php' ; } ?> </ol> <form action="pages/deconnexion.php" method="post"> <p><input type="submit" value="Déconnexion" name="Deconnexion" id="Deconnexion"/></p> <!-- pas d'accents dans les ID ou les NAME !! --> </form> </body> </html>
thiry
>
jordane45
Messages postés
38300
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 novembre 2024
7 févr. 2022 à 14:02
7 févr. 2022 à 14:02
merci pour le code, page blanche en résultat... mais pourrais-tu m'expliquer
merci
$identite = !empty($_SESSION['identite']) ? $_SESSION['identite'] : NULL;j'avai repris une ligne de code comme ça sur le fichier de mon prof de NSI, mais je ne l'avais pas comprise
merci
jordane45
Messages postés
38300
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 novembre 2024
4 704
>
thiry
7 févr. 2022 à 14:07
7 févr. 2022 à 14:07
c'est ce qu'on appel l'écriture ternaire.
C'est une sorte de if else
ça remplace
pour en revenir à ta page blanche .. cela peut provenir de tes includes...
Commence par ajouter un echo à la ligne 18 du genre
regarde si le echo s'affiche..
SI oui...
Retire les commentaires puis déplace ton echo quelques lignes plus bas dans ton code et mets en commentaire les lignes qui suivent et ainsi de suite jusqu'à ce que le echo ne s'affiche plus...
ça te permettra de trouver à quelle ligne l'erreur se situe
C'est une sorte de if else
ça remplace
if(!empty($_SESSION['identite'])){ $identite =$_SESSION['identite']; }else{ $identite =NULL; }
pour en revenir à ta page blanche .. cela peut provenir de tes includes...
Commence par ajouter un echo à la ligne 18 du genre
echo "OK";puis mets en commentaire toutes les lignes qui se trouvent en dessous ( de la 19 à la fin )
regarde si le echo s'affiche..
SI oui...
Retire les commentaires puis déplace ton echo quelques lignes plus bas dans ton code et mets en commentaire les lignes qui suivent et ainsi de suite jusqu'à ce que le echo ne s'affiche plus...
ça te permettra de trouver à quelle ligne l'erreur se situe