Formulaire envoi d'une valeur en methode get et post

Eléphanteau du PHP | 35 Messages

28 sept. 2005, 11:15

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.

Mammouth du PHP | 568 Messages

28 sept. 2005, 11:21

Le methode, tu la choisis... Tu peux remplacer dans ton formulaire ton GE par POST...
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphanteau du PHP | 35 Messages

28 sept. 2005, 11:33

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>


Eléphanteau du PHP | 35 Messages

28 sept. 2005, 11:37

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

Mammouth du PHP | 568 Messages

28 sept. 2005, 11:42

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"]
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphanteau du PHP | 35 Messages

28 sept. 2005, 11:51

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

Mammouth du PHP | 568 Messages

28 sept. 2005, 12:02

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 ?
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphanteau du PHP | 35 Messages

28 sept. 2005, 12:10

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 ?

Mammouth du PHP | 19672 Messages

28 sept. 2005, 12:14

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.

:)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 35 Messages

28 sept. 2005, 12:22

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

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

28 sept. 2005, 12:41

pour 'passer' de GET à POST, il suffit de changer toutes les occurrences de 'get' en 'post', en HTML et en PHP.

Eléphanteau du PHP | 35 Messages

28 sept. 2005, 13:30

j'a essayé mais du coup la fonction d'affichage du formulaire pour créer le répertoire ne fonctionne plus...

Mammouth du PHP | 19672 Messages

28 sept. 2005, 13:58

Il faudrait également que l'attribut method de ta balise form soit à post et non à get
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 35 Messages

28 sept. 2005, 14:10

j'ai fais tout ça, en faisant attention de ne rien oublier, mais ça e marche pas...

ViPHP
pjl
ViPHP | 2119 Messages

28 sept. 2005, 14:19

y'a bien des messages d'erreurs.