[RESOLU] header + GET

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] header + GET

Re: [RESOLU] header + GET

par Mazarini » 24 oct. 2014, 09:10

Hier, j'ai installé apache/php sur mon nouveau portable. La première chose que j'ai faite est de vérifier que php marchait puis de vérifier l'affichage des erreurs avec un script utilisant une variable non définis.
C'est quand même mieux d'avoir les erreurs à l'écran et plus facile à débugger ; beaucoup plus facile que d'avoir une page blanche.

Re: [RESOLU] header + GET

par lila9652012 » 24 oct. 2014, 08:12

bravo travail.. =D> =D>

Re: header + GET

par hunomina972 » 23 oct. 2014, 16:10

C'est bon laissez tomber j'ai trouvé wouhou !!! J'ai repris une petite méthode bien sympatique que j'utilisais avant (un joli mélange de javascript et de php) et ça me donne ça ^^ :
$get=$_GET['expediteur'];
$lien="message.php?expediteur=".$get;
print("<script type=\"text/javascript\">setTimeout('location=(\"".$lien."\")' ,1000);</script>");
Super content !!! Merci de votre aide quand même, j'ai appris des choses ^^

Re: header + GET

par jojolapine » 23 oct. 2014, 15:23

Re: header + GET

par hunomina972 » 23 oct. 2014, 14:54

Comment je les active les erreurs, le try -> catch est déjà écrit ???

Re: header + GET

par jojolapine » 23 oct. 2014, 14:53

Affiche les erreurs php,
Affiche les erreurs php,
Affiche les erreurs php,
Affiche les erreurs php,
Affiche les erreurs php,
Affiche les erreurs php,
Affiche les erreurs php,
Affiche les erreurs php,
Affiche les erreurs php,
Affiche les erreurs php,
....

Pour vérifier tu fait un fichier test.php avec une erreur volontaire de syntaxe php. et tu vérifie que tu as bien l'erreur affichée....

Re: header + GET

par hunomina972 » 23 oct. 2014, 14:49

Mon code est le suivant mais je me retrouve toujours avec une page blanche :
<?php
session_start();
ob_start();
$sess=$_SESSION['Auth']['pseudo'];
$get=$_GET['expediteur']
	try {
		$cnx = new PDO('...');
		}
		catch (PDOException $e) {
			die('Erreur : ' . $e->getMessage());
	}
if(isset($_POST['message'])){
		$message=$_POST['message'];
		$timestamp=time();
		$d = array(
		'expediteur'=>$sess,
		'destinataire'=>$get,
		'message'=>$message,
		'timestamp'=>$timestamp
					);
		$req = $cnx->prepare('INSERT INTO message (expediteur,destinataire,message,timestamp) VALUES (:expediteur,:destinataire,:message,:timestamp)');
		$req->execute($d);
		header ("Location: message.php?expediteur=".$get);
	}
?>
<!Doctype html>
<html>
	<head>
		<meta charset="utf-8">
		<link type="text/css" rel="stylesheet" href="Universelle.css"/>
		<link type='text/css' rel='stylesheet' href='message.css'/>
		<!-- les deux lignes suivantes servent a la favicon du site (pour tous les navigateurs)--> 
		<link rel="icon" type="image/x-icon" href="favicon.ico" />
		<!--[if IE]><link rel="shortcut icon" type="image/x-icon" href="favicon.ico" /><![endif]-->
		<script type="text/javascript" src="Ouverture fenetre 1.js"></script>
		<script type="text/javascript" src="Ouverture fenetre 2.js"></script>
		<title>Portail Geek - Messages</title>
	</head>
    <body>
        <div class="en-tete"><center><h1 class="grand_titre"><img class="icone" src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSWurnEUYEIqbnXmuaUNLxitieEiotp8VkrlY0Clzi9xiFLsjL9qQ"/> <img class="bandeau" src="image.gif"/> <img class="icone" src="http://compass.xbox.com/assets/5f/90/5f904be1-94c2-427b-821b-5603fd1f9dc4.jpg?n=hero-xbox-one-all-hardware-gray-bg-600x456.jpg"/></h1></center></div>
		<?php include 'sommaire.php'; ?>
