problème de redirection

Invité
Invité n'ayant pas de compte PHPfrance

14 nov. 2007, 17:57

Bonjour j'ai quelques soucis avec une redirection dans le code suivant (la redirection se situe à la fin):
<html lang="fr">
<head>
<title>Modification</title>
</head>
<body>

<?php

//On recupere les données du formulaire
$id_suivi = $_POST['id_suivi'];
$id_suivi = addslashes( $id_suivi );
$id_brevet = $_POST['id_brevet'];
$id_brevet = addslashes( $id_brevet );
$comment = $_POST['comment'];
$comment = addslashes( $comment );
$code_suivi = $_POST['suivi'];
$code_suivi = addslashes( $code_suivi );

//On se connecte à la base
$db = mysql_connect('localhost', 'root', '');
mysql_select_db('i668935',$db);

//On cree la requete mySQL

//Cas ou il n'y a pas de valeur d'id: on cree une nouvelle fiche
if($id_suivi=='')
    	{
    	$sql = "INSERT INTO lien_suivi (id,id_brevet,code_suivi,comment) Values('','$id_brevet','$code_suivi','$comment')";
	//On envoie la requete
	mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
	}

//Cas ou il y a une valeur d'id: on modifie les valeurs pour cette fiche
else
    	{
	if($code_suivi=='SUPPRIMER')
	    	{
		$sql = "DELETE FROM lien_suivi WHERE id=$id_suivi";
		}
	else
		{
		$sql = "UPDATE lien_suivi SET code_suivi='$code_suivi', comment='$comment' WHERE id=$id_suivi";
		}		
    	 
	//On envoie la requete
	mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
	} 

// on ferme la connexion
mysql_close();  

//On redirige vers la page modifiée
header('location: brevet.php?id='.$id_brevet);
exit;

?> 
</body>
</html>
Mon problème est que cette redirection s'effectue dans une nouvelle fenetre, où les modifications apparaissent, alors que je voudrais qu'elle s'effectue dans la fenetre qui était non-modifiée au départ.
J'ai essayé de faire un refreh mais sans aucun résultat.
Je vous remercie d'avance de l'aide que vous pourriez m'apporter.

Petit nouveau ! | 8 Messages

15 nov. 2007, 10:39

En supprimant cette ligne :
header('location: brevet.php?id='.$id_brevet);
exit;
j'obtiens tout de même une redirection vers une page blanche. Si quelqu'un pouvait m'éclairer ça serait vraiment sympa.

Eléphanteau du PHP | 26 Messages

15 nov. 2007, 10:41

Bonjour,

Lorsque tu crées du contenu dans ton fichier, tu fixes une partie du header, dont la partie Location justement. Une redirection PHP, ne peut donc se faire qu'avec un contenu vierge, en résumé, il ne te faut rien avant ton <?php (même pas une ligne vide) et aucun echo, print ou autre qui envoi des infos à ton navigateur.

Eléphanteau du PHP | 26 Messages

15 nov. 2007, 10:42

j'obtiens tout de même une redirection vers une page blanche. Si quelqu'un pouvait m'éclairer ça serait vraiment sympa.
Ce n'est pas une redirection vers une page blanche, mais l'affichage de la page en cours qui n'a pas de contenu.

Petit nouveau ! | 8 Messages

15 nov. 2007, 11:13

Merci de m'avoir aider sur ce point là, mais mon problème principal est que je voudrais voir la page non-modifiée être remplacée par la page modifiée sans que cela ouvre une nouvelle fenetre.

Je vais essayer d'être un peu plus clair parceque même moi je m'y perds un peu :? :
- j'ai une page avec diverses informations qui sont modifiables.
- pour les modifier je clique sur un lien et un formulaire s'affiche pour effectuer les modifications.
- pour les valider je clique sur le bouton "modifier " et là, la page modifiée s'affiche dans une nouvelle page, chose que je ne veux pas :) .
"L'avantage d'être intelligent, c'est qu'on peut toujours faire l'imbécile, alors que l'inverse est totalement impossible." Woody Allen

Eléphanteau du PHP | 26 Messages

15 nov. 2007, 11:50

Schéma à suivre alors :

1 - tu affiches ta page avec les infos actuelles + 1 lien de modification
2 - après clique sur le lien, tu arrives sur le formulaire de saisie et la, tu as plusieurs posibilités pour définir l'action de ton form :
* tu définis une nouvelle page qui est chargé de faire le traitement du formulaire (pas mal pour débuter)
* tu définis la même page que le formulaire, et tu mets une condition pour voir si ton formulaire a été validé (si oui, tu le traites, si non tu l'affiches) (ca, c'est le mieux)
* tu définis la première page, sur laquelle tu traites le formulaire, puis tu affiches dans la foulée (bof)
Dans les 2 premiers cas, après le traitement de ton formulaire, vérification des saisies et enregistrement en bdd, en session, en fichier, en ce que tu veux en fait, tu fais une redirection avec header("Location:ma_premiere_page.php"); (attention au echo ou autre envoi vers le navigateur avant)
Quand tu arrives de nouveau sur la premiere page, tu vas chercher les infos la ou tu viens de les enregistrer, et tu auras ainsi ta premiere page avec les modifs.

