problème de redirection

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 : problème de redirection

par Barney » 16 nov. 2007, 10:20

Voila le script qui appelle le formulaire( je ne met que la partie le concernant):
//Affichage des liens suivi
echo '<p><b>Brevet suivi par:</b></p>';
$sql = 'SELECT * FROM lien_suivi WHERE id_brevet = "'.$id.'"'; 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
while($data = mysql_fetch_assoc($req))
    {
	$comment = $data['comment'];
	$id_suivi = $data['id'];
	//on récupère le nom complet de la personne
	$code_suivi = $data['code_suivi'];
	$sql = 'SELECT nom_suivi FROM suivi WHERE code_suivi = "'.$code_suivi.'"' ; 
	$req1 = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
	while($data = mysql_fetch_assoc($req1))
	    	{
		$suivi = $data[nom_suivi];
	    	} 
	if($suivi!=""){echo '<li> ';
	echo $suivi;
	echo ': ';
	echo stripslashes($comment);
	echo ' </li>';
	//on crÈe un lien vers une page de modification des suivi
	echo '<a href="suivi.php?id='.$id.'&id_suivi='.$id_suivi.'" target="index" onclick="window.open(\' \',\'index\',\'width=450,height=300,scrollbars=none\')">Modifier ce commentaire</a> <br><br>';}
	}

//On se deconnecte de la base mySQL
mysql_close($db);
//on crée un lien vers une page de modification des suivi
echo '<a href="suivi.php?id='.$id.'"target="index" onclick="window.open(\' \',\'index\',\'width=450,height=300,scrollbars=none\')">Ajouter un commentaire</a> ';
//On crée un lien vers une page de modification
echo '<br><br><br><br><br><br> ';

?>
</div>
</body>
</html>
Il me semble qu'il y a qq trucs bizarres sur la fin, je vais essayer de voir ce que je peux faire.

par Gargan21 » 15 nov. 2007, 23:36

L'aide que tu apportes maintenant à Barney pourrait bien aider quelqu'un dans le futur et partager le code ici permettrait éventuellement à d'autres personnes de participer à la résolution ;)
Je suis tout à fait d'accord, mon but n'est pas de l'aider en PV, mais qu'il m'envoit ses fichiers, car après avoir vu pas mal de truc avec lui, je ne suis pas convaincu qu'il est fait le bon diagnostic de son problème. Je détecte (peut-être) le problème, et je l'aide à le résoudre ici :)
Après, c'est juste pour éviter d'avoir à se taper 3 contenu de fichier sur le forum.
Mais ne t'inquiète pas, la solution au problème, si je la trouve, sera expliqué ici

par zeus » 15 nov. 2007, 23:22

Il n'est pas pour coutume de donner de l'aide en privée sur PHPFrance.

L'aide que tu apportes maintenant à Barney pourrait bien aider quelqu'un dans le futur et partager le code ici permettrait éventuellement à d'autres personnes de participer à la résolution ;)

par Gargan21 » 15 nov. 2007, 23:18

Je t'envoi mon adresse mail en message privé, tu n'auras qu'à m'envoyer ton script qui appelle le formulaire, ton script de formulaire, et ton script d'enregistrement du formulaire. Ca me permettra d'y voir plus clair, car là j'ai l'impression qu'on regarde pas du tout où il faut.

par Barney » 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é .

par Gargan21 » 15 nov. 2007, 19:09

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

par Barney » 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>

par Gargan21 » 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.

par Barney » 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 ?

par Gargan21 » 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 ?

par Gargan21 » 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">

par Barney » 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");

?>

par Barney » 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"

par Gargan21 » 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

par Barney » 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 :) .