<div class="texte">
<?php
if(!empty($_SESSION['Auth'])){
	if(!empty($_GET['expediteur'])){
		echo '<h4 style="text-decoration:underline">Discution avec '.$get.':</h4><div class="message">';
		$query= $cnx->query("SELECT * FROM message WHERE destinataire='$sess' AND expediteur='$get' OR expediteur='$sess' AND destinataire='$get' ORDER BY timestamp");
		while ($tab = $query->fetch()){
			if($tab['destinataire']==$sess){
				echo "<div class='triangle1'>&#x25c4</div><div class='destinataire'>".$tab['expediteur'].' : '.$tab['message'].'</div><br/>';
			}
			elseif($tab['expediteur']==$sess){
				echo "<div class='expediteur'>".$tab['expediteur'].' : '.$tab['message'].'</div><div class="triangle2">&#x25ba</div><br/>';
			}
		}
	}
}
?>
<form class='entrer_message' action='message.php?expediteur=<?php echo $get ?>' method='post'>
<input type='text' name='message' required/>
<input type='submit' value='Envoyer'/>
</form>
</div>
</div>
</body>
</html>
N'y aurai-t-il pas un autre moyen pour actualiser la page ???

Re: header + GET

par Mazarini » 23 oct. 2014, 14:25

Ajoutes ob_start(); au début (cf http://php.net/manual/fr/function.ob-start.php)

Il me semble que dans wamp le buffering est activé par défaut. Ce n'est pas propre à mon avis, mais ça doit te dépanner.

Re: header + GET

par jojolapine » 23 oct. 2014, 14:22

Malheureusement l'anglais et la programmation sont indissociables...

Pour revenir au sujet, dans ton précédent extrait de code, le header() se trouve avant qu'il n'y ait un affichage quelconque : pas de html, pas d'echo/print, etc...

Maintenant pour pouvoir diagnostiquer le problème, il faut absolument que tu affiches les erreurs php. Il y a des tonnes de ressources sur le sujet sur google :)

Re: header + GET

par ynx » 23 oct. 2014, 14:20

Salut,

Effectivement si la directive output_buffering est activée (ce qui est le cas sur wamp il me semble), la redirection fonctionne même si du contenu est envoyé avant l'appel à la fonction header (puisque ce contenu n'est pas envoyé directement mais enregistré dans le buffer). Cette directive doit être désactivée sur ton serveur d'hébergement, ce qui explique que tu rencontres ce problème.

Plusieurs solutions pour résoudre ceci :
- déplacer les instructions header() en haut de ton script (avant que le moindre contenu ne soit envoyé)
- utiliser la temporisation de sortie de php pour créer un buffering sur le contenu avant le header : http://php.net/manual/fr/ref.outcontrol.php
- activer la directive output_buffering

Le header('Location:...') est censé effectuer une redirection, donc tout ce qui se passe après n'est pas censé être exécuté.
Juste pour corriger, non le header('Location') n'effectue pas lui même la redirection. Cette instruction modifie l'entête http à envoyer au client pour que le navigateur effectue la redirection, mais le code qui est la suite de cette instruction est bien censé être exécuté (notamment car la fonction header ne sert pas qu'à faire des redirections). C'est pour cela qu'il est toujours conseillé d'ajouter un exit après une modifications de l'entête http pour effectuer une redirection.

Bonne journée

Re: header + GET

par hunomina972 » 23 oct. 2014, 14:08

Je suis archi-nul en anglais... :!: :?: :!: #-o

Re: header + GET

par jojolapine » 23 oct. 2014, 13:39

Commence par afficher les erreurs php...
Ensuite il peut y avoir des différences de configuration qui font que le header('Location:') au milieu du contenu fonctionne...
Mais c'est une mauvaise pratique...
Il ne faut pas qu'il y ai de sortie html avant un header, point final!
Lis le lien que je t'ai donné ci-avant (jusqu'au bout).

Bon courage,

Re: header + GET

par hunomina972 » 23 oct. 2014, 13:35