Dans le dernier cas, le bof, tu traites, tu enregistres et tu affiches tout dans le même script, donc pas de redirection, mais c'est pas très beau comme manière de faire. Perso je te recommande la deuxième, tu as un script qui te gère tout ton formulaire, l'affichage comme l'enregistrement, comme ca tout est centralisé, c'est plus simple à maintenir.

Bon courage

PS : un atrticla pas mal pour t'aider : http://www.phpdebutant.org/article56.php

Petit nouveau ! | 8 Messages

15 nov. 2007, 12:09

Merci pour tes conseils je vais essayer de mettre ça en place.

Edit:Par contre je n'ai pas bien compris "tu définis la même page que le formulaire"
"L'avantage d'être intelligent, c'est qu'on peut toujours faire l'imbécile, alors que l'inverse est totalement impossible." Woody Allen

Petit nouveau ! | 8 Messages

15 nov. 2007, 16:42

Je n'arrive toujours pas à régler mon problème :cry:
Les modifications que j'entre dans le formulaire sont bien prises en compte, mais je suis toujours avec 2 fenêtres dont l'une m'affiche la page non-modifiée et l'autre la page modifiée.

J'ai réessayer le refresh mais rien c'est peut etre le code qui n'est pas bon
<?php 

header ("Refresh: 5;URL=brevet.php?id=.$id_brevet.php");

?>
"L'avantage d'être intelligent, c'est qu'on peut toujours faire l'imbécile, alors que l'inverse est totalement impossible." Woody Allen

Eléphanteau du PHP | 26 Messages

15 nov. 2007, 17:28

Par contre je n'ai pas bien compris "tu définis la même page que le formulaire"
Si ton script d'affichage de formulaire s'apelle formulaire.php, tu fais un <form action="formulaire.php">

Eléphanteau du PHP | 26 Messages

15 nov. 2007, 17:30

Les modifications que j'entre dans le formulaire sont bien prises en compte, mais je suis toujours avec 2 fenêtres dont l'une m'affiche la page non-modifiée et l'autre la page modifiée.
Ton formulaire s'affiche-t-il dans une nouvelle fenêtre ?

Petit nouveau ! | 8 Messages

15 nov. 2007, 17:51

Désolé je commence à être un peu perdu la, <form action="formulaire.php"> je suis censé le placer où.
En fait tout "marche" sans problème les modifications sont prises en compte et aucune erreur ne s'affiche.Le seul soucis que j'ai (je dirais que c'est un soucis d'esthétique) c'est au niveau de la redirection qui m'affiche la page avec les modifications réalisées sans soucis, le truc qui me gène c'est l'ancienne page non-modifiée qui est toujours affichée.
Est ce que ce problème vient de la redirection aprés la validation de mon formulaire ou bien dois je fermer "l'ancienne" fenetre, et si oui comment fermer simultanément cette fenetre et afficher la nouvelle ?
"L'avantage d'être intelligent, c'est qu'on peut toujours faire l'imbécile, alors que l'inverse est totalement impossible." Woody Allen

Eléphanteau du PHP | 26 Messages

15 nov. 2007, 18:09

Désolé je commence à être un peu perdu la, <form action="formulaire.php"> je suis censé le placer où.
Oubli ca, si tes infos sont bien enregistrées, tu n'as pas à toucher à ca alors

Une redirection, comme son nom l'indique, redirige :) plus sérieusement, tu change l'entête du fichier pour appeler une nouvelle page qui va donc s'afficher à la place de la page initialement prévu.
Là j'ai vraiment l'impression que ton problème vient d'ailleurs.
De ce que j'ai l'impression de comprendre, c'est que ton formulaire s'affiche dans une NOUVELLE fenetre, donc quand tu valides ton formulaire, la redirection se fait dans cette nouvelle fenêtre.
Il faudrait que tu vérifies que ton lien qui pointe vers le fomulaire n'ouvre pas dans une nouvelle avec un target="_blank" par exemple.
Si tu n'es pas sûr de ton lien, post le ici pour que je puisse y jeter un coup d'oeil.

Petit nouveau ! | 8 Messages

15 nov. 2007, 18:35

