problème fonction UPDATE

Eléphanteau du PHP | 26 Messages

10 févr. 2012, 08:19

Bonjour,

J'ai crée un bout de code pour gérer mes entrée MySQL, mais je n'arrive pas les modifier avec mon bout de code.
J'ai chercher dans les tuto, mais c'est pas trop clair, si quelqu'un avait une idée de ou j'ai buggé.

Merci d'avance.

<?php
include('connexion.php');


if(isset($_GET['act'])) $act = $_GET['act']; // si $_GET['act'] est présent tu le récupères
else $act = '';
if(isset($_GET['id'])) $id = $_GET['id']; //si $_GET['id']; est présent tu le récupères
else $id = 0;
	 /////////////////////////////////////   update /////////////////////////////////////////////////////////////// 

if($act == 'modif') // ça veut dire qu'on a cliqué sur le bouton 'modif' d'une ligne, et on a récupéré l'id avec $_GET['id']
{
// je crée un formulaire avec les données récupérées de la table (SELECT) grâce à (WHERE id = $id)
?>
<?php
$result = mysql_query("SELECT * FROM offre WHERE id = $id");
 
while($data = mysql_fetch_array($result))
 {

 ?>


<form action="index.php?id=<?php echo $id;?>" method="post">
   <p>nom:<br/>
    <input name="nom2" size="35" value="<?php echo ''.$data["nom"].' ';?>" type="text"/>
   </p>
 
   <p>prix:<br/>
    <input name="prix2" size="35" value="<?php echo ''.$data["prix"].' ';?>" type="text"/>
   </p> 
 
   <p>offre:<br/>
    <input name="offre2" size="35" value="<?php echo ''.$data["offre"].' ';?>" type="text"/>
   </p> 
  
   <p>description:<br/>
   <textarea name="description2" rows="10" cols="50" ><?php echo ''.$data["description"].'';?></textarea>
  </p>
  
      <p>image:<br/>
    <input name="image2" size="35" value="<?php echo ''.$data["image"].' ';?>" type="text"/>
   </p> 
 
   <input name="Modifier" value="Modifier" type="submit"/>
   <input name="Effacer" value="Effacer" type="reset"/>
 
</form>
<?php
 }
 
 $nom2 = $data['nom'];

$prix2 = $data['prix'];

$offre2 = $data['offre'];

$description2 = $data['description'];

$image2 = $data['image'];




$result = mysql_query(" UPDATE offre SET nom2='$nom', prix2='$prix', offre2='$offre', description2='$description', image2='$image' WHERE id = '$id'");
 
//Si il y a une erreur, on crie ^^
if (!$result) 
{
    die('Requête invalide : ' . mysql_error());
}
else {
//Si tout va bien, on informe que la modification est faite
echo '<p>La modification à été effectué avec succès. <a href=index.php>Retour à l\'administration.</a></p>';
}


//////////////////////////////  suppression
 
}
else if($act == 'supprimer') // ça veut dire qu'on a cliqué sur le bouton 'supprimer' d'une ligne, et on a récupéré l'id avec $_GET['id']
{
// je fais la requête de suppression grâce à l'id (DELETE FROM matable WHERE id = $id)

  $sql = "DELETE FROM offre WHERE ID = ".$id ;
  
  if(mysql_query($sql))
  {
   		 echo '<body onLoad="alert(\'Ev&eacute;nement supprim&eacute; avec succ&egrave;s.\')">'; 
		 header("refresh:1; URL = 'index.php' ");
  }
  else
  {
    	 echo '<body onLoad="alert(\'Erreur dans la suppression.\')">'; 
		 header("refresh:1; URL = 'index.php' ");
  }

}
else // si act n'est ni modif ni supprimer, tu affiches la table
{
echo '<table border="1">';
echo '<tr><th>Nom<th>Prix<th>offre<th>description<th>Modifier</th><th>Supprimer</th></tr>';
// tu fais ta requête SELECT pour récupérer tous les users
$sql = 'SELECT * FROM offre';
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
//dans la boucle while pour traiter ton résultat de requête, tu crées tes lignes :
while($data = mysql_fetch_assoc($req))


echo '<tr><td>' . htmlentities($data['nom']) . '</td><td>' .htmlentities($data['prix']) .'</td><td>' .htmlentities($data['offre']) .'</td><td>' . htmlentities($data['description']) .'</td><td>' . '<a href="index.php?act=modif&id='.$data['id'].'">modifier user = '.$data['id'].'</a>' . '</td><td>' . '<a href="index.php?act=supprimer&id='.$data['id'].'">supprimer user = '.$data['id'].'</a></td>'. '</tr><tr>' ;
}
echo '</table>';


?>



ViPHP
xTG
ViPHP | 7331 Messages

10 févr. 2012, 09:33

Tu as des espaces partout dans tes champs... Ce qui veut dire qu'en validant le formulaire tu penses ne rien avoir modifié mais ce n'est pas le cas, tu as rajouté un espace partout !
Ceci serait mieux :
<?php echo $data["nom"]; ?>
Pour le code de modification, tu ne protèges pas les données !
Regardes du côté de la fonction mysql_real_escape_string().