Oui mais sur d autre page aussi et sa marche très bien donc comme ça ça devrait marcher...
<?php
session_start();
$sess=$_SESSION['Auth']['pseudo'];
$get=$_GET['expediteur'];
$cnx = new PDO('');
if(isset($_POST['message'])){
		$message=$_POST['message'];
		$timestamp=time();
		$d = array(
		'expediteur'=>$sess,
		'destinataire'=>$get,
		'message'=>$message,
		'timestamp'=>$timestamp
		);
		$req = $cnx->prepare('INSERT INTO message (expediteur,destinataire,message,timestamp) VALUES (:expediteur,:destinataire,:message,:timestamp)');
		$req->execute($d);
		header ("Location: message.php?expediteur=".$get);
	}
?>
<!Doctype html>
<html>
	<head>
		<meta charset="utf-8">
		<link type="text/css" rel="stylesheet" href="Universelle.css"/>
		<link type='text/css' rel='stylesheet' href='message.css'/>
		<!-- les deux lignes suivantes servent a la favicon du site (pour tous les navigateurs)--> 
		<link rel="icon" type="image/x-icon" href="favicon.ico" />
		<!--[if IE]><link rel="shortcut icon" type="image/x-icon" href="favicon.ico" /><![endif]-->
		<script type="text/javascript" src="Ouverture fenetre 1.js"></script>
		<script type="text/javascript" src="Ouverture fenetre 2.js"></script>
		<title>Portail Geek - Messages</title>
	</head>
    <body>
        <div class="en-tete"><center><h1 class="grand_titre"><img class="icone" src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSWurnEUYEIqbnXmuaUNLxitieEiotp8VkrlY0Clzi9xiFLsjL9qQ"/> <img class="bandeau" src="image.gif"/> <img class="icone" src="http://compass.xbox.com/assets/5f/90/5f904be1-94c2-427b-821b-5603fd1f9dc4.jpg?n=hero-xbox-one-all-hardware-gray-bg-600x456.jpg"/></h1></center></div>
		<?php include 'sommaire.php'; ?>
<div class="texte">
<?php
if(!empty($_SESSION['Auth'])){
	try {
		$cnx = new PDO('');
		}
		catch (PDOException $e) {
			exit('Erreur : ' . $e->getMessage());
	}
	if(!empty($_GET['expediteur'])){
		echo '<h4 style="text-decoration:underline">Discution avec '.$get.':</h4><div class="message">';
		$query= $cnx->query("SELECT * FROM message WHERE destinataire='$sess' AND expediteur='$get' OR expediteur='$sess' AND destinataire='$get' ORDER BY timestamp");
		while ($tab = $query->fetch()){
			if($tab['destinataire']==$sess){
				echo "<div class='triangle1'>&#x25c4</div><div class='destinataire'>".$tab['expediteur'].' : '.$tab['message'].'</div><br/>';
			}
			elseif($tab['expediteur']==$sess){
				echo "<div class='expediteur'>".$tab['expediteur'].' : '.$tab['message'].'</div><div class="triangle2">&#x25ba</div><br/>';
			}
		}
	}
}
?>
<form class='entrer_message' action='message.php?expediteur=<?php echo $get ?>' method='post'>
<input type='text' name='message' required/>
<input type='submit' value='Envoyer'/>
</form>
</div>
</div>
</body>
</html>
Mais la ça me renvoie sur la page voulu mais elle est toute blanche et 500 #-o Que faire ???

Re: header + GET

par xTG » 23 oct. 2014, 13:23

T'as du code HTML avant ton header...
Faut pas chercher plus loin...
<!Doctype html>
<html>
        <head>
                <meta charset="utf-8">
                <link type="text/css" rel="stylesheet" href="Universelle.css"/>
                <link type='text/css' rel='stylesheet' href='message.css'/>
                <!-- les deux lignes suivantes servent a la favicon du site (pour tous les navigateurs)-->
                <link rel="icon" type="image/x-icon" href="favicon.ico" />
                <!--[if IE]><link rel="shortcut icon" type="image/x-icon" href="favicon.ico" /><![endif]-->
                <script type="text/javascript" src="Ouverture fenetre 1.js"></script>
                <script type="text/javascript" src="Ouverture fenetre 2.js"></script>
                <title>Portail Geek - Messages</title>
        </head>
    <body>
        <div class="en-tete"><center><h1 class="grand_titre"><img class="icone" src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSWurnEUYEIqbnXmuaUNLxitieEiotp8VkrlY0Clzi9xiFLsjL9qQ"/> <img class="bandeau" src="image.gif"/> <img class="icone" src="http://compass.xbox.com/assets/5f/90/5f904be1-94c2-427b-821b-5603fd1f9dc4.jpg?n=hero-xbox-one-all-hardware-gray-bg-600x456.jpg"/></h1></center></div>
                <?php include 'sommaire.php'; ?>