Je pense que j'ai dû mal m'exprimer :oops:
J'ai une page(on va l'appeler page1) avec plusieurs info dessus et un lien me permet de les modifiées ou d'en ajouter.
Lorsque je clique sur ce lien un formulaire apparait.
Le formulaire "disparait" une fois les modifications validées(je clique egalement sur un bouton pour les valider), et une nouvelle page(page2)avec les modif. apportées apparait.Cette page2 est exactement la même que la page1 avec les info modifiées ou ajoutées en plus bien evidemment .
j'espere avoir été un peu plus clair cette fois :D .

Et voila le code du formulaire :
<html lang="fr">
<head>
<title>Veille brevets - Index</title>
<link href="style.css" rel="stylesheet" 
type="text/css">
</head>
<body>
<?php

//On récupere dans l'URL l'id brevet
$id = $_GET['id'];
//On récupere dans l'URL l'id suivi (si il existe => modif de fiche deja existante)
$id_suivi = $_GET['id_suivi'];
//On se connecte a la base mySQL
$db = mysql_connect('localhost', 'root', '');
mysql_select_db('i668935',$db);
//Affichage du titre
	//On cree la requete de recuperation des donnees
	$sql = 'SELECT NPub, Titre FROM Brevets WHERE id = "'.$id.'"'; 
	//On envoie la requete
	$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
	//On traite la réponse
	$data = mysql_fetch_assoc($req);
	//On affiche les valeurs

	echo "<h2>";
	
	echo $data['NPub'];
	
	echo ' ';
	
	echo stripslashes($data['Titre']);
	

//Affichage des liens suivi

//si c'est une modif
if ($id_suivi != ''){

echo '</h2><h2>Modifier le commentaire:</h2>';

$sql = 'SELECT * FROM lien_suivi WHERE id = "'.$id_suivi.'"'; 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
while($data = mysql_fetch_assoc($req))
    	{
	$code_suivi = $data['code_suivi'];
	$comment = $data['comment'];

	echo '<form method="post" action="valid_suivi.php" target="main" >';
	echo '<input type=hidden name=id_suivi value="'.$id_suivi.'">';
	echo '<input type=hidden name=id_brevet value="'.$id.'">';

	//on initialise la variable $coche
	$coche = '';	

	//On cree le menu deroulant avec les noms de personnes
	echo '<select name="suivi" id="suivi">';
	echo '<option value="SUPPRIMER" selected>SUPPRIMER</option>' ;
		
	$sql = 'SELECT * FROM suivi'; 
	$req1 = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
	while($data1 = mysql_fetch_assoc($req1))
	    	{
		//On regarde dans la base lien si ce suivi doit etre précochée
		$coche = '';
		if($code_suivi == $data1[code_suivi])
			{
			//Dans ce cas on coche la case
			$coche = 'selected';
			}
		echo '<option value="'.$data1['code_suivi'].'" '.$coche.'>'.$data1['nom_suivi'].'</option>' ;
		}
	echo "</select> <br> ";

	echo '<textarea name=comment cols=50 rows=8>';
	echo stripslashes($comment);
	
	echo '</textarea> <br>';
	echo '<input type="submit" value="Modifier" onblur="window.close()" ></form><br>';
	}
} 
//si c'est un nouveau suivi

if ($id_suivi == ''){

echo '<h2>Nouveau suivi:</h2>';

echo '<form method="post" action="valid_suivi.php" target="main" >';
echo '<input type=hidden name=id_suivi value="">';
echo '<input type=hidden name=id_brevet value="'.$id.'">';

//On crée le menu déroulant avec les noms de personne
echo '<select name="suivi" id="suivi">';
echo '<option value="" selected></option>' ;	
$sql = 'SELECT * FROM suivi'; 
$req1 = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
while($data1 = mysql_fetch_assoc($req1))
 	{
	echo '<option value="'.$data1['code_suivi'].'" >'.$data1['nom_suivi'].'</option>' ;
	}
echo "</select> <br>";

echo '<textarea name=comment cols=50 rows=8></textarea> <br>';
echo '<input type="submit" value="OK" onblur="window.close()" ></form>';
} 
//On se deconnecte de la base mySQL
mysql_close($db);

?>
</body></html>
"L'avantage d'être intelligent, c'est qu'on peut toujours faire l'imbécile, alors que l'inverse est totalement impossible." Woody Allen

Eléphanteau du PHP | 26 Messages

15 nov. 2007, 19:09

supprimer ton target="main" dans tes 2 balises <form>

Petit nouveau ! | 8 Messages

15 nov. 2007, 19:23

Firefox plante deouis que je fait cette modification :cry: .
Je pense que je vais laisser tomber la et je ferais avec ce petit problème de confort
:( .
Si quelqu'un trouve une solution je suis pas contre :D
Merci gargan pour l'aide que tu m'as apporté .
"L'avantage d'être intelligent, c'est qu'on peut toujours faire l'imbécile, alors que l'inverse est totalement impossible." Woody Allen