Page 1 sur 3

Formulaire envoi d'une valeur en methode get et post

Posté : 28 sept. 2005, 11:15
par ptinicola
Bonjour,
je débute en php. j'ai un formulaire qui utilise la méthode GET et dans ce formulaire j'ai la valeur d'un champ que je voudrais transmettre aussi en méthode POST pour pouvoir l'intégrer dans un Bdd.
Le tout en ne validant qu'une seule fois mon formulaire.

Comment faire ?

Merci de votre aide.

Posté : 28 sept. 2005, 11:21
par heddicmi
Le methode, tu la choisis... Tu peux remplacer dans ton formulaire ton GE par POST...

Posté : 28 sept. 2005, 11:33
par ptinicola
oui j'ai essayé, la valeur de mon champ est intégré à ma base mais les actions qui utilisent GET ne fonctionnent plus. J'ai même essayé de remplacer tout les GET par des POST.
Voici le code
<?php
require_once("config.php") ;
	$rootdir = "./fichiers";
	$imagedir = "./images";

	if ( ! is_dir($rootdir) )
	{
		echo "Unable to get access to $rootdir, contact your web administrator.";
		die();
	}
	
	$currentdir = $_GET['path'];
	
	// on tronque le debut si c'est un /
	if ( substr($currentdir,0,1) == "/" )
	{
		$currentdir = substr($currentdir,1,strlen($currentdir) - 1);
	}
	
	// si la fin de $currentdir = .. alors on retourne a la racine de ce dossier
	if ( substr($currentdir, strlen($currentdir) - 2, 2) == ".." )
	{
		// strip last /..
		$currentdir = substr($currentdir, 0, strlen($currentdir) - 3);
		
		// strip last /dirname
		$currentdir = substr($currentdir, 0, strrpos($currentdir,"/"));
	}
	
	// si la fin de $currentdir = /. alors on retourne a la racine de ce dossier
	if ( substr($currentdir, strlen($currentdir) - 2, 2) == "/." )
	{
		$currentdir = substr($currentdir, 0,strlen($currentdir) - 2);
	}
	
	// evite tout probleme de securite MAISempeche les nom de rep avec .. dedans
	$currentdir = str_replace("..", "", $currentdir);

	// on traite les actions sp?©ciales
	$action = $_GET['action'];
	switch($action)
	{
		case "mkdir":
			if ( isset($_GET['arg'] ) )
			{
				// evite tout probleme de securite MAIS empeche les nom de rep avec .. dedans
				$mkdir = str_replace("..", "", $_GET['arg']);
				umask (0);
				mkdir($rootdir . "/" . $currentdir . "/" . $mkdir);			
			}
			else
			{
				$affiche_creer_formulaire = true;

			}
			break;
		
		case "rm";
			if ( isset($_GET['confirmation'] ) )
			{
				// evite tout probleme de securite MAIS empeche les nom de rep avec .. dedans
				$rm = str_replace("..", "", $_GET['path']);
				
				if ( isset($_GET['file']) )
					$rm = $rm . "/" . str_replace("..","", $_GET['file']) ;
					
				system("rm -r '". $rootdir . "/" . $rm . "'") ;
			}
			else
			{
				if( ! isset($_GET['infirmation']))
					$affiche_supprimer_formulaire=true;

			}
			// si l'on ne supprimait pas un fichier (donc un rep, on doit retourner a la racine quelque soit la reponse
			if ( ( isset($_GET['confirmation']) || isset($_GET['infirmation']) ) && ! isset($_GET['file']) )
				// strip last /dirname pour retourner au parent du rep en cours
				$currentdir = substr($currentdir, 0, strrpos($currentdir,"/"));					
			break;
			
		case "deconnection":
		
			break;
			
		case "upload":
			if ( ! isset($_FILES['uploadFile']) )
			$affiche_upload_formulaire = true;
			break;

	}
	
	// l'upload se fait en post (l'action)
	if (isset($_POST['action']) && $_POST['action'] == "upload")
	{
		if ( isset($_FILES['uploadFile']) )
		{
			$file_name = $_FILES['uploadFile']['name'];
			
			// strip file_name of slashes
			$file_name = stripslashes($file_name);
			if ($_POST['date']) 
			{
				$file_name = date("Y-m-d-H\hi-") . $file_name;
			}
			
			$uploaddir = $rootdir . "/" .  str_replace("..","",urldecode($_POST['path']));
			
			$file_name = $uploaddir . "/" . str_replace("'","",$file_name);
			$copy = copy($_FILES['uploadFile']['tmp_name'],$file_name);
			// check if successfully copied
			if( ! $copy)
			{
			 	echo basename($file_name) . " | <b>Impossible d'uploader</b>!<br>";
			}				
		}
	}
?>
<html>
<head>
<title>
	Explorateur de fichier - /<?php echo $currentdir; ?>
</title>
</head>
<body>

<BIG><BIG>Explorateur - /<?php echo $currentdir; ?></BIG></BIG>

