Page 1 sur 1

Une requete qui ne passe pas !

Posté : 19 juin 2010, 10:11
par dagny
Bonjour à tous !

Voici le code php de la page en question :
<?php /************************************************************************************
/*******************MODIFIER LES INFORMATIONS D'UNE IMPRIMANTE :**********************
************************************************************************************/

//erreur = au vide est modification est = 0

$erreur = "";
$modification = 0;

//on recupére l'id de l'imprimante à modifier par le biais du lien dans recherche_im.php
//(<a href=\"\"onclick=\"javascript:window.open('modifier_im.php?id=$imprimante_id','width=600,height=450,scrollbars=yes');\">Modifier</a>)

$id = $_GET["id"];

//ensuite on recupére toutes les informations de l'imprimante pour les afficher avant de les modifier !

$query = "SELECT * FROM `imprimante` WHERE `imprimante_id` = '$id' ";
$requete = mysql_query($query) or exit(mysql_error());
$resultat = mysql_fetch_array($requete);

//si on clic sur modifier on commence le script.
if(isset($_POST["submit_modif"]))
{

//on redeclare les variables avec un $_POST pour recup les infos du formulaire
	$nom_im = $_POST["nom_im"];
	$batiment_im = $_POST["batiment_im"];
	$etage_im = $_POST["etage_im"];
	$couloir_im = $_POST["couloir_im"];
	$marque = $_POST["marque"];
	
	// on commence par regarder si les champs sont plein ou vide ( si il le sont on balance l'erreur est on stop le script ) !
	if($nom_im =="" || $batiment_im =="" || $etage_im =="" || $couloir_im =="" || $marque =="" )
	{
		$erreur.= "Un ou plusieurs champs sont vide";
		echo "<font color=\"red\"><center>$erreur</center></font>";
	}
	//sinon on continue
	else
	{
		$query = " UPDATE `imprimante` SET `nom_im` = '$nom_im', `batiment_im` = '$batiment_im', `etage_im` = '$etage_im', 
		`couloir_im` = '$couloir_im', `marque` = '$marque' WHERE `imprimante_id` = '$id' ";
		echo $query;

		$requete = mysql_query($query) or exit(mysql_error());
	//on incrémente $modification pour afficher plus bas que la requete est efectuer
		$modification++;
	}
}
else
{
}

?>
Bon ce qui ne fonctionne pas c'est la requête UPDATE l'id n'est pas retrouvé et en faite $id = rien le vide !
Comment ce fait il que sur la requête SELECT, l'id est = une valeur mais que en revanche je ne puisse l'utiliser deux fois ?
L'id est recup d'une url avec $_GET ( $id = $_GET["id"]; )

Je bloc sérieux est j'espère trouver une réponse sérieuse ici :)
Je suis a dispo pour tous autre question

Merci à tous par avance.

Re: Une requete qui ne passe pas !

Posté : 19 juin 2010, 10:34
par Ganesh
Bonjour,

Quand tu déclares ton formulaire de modification, l'attribut action comporte-t-il bien la variable id avec sa valeur ?

P.S.: penses à sécuriser tes variables, ton script est particulièrement vulnérable dans l'état actuel.

Re: Une requete qui ne passe pas !

Posté : 19 juin 2010, 10:48
par dagny
Non je ne le declare pas j'ai :
<form action="modifier_im.php" method="post">
Et comment sécuriser le script ?
Quel sont les attaques possibles ?

Merci pour votre première réponse :)

Re: Une requete qui ne passe pas !

Posté : 19 juin 2010, 10:57
par Ganesh
On est bien d'accord que pour récupérer une variable par $_GET, il faut qu'elle soit déclarer dans l'URL appelée. Compte tenu que tu fais pointer ton formulaire vers "modifier_im.php", où aucune variable n'est déclarée, il est normal que ton $_GET['id'] soit vide.

Pour ce qui est des attaques possibles, il s'agit des injections SQL.

Re: Une requete qui ne passe pas !

Posté : 19 juin 2010, 11:02
par dagny
Ok mais je vient de faire la modif sur ce que tu me dit est si je change :
<form action="modifier_im.php" method="post">
par
<form action="modifier_im.php?id=$id" method="post">
Voici le resultat de la requête :

UPDATE `imprimante` SET `nom_im` = '2', `batiment_im` = '2', `etage_im` = '2', `couloir_im` = '2', `marque` = '2' WHERE `imprimante_id` = '$id'

Re: Une requete qui ne passe pas !

Posté : 19 juin 2010, 11:10
par Barbacane
<form action="modifier_im.php?id=$id" method="post">
Tu mixes du POST et du GET.
Tente:
<form action="modifier_im.php" method="get">
<input type="hidden" name="id" value="$id">
</form>

Re: Une requete qui ne passe pas !

Posté : 19 juin 2010, 11:16
par Ganesh
Ok mais je vient de faire la modif sur ce que tu me dit est si je change :
<form action="modifier_im.php" method="post">
par
<form action="modifier_im.php?id=$id" method="post">
Voici le resultat de la requête :

UPDATE `imprimante` SET `nom_im` = '2', `batiment_im` = '2', `etage_im` = '2', `couloir_im` = '2', `marque` = '2' WHERE `imprimante_id` = '$id'
Donc ton url doit être du type http://ton_site/modifier_im.php?id=$id

Il faut t'arranger pour que $id soit interpréter par php et non simplement écrit. A titre d'exemple :
$id = 1;
echo 'id = $id'; // affiche id = $id
echo "id = $id"; // affiche id = 1
echo 'id = '.$id; // affiche également id = 1

Re: Une requete qui ne passe pas !

Posté : 19 juin 2010, 11:22
par dagny
Voici comment j'ai résolue ce problème grace a vous !
<?php
if ($modification == 0)
{
	$action = "modifier_im.php?id=$id";
?>

<form action="<?php $action ?>" method="post">
Vraiment Merci a vous, mais serait il possible de vous prendre encore un peut de temps pour m'expliquer et me démontrer comment sécuriser ce script ?

Re: Une requete qui ne passe pas !

Posté : 19 juin 2010, 11:33
par Ganesh
En matière de sécurité, l'idéale est de bien comprendre ce que l'on fait. Voici un bon début, très bien expliqué. Bonne lecture.