<div class="texte">

Re: header + GET

par hunomina972 » 23 oct. 2014, 12:55

Je n'est pas d'erreurs affichées... C'est juste que soit ça n'actualise pas la page, soit ça me renvoie chez mon hébergeur donc JE NE COMPRENDs PAS. En plus je fais toute mes pages sur WAMP avant et cela fonctionne sur WAMP ! WTF ?!?
Voici tout le code de la page :
<?php
session_start();
$sess=$_SESSION['Auth']['pseudo'];
$get=$_GET['expediteur'];
?>
<!Doctype html>
<html>
	<head>
		<meta charset="utf-8">
		<link type="text/css" rel="stylesheet" href="Universelle.css"/>
		<link type='text/css' rel='stylesheet' href='message.css'/>
		<!-- les deux lignes suivantes servent a la favicon du site (pour tous les navigateurs)--> 
		<link rel="icon" type="image/x-icon" href="favicon.ico" />
		<!--[if IE]><link rel="shortcut icon" type="image/x-icon" href="favicon.ico" /><![endif]-->
		<script type="text/javascript" src="Ouverture fenetre 1.js"></script>
		<script type="text/javascript" src="Ouverture fenetre 2.js"></script>
		<title>Portail Geek - Messages</title>
	</head>
    <body>
        <div class="en-tete"><center><h1 class="grand_titre"><img class="icone" src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSWurnEUYEIqbnXmuaUNLxitieEiotp8VkrlY0Clzi9xiFLsjL9qQ"/> <img class="bandeau" src="image.gif"/> <img class="icone" src="http://compass.xbox.com/assets/5f/90/5f904be1-94c2-427b-821b-5603fd1f9dc4.jpg?n=hero-xbox-one-all-hardware-gray-bg-600x456.jpg"/></h1></center></div>
		<?php include 'sommaire.php'; ?>
<div class="texte">
<?php
if(!empty($_SESSION['Auth'])){
	try {
		$cnx = new PDO('...');
		}
		catch (PDOException $e) {
			exit('Erreur : ' . $e->getMessage());
	}
	if(!empty($_GET['expediteur'])){
		echo '<h4 style="text-decoration:underline">Discution avec '.$get.':</h4><div class="message">';
		$query= $cnx->query("SELECT * FROM message WHERE destinataire='$sess' AND expediteur='$get' OR expediteur='$sess' AND destinataire='$get' ORDER BY timestamp");
		while ($tab = $query->fetch()){
			if($tab['destinataire']==$sess){
				echo "<div class='triangle1'>&#x25c4</div><div class='destinataire'>".$tab['expediteur'].' : '.$tab['message'].'</div><br/>';
			}
			elseif($tab['expediteur']==$sess){
				echo "<div class='expediteur'>".$tab['expediteur'].' : '.$tab['message'].'</div><div class="triangle2">&#x25ba</div><br/>';
			}
		}
	}
	if(isset($_POST['message'])){
		$message=$_POST['message'];
		$timestamp=time();
		$d = array(
		'expediteur'=>$sess,
		'destinataire'=>$get,
		'message'=>$message,
		'timestamp'=>$timestamp
		);
		$req = $cnx->prepare('INSERT INTO message (expediteur,destinataire,message,timestamp) VALUES (:expediteur,:destinataire,:message,:timestamp)');
		$req->execute($d);
		header ("Location: message.php?expediteur=".$get);
	}
}
?>
<form class='entrer_message' action='message.php?expediteur=<?php echo $get ?>' method='post'>
<input type='text' name='message' required/>
<input type='submit' value='Envoyer'/>
</form>
</div>
</div>
</body>
</html>