<table border=1 width=100%>
<tr><td colspan=2>

<!-- Toolbar -->
<table width=100%>
<tr><td>
<a href="<? echo $_self . "?path=";  ?>">Racine</a> | 
<a href="<? echo $_self . "?action=mkdir&path=" . urlencode($currentdir); ?>">Creer Repertoire</a> |  
<a href="<? echo $_self . "?action=upload&path=" . urlencode($currentdir); ?>">Uploader</a>
</td></tr>
</table>
<?php
  //connection au serveur
  $cnx = mysql_connect(SERVEUR, USER, PASS, DB) ;

  //sÈlection de la base de donnÈes:
  $db  = mysql_select_db(DB) ;

  //rÈcupÈration des valeurs des champs:
  $nom_rep = $_POST['arg'] ;

?>

<?php

if ( $affiche_creer_formulaire )
{
	// affichage du formulaire pour creer un repertoire
	?>
	<hr>
	<form method="get">
	<input type="hidden" name="path" value="<? echo $currentdir ?>" />
	<input type="hidden" name="action" value="mkdir" />
	Nom du repertoire : <input type="text" name="arg"/>
	<input type="submit" value="Creer" />
	</form>
	 <?php $sql = "INSERT INTO rep (nom_rep)
            VALUES ( '$nom_rep') " ;
    $requete = mysql_query($sql, $cnx) or die( mysql_error() ) ;
            ?>
	<?php
}

if ( $affiche_supprimer_formulaire )
{
	// affichage du formulaire pour supprimer un repertoire
	?>
	<hr>
	<form method="get">
	<input type="hidden" name="path" value="<? echo $currentdir ?>" />
	<?
	if ( isset($_GET['file']) )
		echo "<input type=\"hidden\" name=\"file\" value=\"" . $_GET['file'] . "\" />";
	?>
	<input type="hidden" name="action" value="rm" />
	Supprimer <? echo $currentdir . "/"; if (isset($_GET['file'])) echo $_GET['file']; ?> ? 
	<input type="submit" name="confirmation" value="Oui" />
	<input type="submit" name="infirmation" value="Non" />
	</form>
	<?php
}

if ( $affiche_upload_formulaire )
{
	?>
	<hr>
	<form enctype="multipart/form-data" method="post">
	Fichier : <input name="uploadFile" type="file" id="uploadFile" />
	<input type="hidden" name="action" value="upload" />
	<input type="hidden" name="path" value="<? echo urlencode($currentdir);?>">
	<input type="submit" name="submit" value="Uploader" />
	&nbsp;&nbsp;<input type="checkbox" name="date" CHECKED/>Dater le fichier
	</form>
	<?php
}

?>

</td></tr>
<tr>
<td valign=top width=20%>
	<!-- Colonne pour les repertoires -->
	
	<table border=0 width=100% height=100%>
	<tr><td colspan=3>
		<table border=1 width=100%>
		<tr>
		<td width=100%><b>Repertoires</b></td>
		</tr>
		</table>
	</td></tr>	
	<?php
		$directory = opendir( $rootdir . "/" . $currentdir );
		while( $dir = readdir($directory) )	
		{
			if (is_dir( $rootdir . "/" . $currentdir . "/" . $dir) && $dir != "." )
			{
				// on affiche pas le ..  quand on est a la racine
				if( $currentdir == "" && $dir != ".." || $currentdir != "")
				{
					echo "<tr><td width=30 height=30>";
					echo "<img width=30 height=28 src=\"" . $imagedir . "/dir.png\">";
					echo "</td><td width=80%>";
					echo "<a href=\"" . $_self . "?path=" . urlencode($currentdir) . "/" . urlencode($dir) . "\">" . $dir . "</a>";
					echo "</td><td align=right>&nbsp;";
					if ( $dir != ".." )
						echo "<a href=\"" . $_self . "?action=rm&path=" . urlencode($currentdir) . "/" . urlencode($dir) . "\">X</a>";
					echo "</td></tr>\n";
				}
			}
		}
		closedir($directory);
	?>
	</table>
