Update entrée table base de donnée

janyoura Messages postés 11 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2012 - 23 mars 2012 à 20:26
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 - 26 mars 2012 à 06:07
Salut
Je suis plantée dans la création d'une page qui permet de modifier une actualité diffusée sur mon site, je voudrai pouvoir ,en cliquant sur modifier, être dirigée vers la page modification, qui m'affiche une zone de texte dans laquelle il y a le contenu de l'actualité à modifier, ainsi j'effectue le changement et avec la requête 'UPDATE' la modification aura lieu dans la base de donnée.
Voilà mon objectif, cependant je ne suis pas arrivée à concevoir comment le code doit etre, j'ai fais plusieurs essais mais en vain, pouvez vous donc me donner un petit coup de pouce? et Merci
Table: news
champs:
-id: (int) clé primaire incrémentation automatique
-titre: (VARCHAR)
-contenu: TEXT
voilà un de mes essais:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns= "http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>modifier actualité</title>
</head>

<?php
try
{
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=projet', 'root', '', $pdo_options);
}
catch (Exception $e)
{
        die('Erreur : ' . $e->getMessage());
}
?>
  Modification actualité  

   <form action ="essai.php" method="post">
        
        <label for="titre">Titre</label> : 
" />

        <label for="contenu">Contenu</label> : 
<textarea name="contenu" rows="8" cols="45" id="contenu">
         <?php
  if (isset($_GET['contenu']))
  echo $_GET['contenu'];
  ?>
</textarea>

        


    </form>
<?php
if (isset($_GET['nv_contenu']))
{
     $req $bdd->prepare('UPDATE news SET contenu :nv_contenu WHERE titre =\'' . $_GET['titre'] . '\'');
     $req->execute(array(
'nv_contenu' => $_GET['nv_contenu']
 ));
    $req->closeCursor();
}
?>

</html>

5 réponses

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
24 mars 2012 à 19:51
Salut,

Tu utilises $_GET alors que ton formulaire est en post, utilises donc ça par $_POST à la place.
0
janyoura Messages postés 11 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2012
25 mars 2012 à 11:11
salut
J'ai changé avec $_POST mais ça ne fonctionne toujours pas.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns= "http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>modifier actualité</title>
</head>

<?php
try
{
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=projet', 'root', '', $pdo_options);
}
catch (Exception $e)
{
        die('Erreur : ' . $e->getMessage());
}
?>
  Modification actualité  

   <form action ="essai.php" method="post">
        
        <label for="titre">Titre</label> : 
" />

        <label for="contenu">Contenu</label> : 
<textarea name="contenu" rows="8" cols="45" id="contenu">
         <?php
  if (isset($_POST['contenu']))
  echo $_POST['contenu'];
  ?>
</textarea>

        


    </form>
<?php
if (isset($_POST['contenu']))
{
     $req $bdd->prepare('UPDATE news SET contenu :nv_contenu WHERE titre =\'' . $_POST['titre'] . '\'');
     $req->execute(array(
'nv_contenu' => $_POST['contenu']
 ));
    $req->closeCursor();
}
?>

</html>
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
25 mars 2012 à 17:25
Salut,

Qu'est-ce qui ne fonctionne pas exactement ? Uniquement l'insertion dans la bdd ou bien autre chose ?

$req $bdd->prepare('UPDATE news SET contenu :nv_contenu WHERE titre =\'' . $_POST['titre'] . '\'');

Alors ça, c'est JAMAIS, JAMAIS, mais alors JAMAIS. PDO est fait spécialement pour ne pas avoir à générer soi même la requête SQL à grand coups de concaténations (c'est extrêmement dangereux), tu as d'autres manières de faire. D'ailleurs tu l'utilise pour le contenu, je ne vois pas pourquoi tu ne le fais pas pour le titre.
0
janyoura Messages postés 11 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2012
25 mars 2012 à 23:12
merci pour l'information :)
mais voilà comment j'ai changé le code mais ni l'insertion ni l'affichage du contenu à modifier ne marchent.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns= "http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>modifier actualité</title>
</head>

<?php
try
{
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=projet', 'root', '', $pdo_options);
}
catch (Exception $e)
{
        die('Erreur : ' . $e->getMessage());
}
?>
  Modification actualité  
<?php
if (isset($_GET['id']))
{
  $reponse  $bdd->query('SELECT titre, contenu FROM news WHERE id :id');
  while ($donnees = $reponse->fetch())
{
?>
<form action="affichage_news.php" method="post">
        
        <label for="titre">Titre</label> : 
" />

        <label for="contenu">Contenu</label> : 
<textarea name="contenu" rows="8" cols="45" id="contenu">
          <?php
  if (isset($_POST['contenu']))
  echo $_POST['contenu'];
          ?>
</textarea>

        
  


    </form>
<?php
}
$reponse->closeCursor();
}
if (isset($_POST['contenu'], $_POST['titre'], $_POST['id']))
{
    $contenu = $_POST['contenu'];
    $titre = $_POST['titre'];
 
    $req $bdd->prepare('UPDATE news SET contenu :contenu WHERE id = :id');
    $req->bindParam(':contenu', $contenu, PDO::PARAM_STR);
    $req->bindParam(':titre', $titre, PDO::PARAM_STR);
    $req->execute();
    $req->closeCursor();
}
?>

</html>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
26 mars 2012 à 06:07
if (isset($_GET['id']))

Tu ne passes rien en get, donc forcément...
Deux solutions, au choix :
- Change la valeur du action du form afin de mettre l'id.
- OU passe l'id en post dans un input hidden
0
Rejoignez-nous