Aller au contenu

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


Sujets conseillés

Posté

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

Posté (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é par Maxime8608
Posté

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

Posté

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.

Posté

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

Posté

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

}

?>

Posté
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?

Posté

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.

Posté

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

Posté

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)

Veuillez vous connecter pour commenter

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



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