</td>
<td valign=top width=80%>
	<!-- Colonne pour les fichiers -->

	<table border=0 width=100% height=100%>
	<tr><td colspan=3>
		<table border=1 width=100%>
		<tr>
		<td width=75%><b>Noms</b></td>
		<td width=25% align=right><b>Taille</b></td>
		</tr>
		</table>
	</td></tr>
	<?php

		$directory = opendir( $rootdir . "/" . $currentdir );
		$foundone = false;
		while( $file = readdir($directory) )	
		{
			if (is_file($rootdir . "/" . $currentdir . "/" . $file) )
			{
				$foundone = true;
				echo "<tr><td width=30 height=35>";
			
				// selon l'extension du fichier
				$ext = strtolower(substr($file,strrpos($file,".") + 1,strlen($file) - strrpos($file,".")));
				switch($ext)
				{
					case "gif":
					case "jpg":
					case "png":
						echo "<img width=30 height=28 src=\"miniature.php?gd=2&maxw=30&src=" . $rootdir . "/" . urlencode($currentdir) . "/" . urlencode($file) . "\"/>";
						break;
					default:
						if ( is_file( $imagedir . "/" . $ext . ".gif" ) )
							echo "<img width=30 height=28 src=\"miniature.php?gd=2&maxw=30&src=" . $imagedir . "/" . $ext . ".gif" . "\"/>";
						else
							echo strtoupper($ext);
						break;
				}
				echo "</td><td>";
				echo "<a href=\"" . $rootdir . "/" . $currentdir . "/" . $file . "\">" . $file . "</a>";
				echo "</td><td align=right width=15%>";
				echo filesize($rootdir . "/" . $currentdir . "/" . $file );
				echo "&nbsp;&nbsp;<a href=\"" . $_self . "?action=rm&path=" . urlencode($currentdir) . "&file=" . urlencode($file) . "\">X</a>";
				echo "</td></tr>\n";
			}
		}
		closedir($directory);	
		if ( ! $foundone)
		{
			echo "<tr><td colspan=3 align=center><b>Aucun fichier !</b></td></tr>";
		}
	?>
		
	</table>

</td>
</tr>
</table>
</body>
</html>


Posté : 28 sept. 2005, 11:37
par ptinicola
Il s'agit d'un explorateur de fichier et c'est cette partie qui me pose problème :
if ( $affiche_creer_formulaire )
{
	// affichage du formulaire pour creer un repertoire
	?>
	<hr>
	<form method="get">
	<input type="hidden" name="path" value="<? echo $currentdir ?>" />
	<input type="hidden" name="action" value="mkdir" />
	Nom du repertoire : <input type="text" name="arg"/>
	<input type="submit" value="Creer" />
	</form>
	 <?php $sql = "INSERT INTO rep (nom_rep)
            VALUES ( '$nom_rep') " ;
    $requete = mysql_query($sql, $cnx) or die( mysql_error() ) ;
            ?>
	<?php
}
c'est cette valeur que je veux envoyer en Post vers une BDD :
Nom du repertoire : <input type="text" name="arg"/>

Posté : 28 sept. 2005, 11:42
par heddicmi
Tu insères $nom_rep que tu récupères à partir de $_POST["arg"]... Mais cette variable n'existe pas puisque tu envois ton formulaire par GET...

$nom_rep=$_GET["arg"]

Posté : 28 sept. 2005, 11:51
par ptinicola
J'ai essayé mais sans succès, il ajoute bien une nouvelle ligne dans ma table de Bdd, mais il n'insèrer rien dans la nom_rep.
Si j'utilise la méthode POST, il insère bien qlqe chose, mais ne créer pas un nouveau repertoire sur le serveur...

Posté : 28 sept. 2005, 12:02
par heddicmi
Ce que je ne saisis pas, c'est pourquoi tu fais un formulaire avec un get par-ci et un autre avec un post par là...

Pourquoi ne pas utiliser que du post ?

Posté : 28 sept. 2005, 12:10
par ptinicola
Cette source n'est pas de moi, c'est pour ça que j'essais de l'adapter à mes besoins, mais je suis vraiment trop débutant. Comme je le disais j'ai essayé de remblasser tout les GET par des POST mais ça marche pas et je suis pas assez calé pour faire cette transition vers POST.
Peut-être peux-tu m'aider ou m'expliquer ?

Posté : 28 sept. 2005, 12:14
par Cyrano
Règle générale de programmation (tous langages confondus) :
Ne jamais faire confiance aux données envoyées par l'utilisateur via un formulaire ! Or l'utilisation de la méthode GET ouvre la porte aux fantaisies: on peut en effet modifier manuellement l'url en changeant la valeur de tel ou tel paramètre et accessoirement envoyer du code malveillant. Donc on évitera la méthode GET dans la mesure ou il doit y avoir échange avec un serveur de base de données par exemple si on est pas certain de la sécurité de notre système.

:)

Posté : 28 sept. 2005, 12:22
par ptinicola
Ok mais ça ne m'explique pas comment passer de GET à POST, si il y a une méthode ou un tutoriel je veux bien les connaître.

Merci tout de même pour cette règle de sécurité.

Posté : 28 sept. 2005, 12:41
par mere-teresa
pour 'passer' de GET à POST, il suffit de changer toutes les occurrences de 'get' en 'post', en HTML et en PHP.

Posté : 28 sept. 2005, 13:30
par ptinicola
j'a essayé mais du coup la fonction d'affichage du formulaire pour créer le répertoire ne fonctionne plus...

Posté : 28 sept. 2005, 13:58
par Cyrano
Il faudrait également que l'attribut method de ta balise form soit à post et non à get

Posté : 28 sept. 2005, 14:10
par ptinicola
j'ai fais tout ça, en faisant attention de ne rien oublier, mais ça e marche pas...

Posté : 28 sept. 2005, 14:19
par pjl
y'a bien des messages d'erreurs.