8792 sujets

Développement web côté serveur, CMS

Bonjoir, je rencontre un problème suspect.

Je passe en get une variable renseigner dans un input texte (je DOIS la passer en GET).

Mais si je met des quotes dans l'input. Ca bug. Tout guilleret je sors un bon vieu htmlentities et je lui cole sur l'coin d'la gueule.

Tout marche nikel. Sauf que lorsque je passe mon URL j'obtient deux slashs supplémentaires. je les balayes à coup de stripslashes. Met il en reste 1. Je reclique, j'en ai 2 puis 3 puis 4 puis 5 (j'avou ne pas etre aller plus loin).

Une idée ?

Rude



$requet = "SELECT site,nom_menu FROM SuperMenu WHERE site='$site'";
	$launch1 = mysql_query($requet);
	echo "REQUET => ".$requet."<br><br>";
	
	
	
	while ($v = mysql_fetch_array($launch1)){
		$name = $v["nom_menu"];
	
		echo "<a href=\"mùen.php?recall=$name\">NOM => $name</a><br>";
			
			$rekette = "SELECT nom_menu,ss_men FROM SousMenu WHERE nom_menu = '$name'";
		$launch2 = mysql_query($rekette);
		echo "<br>REKETTE => ".$rekette."<br><br>";
		
			while($va = mysql_fetch_array($launch2)){
				$ss = $va["ss_men"];
				echo "SS => $ss<br>";
			}
		echo '<br><br>';
	}




et donc une fois que je clique la dedans je récupere mes variables


$MenuGET = @$_GET["recall"];	
	stripslashes($MenuGET);


et la : GAME OVER !

Bonne soirée à vous.
Modifié par ffwrude (14 Nov 2006 - 11:39)
En premier lieu, au lieu de faire un @$_GET, utilise plutôt une construction plus standard (et plus rapide, sans vouloir me la jouer premature optimization) :
$pouet = isset($_GET['pouet']) ? $_GET['pouet'] : '';

Sinon, peut-être qu'à cause de magic_quotes_gpc, des slashs sont automatiquement mis Smiley decu Regarde de ce côté-là, j'ai pas tout pigé à ton post Smiley confus
Bonsoir.

Otez moi d'un doute :

stripslashes($MenuGET);

comme ça, tout seul et isolé ne serait-il pas inopérant ?

$MenuGET = isset($_GET['recall']) ? stripslashes($_GET['recall']) : '';

... serait plus efficace...
Bonsoir,

Est-ce que ceci ne pourrait pas résoudre ton problème:

echo '<a href="mùen.php?recall='.$name.'">NOM =>'.$name.'</a><br>';


Ce qui me parait bizarre aussi c'est le nom de ton fichier mùen.php, ù mettre une voyelle avec accent, c'est pas tip-top Smiley cligne

@ bientôt
Modifié par chpego (14 Nov 2006 - 13:50)
Je ne voudrais pas te vexer mais je pense que tu devrais commencer par apprendre les bases. Smiley decu
Il y a de très bons tutos pour ça, sur phpdebutant par exemple Smiley cligne

Exemple de ce qui ne va pas dans tes quelques lignes de code :
- noms de fichiers avec des caractères accentués
- valse d'antislashes pour protéger les "
- while imbriqués
- concaténation absente
- l'emploi du @ injustifié

Je n'ai rien compris concernant ton input en GET...
J'ose espérer que tu ne passe pas un formulaire complet en GET
De plus htmlentities n'arrangera rien à ton problème.

Bref, en dehors de tout ça, j'ai pas tout compris ton explication Smiley confus
Il serait interessant de savoir comment est constituée la variable $name.
En effet, comme elle est destinée à servir de parametre GET, cette variable ne doit être constituée que de caractères valides pour les url.

Exemple : si $name contient "première option", alors le html donnerait

<a href="mùen.php?recall=première option">

et l'adresse url donnerait :
m%C3%B9en.php?recall=premi%C3%A8re%20option

(notons au passage le ù de "mùen.php", et insistons pour le renommage)

A mon avis, un parametre GET reçu comme celà mériterait le grand jeu, soit:


$MenuGET = isset($_GET['recall']) ? stripslashes(urldecode($_GET['recall'])) : '';


soit l'application de stripslashes() sur le résultat de urldecode().

Encore une fois, il serait intéressant de savoir comment sont libellés les "nom_menu"... (avec accent, avec espaces, avec quotes...)
Un petit tour sur la doc de php.net pour vérifier qu'effectivement, stripslashes n'affecte pas la chaîne d'originne.

Sinon :
+1 pour le @ inutile
+1 pour le nom de fichier sans accent

Maintenant concernant urldecode, je dois vous signaler que j'ai déjà rencontré des incohérences avec les jeux de caractères et cette fonction.

Soit il faut laisser les choses comme elles sont avec les accents dans les URLs, le plus souvent ça fonctionne... mais tu n'obtiens pas des trucs très beaux...
Ex : page.php?param=Les%20lettres%20accentu%e9es%20et%
20les%20caract%e8re%20non%alphanum%e9riques%20dans%
20les%20URLs%20ne%20font%20pas%20tr%e8s%20bonne%
20impression%2c%20comme%20tu%20peux%20t%27en%
20rendre%20compte




LE mieux est donc, exit les caractères spéciaux.
Bonjour à tous et merci pour ses réponses. Je suis aller lire la doc de php.net mais sans résultats.

Je vais déjà corriger le nom du fichier.. J'avoue que ce n'est pas terrible ^^

Le code est assez long donc je n'ai pas voulu tout copier car je sais que ce n'est jamais évident à lire.

Pour ce qui est d'apprendre les bases .. Bah... j'essaye ^^ le @ n'est pas utile il est vrai mais c'est pour ne pas avoir l'erreur qui s'affiche. C'est un mauvais tic que j'ai pris.



stripslashes($MenuGET); 

n'est en fait pas tout seul. Il était tard, je partais du boulot je voulais poster mais j'avoue que tout ceci est confus ^^ Je vais essayer de m'expliquer un peu plus en détail si vos idées solutionne mon problème. Mais je vais déjà éssayer.

Merci à tous.


EDIT :

Après correction et utilisation de vos solutions, j'ai toujours le problème. Je pense que j'ai du mal m'expliquer. Je vais assénir un peu mon code, le réduire puis le poster ici.
Modifié par ffwrude (14 Nov 2006 - 10:17)
ffwrude a écrit :
le @ n'est pas utile il est vrai mais c'est pour ne pas avoir l'erreur qui s'affiche.

Certes, mais masquer l'erreur enlève-t'elle l'erreur ???? Smiley cligne


<?php
	
	require_once('connexion.php');
	
	$site = "Site provisoir"; //Provisoir
	
	$Menu = @$_POST["ajout_menu"];			echo "MENU => ".stripslashes($Menu)."<br><br>";		//ECHO DE TEST
	$Senu = @$_POST["ajout_ss_menu_"];		echo "SOUS-MENU => ".$Senu."<br><br>";				//ECHO DE TEST
	$MenuGET = @$_GET["recall"];			echo "MENUGET => ".$MenuGET."<br><BR>";				//ECHO DE TEST
	$Menu = stripslashes($Menu);
	$Senu = stripslashes($Senu);

	
		
	if(isset($MenuGET)){
$Menu = $MenuGET;}

if ($Menu != ""){
		$Menu = htmlentities($Menu, ENT_QUOTES);
		$requette = "INSERT INTO SuperMenu (site,nom_menu)VALUES ('$site','$Menu')"; 
		$launch = mysql_query($requette);
	}

	if($Senu != ""){//echo "<br>MENU".$Menu."<br><BR>";
		$requette = "INSERT INTO SousMenu (site,nom_menu,ss_men) VALUES ('$site','$Menu','$Senu')";
		$launch = mysql_query($requette);
}

<div style="position:relative; width:100%; height:100%;">

<form name="ajout_menu_au_site" id="ajout_menu_au_site" method="POST" action="muen.php">
	<input type="text" name="ajout_menu" id="ajout_menu" />
	<input type="button" name="bouton_ajout_menu_" id="bouton_ajout_menu_" value="Ajouter un menu" onclick="submit();" />
</form>

<form name="ajout_ss_menu" id="ajout_ss_menu" method="POST" action="muen.php">
	<input type="text" name="ajout_ss_menu_" id="ajout_ss_menu_" />
	<input type="hidden" name="ajout_menu" id="ajout_menu" value="<?php echo $Menu ?>" />
	<input type="button" name="bouton_ajout_ss_menu_" id="bouton_ajout_ss_menu_" value="Ajouter un sous menu" onclick="submit();" />
</form>

<?php


	$requet = "SELECT site,nom_menu FROM SuperMenu WHERE site='$site'";
	$launch1 = mysql_query($requet);
	echo "REQUET => ".$requet."<br><br>";
	
	
	
	while ($v = mysql_fetch_array($launch1)){
		$name = $v["nom_menu"];
	
		echo "<a href=\"muen.php?recall=$name\">NOM => $name</a><br>";
			
			$rekette = "SELECT nom_menu,ss_men FROM SousMenu WHERE nom_menu = '$name'";
		$launch2 = mysql_query($rekette);
		echo "<br>REKETTE => ".$rekette."<br><br>";
		
			while($va = mysql_fetch_array($launch2)){
				$ss = $va["ss_men"];
				echo "SS => $ss<br>";
			}
		echo '<br><br>';
	}



?>


</div>





erf la mise en page à bouger
Modifié par ffwrude (14 Nov 2006 - 11:11)
Ah non lol pour le @ c'est pour masquer l'erreur du GET vide lorsque je charge la page la premiere fois.

EDIT => Alors la .... mais je deviens fou. Je n'ai pas retoucher au code a part enlever des commentaires... Mon collègue arrive, je lui montre... Et la... Aucune erreur. Pas de slashes rajouter... La... J'aimerai qu'on m'explique POURQUOI ca marche.
Modifié par ffwrude (14 Nov 2006 - 11:16)
chpego a écrit :
Bonsoir,

Est-ce que ceci ne pourrait pas résoudre ton problème:

echo '<a href="mùen.php?recall='.$name.'">NOM =>'.$name.'</a><br>';



Et ceci tu n'a pas essayé ? ...
Modifié par chpego (14 Nov 2006 - 13:49)
chpego a écrit :


Et ceci tu n'a pas essayé ? ...

Ca ne change strictement rien par rapport à ce qu'il a fait Smiley cligne C'est juste """légèrement""" plus rapide...
ffwrude a écrit :
Ah non lol pour le @ c'est pour masquer l'erreur du GET vide lorsque je charge la page la premiere fois.

Non et non !
Si tes variables sont correctement assignées, il n'y a pas d'erreur. Smiley langue
isset($variable) sert à cela.
Pour Quentin C : j'adore ce truc je le garde en stock.

Pour Bison oui tu as raison. pour le isset. Comme je le disais les @$_GET sont une très mauvaise habitude que je m'emploi à corriger.

Il fut un temp ou je croyai que le @ correspondait au isset. Meaculpa !
^^

Merci encore

Rude
Bison a écrit :

Non et non !
Si tes variables sont correctement assignées, il n'y a pas d'erreur. Smiley langue
isset($variable) sert à cela.

Et le programmeur averti se fera tout de suite une fonction genre :
function varGet($var, $default = null) {
  return (isset($_GET[$var]) ? $_GET[$var] : $default);
}

Comme ça au lieu d'avoir plein de isset dans tous les sens, un simple :
$page = varGet('page', 'accueil');

Smiley smile