Aller au contenu

petit problème de variable (débutant php)


joora

Sujets conseillés

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 :?:

Lien vers le commentaire
Partager sur d’autres sites

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é par Maxime8608
Lien vers le commentaire
Partager sur d’autres sites

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 :)

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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 ;)

Lien vers le commentaire
Partager sur d’autres sites

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>";

}

?>

Lien vers le commentaire
Partager sur d’autres sites

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?

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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)...

Lien vers le commentaire
Partager sur d’autres sites

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)

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...