8722 sujets

Développement web côté serveur, CMS

bonjour,

j'ai un formulaire avec un fichier php comme action. Dans ce fichier php je récupère la valeur envoyée au travers du formulaire et crée une URL basée sur cet variable.

Maintenant, comment faire pour ouvrir cette URL? Est-ce possible avec PHP? Dois-je renvoyer l'URL dans mon fichier HTML (si oui, comment)?

Merci pour votre aide.
Modifié par olimart (27 May 2009 - 16:38)
Salut,

Tu peux utiliser la fonction header() de PHP pour rediriger le navigateur sur la cible.

Exemple :
<?php
// Ton code qui génère l'url
header('Location: '.$url);
exit;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML ...
Hello,

ça me semble quand même pour le moins curieux de faire une telle chose. Smiley rolleyes

Avec un tel système et même en rajoutant un test du genre is_file tu donnes tout simplement l'occasion à n'importe quel visiteur de se balader n'importe où sur ton site. Pour peu que celui-ci saisisse quelque chose comme '../../' il peut même remonter l'arborescence.
Voilà ce que j'ai pour l'instant:

dans mon HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
   <head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
		<title>Simple Spry Posting Form</title>
        <style type="text/css">
            body{font-family:Arial,Helvetica;}
            .container{padding:10px;}
            .notice{padding:5px;background-color:#FFF8B2;border:1px solid maroon;margin-bottom:15px;width:600px;display:none}
         </style>
         
         <script src="Spry_1_6_1_022408/includes/SpryData.js" type="text/javascript"></script>
         <script  src="Spry_1_6_1_022408/includes/SpryEffects.js" type="text/javascript" ></script>                 
         <script type="text/javascript">
             //To submit data without refresh we usually use loadURL function with inclusion of SpryData.js.
             //There are two layers here one is used to contained the form, the other is used for notice.
             //The one used for notice comes with fade effect which will trigger when the callback function
             //is triggered.
             function triggerSubmit(){
                 var data1_value = document.sample.data1.value;
		 var data2_value = document.sample.data2.value;
		 var formData = 'data1='+data1_value+'&data2='+data2_value;
				 //The next line is to encode the variables values e.g. weird characters to make it safe for transfer
				 formData = encodeURI(formData);
				 var url ="http://www.monsite.com/process.php";
                 Spry.Utils.loadURL('POST', url, true, ReturnWithEffect, {postData: formData, headers: {"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"}});
             } 
             function ReturnWithEffect(req){
                 //We use xhRequest to received notification from server side, usually the process file will return with an echo/write.
				 var result = req.xhRequest.responseText; 
                 document.getElementById("notice").innerHTML = result;
                 FadeEfx.start();
             }
           </script>
	</head>
	<body>
	    <div class="container">
	        <div class="notice" id="notice"></div>
            <script type="text/javascript">
            	//By placing this script just below the layer notice, you can call function FadeEfx anytime, by using FadeEfx.start();
                var FadeEfx = new Spry.Effect.Fade('notice');
            </script>
            <form name="sample" method="get" action="process.php">
                <p>Data 1 : <input type="text" name="data1" id="data1"></p>
				<p>Data 2 : <input type="text" name="data2" id="data2"></p>
                <p><input type="button" value="AJAX POST!" onclick="triggerSubmit()"> </p>
            </form>
	    </div>
	
	</body>
</html>


dans mon fichier process.php

<?php
$data1 = $_POST["data1"];
$url = "http://www.monsite.com/";
$urlready = $url . $data1. "/index.html";
print("<script type=\"text/javascript\">setTimeout('location=(\"$urlready\")' ,1000);</script>");
?>


Je n'ai pas besoin que le formulaire retourne les valeurs (comme c'est le cas actuellement) juste que le navigateur ouvre l'url contenue dans la variable $urlready.

Merci pour votre aide
olimart a écrit :
Je n'ai pas besoin que le formulaire retourne les valeurs (comme c'est le cas actuellement) juste que le navigateur ouvre l'url contenue dans la variable $urlready.
Comme te le disait kitsgrafiks il suffit d'utiliser la fonction PHP header.

Mais comme je te le disais je te déconseille fortement de faire ça. Smiley rolleyes
olimart a écrit :
[Résolu] OK. Merci.
Le [résolu] se place dans le titre (en éditant le premier message du sujet). Smiley cligne

Par contre je suis un peu surpris que tu trouves cela résolu. Smiley murf
Je change tout ça. Devant vos avis je me rends compte que ma solution est trop complexe et inappropriée donc je vais essayer autre chose (voir ci-dessous).

<body>

<input type="text" id="identification" size="40" value=""><br>
<input type="button" onclick="openlink()" value="Afficher">

<script language="JavaScript"><!-- ;
function openlink() {
var obj = document.getElementById("identification")

window.open('http://monsite.com/'+obj.value+'');}
// --></script>

</body>
Hem... ne le prends pas mal mais c'est encore pire. Smiley rolleyes

Tout d'abord des INPUT n'ont rien à faire en dehors d'un formulaire, ce qui au passage permettrait de soumettre la valeur même si JavaScript est désactivé/indisponible (on parle dans le cas de ton code de JavaScript intrusif).

Ensuite et pour les mêmes raisons (JS n'est qu'une surcouche éventuelle) il vaut mieux faire les redirections côté serveur (en PHP) que côté client (en JavaScript).

Enfin et surtout ça ne règle pas du tout le problème de fond qui est la sécurité d'un tel système et même ça l'amplifie puisqu'il suffit de jeter un oeil au code pour voir que l'identification correspond au nom d'un répertoire.

Puisqu'à priori tu cherches à faire un système d'authentification il existe de nombreux codes sur le web expliquant comment faire.

Un exemple simple (et plus trop à jour mais à priori suffisant pour une sécurité moyenne) : http://bob.developpez.com/phpauth/

D'autres solutions simples :

* utiliser un fichier .htaccess d'authentification à placer dans chaque répertoire (cf. ce tuto)

* vérifier que le mot de passe est bon et créer un cookie le temps de la session (vérifier dans les pages "sécurisées" la présence de ce cookie)

* ...
Modifié par Heyoan (27 May 2009 - 17:16)
Je ne le prends pas mal, loin de là.
Je cherche une solution mais ne sachant pas quoi et où chercher je me retrouve avec des exemples qui marchent pour d'autres, donc n'ayant aucun recul, je ne sais pas si c'est une solution recommandée ou à ignorer. Ensuite, j'essaie de l'adapter à ma sauce et dans la plupart des cas le résultat attendu n'est pas au RDV.

Je pense que je vais passer mon chemin et simplifier encore tout ça. Merci en tout cas pour tes recommandations.