Et pour intégrer la modification il faut juste vérifier qu'on a reçu des données par la méthode POST.
Donc :
if( !empty($_POST) ){
  // j'ai reçu un formulaire, j'update
}

Eléphanteau du PHP | 26 Messages

11 févr. 2012, 08:29

Bonjour xTG,

Merci de ton aide, mais malheuresement, ça n'a pa fonctionné.

<?php
include('connexion.php');


if(isset($_GET['act'])) $act = $_GET['act']; // si $_GET['act'] est présent tu le récupères
else $act = '';
if(isset($_GET['id'])) $id = $_GET['id']; //si $_GET['id']; est présent tu le récupères
else $id = 0;
	 /////////////////////////////////////   update /////////////////////////////////////////////////////////////// 

if($act == 'modif') // ça veut dire qu'on a cliqué sur le bouton 'modif' d'une ligne, et on a récupéré l'id avec $_GET['id']
{
// je crée un formulaire avec les données récupérées de la table (SELECT) grâce à (WHERE id = $id)
?>
<?php
$result = mysql_query("SELECT * FROM offre WHERE id = $id");
 
while($data = mysql_fetch_array($result))
 {

 ?>


<form action="index.php?id=<?php echo $id;?>" method="post">
   <p>nom:<br/>
    <input name="nom2" size="35" value="<?php echo $data["nom"] ;?>" type="text"/>
   </p>
 
   <p>prix:<br/>
    <input name="prix2" size="35" value="<?php echo $data["prix"] ;?>" type="text"/>
   </p> 
 
   <p>offre:<br/>
    <input name="offre2" size="35" value="<?php echo $data["offre"] ;?>" type="text"/>
   </p> 
  
   <p>description:<br/>
   <textarea name="description2" rows="10" cols="50" ><?php echo $data["description"] ;?></textarea>
  </p>
  
      <p>image:<br/>
    <input name="image2" size="35" value="<?php echo $data["image"] ;?>" type="text"/>
   </p> 
 
   <input name="Modifier" value="Modifier" type="submit"/>
   <input name="Effacer" value="Effacer" type="reset"/>
 
</form>
<?php
 }
 
 $nom2 = $data['nom'];

$prix2 = $data['prix'];

$offre2 = $data['offre'];

$description2 = $data['description'];

$image2 = $data['image'];




$result = mysql_query(" UPDATE offre SET nom2='$nom2', prix2='$prix2', offre2='$offre2', description2='$description2', image2='$image2' WHERE id = '$id'");
 

//Si il y a une erreur, on crie ^^
if (!$result) 
{
    die('Requête invalide : ' . mysql_error());
}
else {
//Si tout va bien, on informe que la modification est faite
echo '<p>La modification à été effectué avec succès. <a href=index.php>Retour à l\'administration.</a></p>';
}


//////////////////////////////  suppression
 
}
else if($act == 'supprimer') // ça veut dire qu'on a cliqué sur le bouton 'supprimer' d'une ligne, et on a récupéré l'id avec $_GET['id']
{
// je fais la requête de suppression grâce à l'id (DELETE FROM matable WHERE id = $id)

  $sql = "DELETE FROM offre WHERE ID = ".$id ;
  
  if(mysql_query($sql))
  {
   		 echo '<body onLoad="alert(\'Ev&eacute;nement supprim&eacute; avec succ&egrave;s.\')">'; 
		 header("refresh:1; URL = 'index.php' ");
  }
  else
  {
    	 echo '<body onLoad="alert(\'Erreur dans la suppression.\')">'; 
		 header("refresh:1; URL = 'index.php' ");
  }

}
else // si act n'est ni modif ni supprimer, tu affiches la table
{
echo '<table border="1">';
echo '<tr><th>Nom<th>Prix<th>offre<th>description<th>Modifier</th><th>Supprimer</th></tr>';
// tu fais ta requête SELECT pour récupérer tous les users
$sql = 'SELECT * FROM offre';
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
//dans la boucle while pour traiter ton résultat de requête, tu crées tes lignes :
while($data = mysql_fetch_assoc($req))


echo '<tr><td>' . htmlentities($data['nom']) . '</td><td>' .htmlentities($data['prix']) .'</td><td>' .htmlentities($data['offre']) .'</td><td>' . htmlentities($data['description']) .'</td><td>' . '<a href="index.php?act=modif&id='.$data['id'].'">modifier user = '.$data['id'].'</a>' . '</td><td>' . '<a href="index.php?act=supprimer&id='.$data['id'].'">supprimer user = '.$data['id'].'</a></td>'. '</tr><tr>' ;
}
echo '</table>';


?>



Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 févr. 2012, 10:48

Ton script n'est pas cohérent.. tu testes la variable $act pour savoir s'il faut afficher ou non le formulaire. Dans le cas ou celle-ci est égale à "modif", tu vas :
- chercher en base les valeurs pour alimenter le formulaire,
- afficher le formulaire
- mettre à jour les données en base avec les valeurs que tu viens de récupérer

Donc en gros, à aucun moment tu ne demandes à l'utilisateur de renseigner de nouvelles valeur avant ton update :)

Ton update ne devrait se faire que si le formulaire a été envoyé par l'utilisateur et en récupérant les données transmises en post ($_POST) et non celles que tu récupères de ta base ($data) ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...