joora Posté 14 Février 2008 Posté 14 Février 2008 Voilà le code: CODE <form method="post" enctype="multipart/form-data" action="">Mot de passe : <input name="secu" size="8" maxlength="8" type="text" /><br /> <input name="userfile" type="file" /><input value="Hop on héberge!" type="submit" /> <br /> <br /> </form> <?php $secu; ?> <?php $rep=""; if(isset($_FILES['userfile']) && $_FILES['userfile']['size'] > 0 && $secu=="monpass") { echo "secu: $secu"; $savefile = $rep.$_FILES['userfile']['name']; $temp = $_FILES['userfile']['tmp_name']; if (move_uploaded_file($temp, $savefile)) echo "Le fichier a ete enregistre sous ".$savefile."<br />\n"; else echo "Probleme lors de l'enregistrement<br />\n"; } ?> Or la variable secu ne prend pas la valeur qu'on lui donne dans le formulaire... et je suis coincé! (le but est de jouer le rôle de mot de passe, je sais que c'est pas sécurisé mais la page ne devrait pas être trouvée par qui que ce soit en principe, c'est juste une sécurité supplémentaire qui dissuadera la majorité des gens qui tomberaient par hasard sur cette page) Comment faire SVP
Maxime8608 Posté 14 Février 2008 Posté 14 Février 2008 (modifié) Salut joora Pour récupérer une variable venant d'un formulaire, tu dois utiliser la superglobale $_POST['variable'] dans le cas d'un formulaire envoyé par "post", ou de manière plus générale, $_REQUEST['variable'] . Les deux fonctionnent. Modifié 14 Février 2008 par Maxime8608
joora Posté 14 Février 2008 Auteur Posté 14 Février 2008 merci beaucoup ça marche mieux comme ça lol! (je n'ai jamais appris le PHP désolé...) Mais je me demande toujours pourquoi sur une autre page ça marche sans "superglobale"... en fait je crois qu'il y a deux manières de faire, une avec les superglobales et l'autre sans, en raison de problemes de sécurité avec les superglobales, non? Alors pour mieux comprendre, comment faire sans? Encore merci d'avoir répondu et résolu mon problème rapidement
Maxime8608 Posté 14 Février 2008 Posté 14 Février 2008 Je ne connais aucune méthode pour faire sans superglobale. Cela dit, peut être que dans le script que tu as vu, il y avait une ligne qui stockait la variable sortant du formulaire dans une autre: $variable = $_REQUEST['variable'] A vérifier.
captain_torche Posté 14 Février 2008 Posté 14 Février 2008 Effectivement, c'est possible de le faire sans superglobale, mais cela peut poser des problèmes de sécurité : On récupère la variable avec $nom_du_champ_de_formulaire Le souci, c'est qu'on peut potentiellement écrase une variable du même nom qui aurait été définie avant. Il y a quelques sécurités pour empêcher cela, mais elles ne sont pas hyper-fiables. Comme tu commences à coder, il vaut mieux prendre les bonnes habitudes tout de suite
joora Posté 14 Février 2008 Auteur Posté 14 Février 2008 voila un code que j'utilise et qui marche: CODE <form name="form1" method="post" action=""> <p><b>Ton pseudo </b> <input type="text" name="pseudo" maxlength="20"> <br> Ton email (facultatif) <input type="text" name="mail">(not needed)<br> <b>Lien vers la vidéo</b> <input type="text" name="lien"> <br> <b>Code de sécurité </font><b>:</b> <input type="text" name="secu" size="5" maxlength="5"> </p> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="11%"><b>Commentaire :</b></td> <td width="89%"> <textarea name="commentaire" cols="100" rows="10" onKeyPress=" if (event.keyCode==60 || event.keyCode==62) event.returnValue = false; if (event.which==60 || event.which==62) return false;">ton comentaire</textarea> </td> </tr> </table> <p><br> <font color="#FF9900">Send:</font> <input type="submit" name="Submit" value="Envoyer"> <INPUT type="hidden" name="afficher" value="ok"> (Ne clique pas tant que toutes les cases ne sont pas remplies! Sinon il faudra tout recommancer!)</p> </form> <?php $lien; $pseudo; $mail; $afficher; $commentaire; $secu; $date = date("d-m-Y"); $heure = date("H:i"); ?> <?php if ($_POST['afficher']=="ok") { if (($pseudo=="")||($commentaire=="")||($secu!="VID")||($lien=="")){ if($pseudo=="") print("Veuillez saisir votre pseudo<BR>\n"); if($lien=="") print("Veuillez rentrer le lien vers la vidéo<BR>\n"); if($commentaire=="") print("Vous n'avez pas entré de commentaire<BR>\n"); if($secu!="VID") print("Vous n'avez pas entré le code de sécurité<BR>\n"); } else { echo "Merci! Les informations ont été envoyées!<BR>Vous pouvez proposer une nouvelle vidéo<BR>"; echo "<BR>Récapitulatif :<BR>\n <UL> <LI>Pseudo: <b>$pseudo</b></LI> <LI>Email: <a href=\"mailto:$mail\">$mail</a></LI> <LI>Commentaire : $commentaire</LI> <LI>Lien : <a href=\"$lien\">$lien</a></LI> </UL> "; $fp = fopen("un_fichier.htm","a+"); fputs($fp, "<hr>"); fputs($fp, "Vidéo proposée par <a href=\"mailto:$mail\"><b>$pseudo</b></a> : le $date à $heure<br><br>"); fputs($fp, "\n"); // on va a la ligne fputs($fp, "Vidéo: <a href=\"$lien\">$lien</a><br><br>"); fputs($fp, "$commentaire <br>"); fclose($fp); } } else { echo "<p>Une fois que les données seront envoyées, tu pourras proposer une nouvelle vidéo!<p>"; } ?>
joora Posté 14 Février 2008 Auteur Posté 14 Février 2008 Effectivement, c'est possible de le faire sans superglobale, mais cela peut poser des problèmes de sécurité :On récupère la variable avec $nom_du_champ_de_formulaire c'est ce que j'utilise dans le code de mon 1er post, mais ça ne fonctionne pas! Le souci, c'est qu'on peut potentiellement écrase une variable du même nom qui aurait été définie avant. Il y a quelques sécurités pour empêcher cela, mais elles ne sont pas hyper-fiables.Comme tu commences à coder, il vaut mieux prendre les bonnes habitudes tout de suite Tu veux dire qu'avec la méthode variables globales il n'y a pas de risque? ou moins de risques?
Anonymus Posté 14 Février 2008 Posté 14 Février 2008 Il n'y a jamais 'pas de risque', mais oui, il y a beaucoup moins de risques. c'est ce que j'utilise dans le code de mon 1er post, mais ça ne fonctionne pas! Non, parce que ca peut être désactivé dans le fichier .ini de php. Comme ca, le problème ne se pose pas. Accepter que ca marche, c'est (je schématise..) accepter que tout et n'importe quoi soit instancié, sans que l'on ne sache trop ce qui arrive. Par exemple, tu fais > echo $nom; Tu t'attends à ce que ca soit la valeur de la variable $_POST['nom'] qui soit renvoyé, mais en fait c'ets la valeur de la variable $_GET['nom']... Accepter n'importe quoi, ca n'est pas.. acceptable. Alors c'est désactivé par pas mal d'hébergeurs. Tiens, par rapport à ton code > && $secu=="monpass") { Ton $secu, il est renvoyé par quoi ? $_POST ? $_GET ? $_SESSION ? $_FILES ?... En l'appelant correctement, la question ne se poserait pas : $_POST['secu'] Là, tu sais ce que tu appelles. Ca ne veut pas dire qu'on va t'envoyer exactement ce que tu attends, ca veut dire que tu sais d'où ca vient Ps : N'utilises pas $_REQUEST, ca revient au même que $secu. Tu acceptes 'tout' par défaut... Nicolas.
joora Posté 16 Février 2008 Auteur Posté 16 Février 2008 Merci beaucoup, j'y vois plus clair (et je sais un peu comment utiliser des failles d'injection php (d'ailleurs nombre de codes proposés ici sont tres mal sécurisés), donc je comprends très bien le problème! merci!) donc oui ça doit être désactivé sur l'hébergement (gratuit) de cette page et pas sur l'autre hébergement (payant)...
Anonymus Posté 16 Février 2008 Posté 16 Février 2008 Proposés ici ?? Sur le Hub ? Je ne pense pas, non.
joora Posté 18 Février 2008 Auteur Posté 18 Février 2008 oui c'est vrai qu'ici c'est particulier bravo! Pour l'upload d'images j'ai vu nulle part qqn qui vérifiait si l'image ne contenait pas de code php mais l'upload sécurisé c'est tellement compliqué à faire qu'il faut être courageux pour faire un upload publique... (il y a tellement de robots qui parcourent tous les sites et qui tentent d'uploader ce genre d'images... )! Mais sinon c'est vrai qu'on ne retrouve pas ici les "solutions" hyper dangereuses apportées souvent dans les forums (enfin pour le peu que je connaisse sur le sujet car je suis vraiment débutant)
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant