Problème avec UPDATE

Répondre
jackbocar
le 25/07/2008 à 17:14
jackbocar
Bonjour,

Je n'arrive pas à trouver où il y a une erreur…

Mon code MODITICATION.PHP ET MODIFICATION_1.PHP fonctionnent tous deux parfaitement si je ne place pas dans MODIFICATION_1.PHP
<?php news="'.$_POST[ 'news'].'", ?>
.

Ce qui veut dire, je peux modifier tous les autres champs si je ne place pas dans mon code
<?php UPDATE SET news="'.$_POST[ 'news'].'", ?>


Merci de votre aide

Jack Bocar

Mon code MODIFICATION.php

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

if (isset($_GET['id']) && !isset($_GET['go'])) {
$sql = 'SELECT auteur, titre, type, menu, news, isbn FROM librairie WHERE id="'.$_GET['id'].'"';
$sth = $dbh->query($sql);
$result = $sth->fetchAll();
$row = $result[0];
$auteur=$row['auteur'];
$titre=$row['titre'];
$type=$row['type'];
$menu=$row['menu'];
$news=$row['news'];
$isbn=$row['isbn'];
}
?>
<form name="formulaire" method="post" action="MODIFICATION_1.php?go=ok">
Auteur :</span></td><td align="left"><input type="text" name="auteur" maxlength="150" size="80" value="<?php echo $auteur; ?>"><br />
Titre :</span></td><td align="left"><input type="text" name="titre" maxlength="150" size="80" value="<?php echo $titre; ?>"><br />
Type :</span></td><td align="left"><input type="text" name="type" maxlength="150" size="80" value="<?php echo $type; ?>"><br />
Menu :</span></td><td align="left"><input type="text" name="menu" maxlength="150" size="80" value="<?php echo $menu; ?>"><br />
<tr><td colspan="2" align="center"><textarea name="news" cols="50" rows="10"><?php echo $news; ?></textarea><br />
Isbn :</span></td><td align="left"><input type="text" name="isbn" maxlength="150" size="80" value="<?php echo $isbn; ?>"><br />
<input type="submit" value="Envoyer"><br />
<input type="hidden" name="id" value="<?php echo $_GET['id']; ?>">
</form>



Mon code MODIFICATION_1.php
<?php
include ('connexion.php');

if (isset($_GET['go'])) {
$dbh->exec('UPDATE librairie SET visible="0", auteur="'.$_POST['auteur'].'", titre="'.$_POST['titre'].'", type="'.$_POST['type'].'", menu="'.$_POST['menu'].'", news="'.$_POST['news'].'", isbn="'.$_POST['isbn'].'" WHERE id="'.$_POST['id'].'"');
header('Location: index.php');
exit();
}
?>



Ma table :

--
-- Structure de la table `librairie`
--

CREATE TABLE `librairie` (
`id` int(11) NOT NULL auto_increment,
`auteur` varchar(150) NOT NULL,
`titre` varchar(150) NOT NULL,
`type` varchar(50) NOT NULL,
`menu` varchar(100) NOT NULL,
`news` longtext NOT NULL,
`isbn` varchar(100) NOT NULL,
`visible` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;
LupusMic
le 25/07/2008 à 17:18
LupusMic
Tu oublie de préciser le nom de la table dans ton update !
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
jackbocar
le 25/07/2008 à 18:10
jackbocar
Mais non, ma table c'est librairie ci-dessous, en haut c'est les exemples que je dois enlever pour que le code fonctionne.

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

if (isset($_GET['go'])) {
$dbh->exec('UPDATE librairie SET visible="0", auteur="'.$_POST['auteur'].'", titre="'.$_POST['titre'].'", type="'.$_POST['type'].'", menu="'.$_POST['menu'].'", news="'.$_POST['news'].'", isbn="'.$_POST['isbn'].'" WHERE id="'.$_POST['id'].'"');
header('Location: index.php');
exit();
}
?>






Maintenant, peux tu me dire pourquoi ce code sortie de mon ouvrage PHP 5 Avancé ne fonctionne t'il pas ?

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

$auteur = $_POST['auteur'];
$titre = $_POST['titre'];
$type = $_POST['type'];
$menu = $_POST['menu'];
$news = $_POST['news'];
$isbn = $_POST['isbn'];
$id = (int) $_GET['id'];

$sql=('UPDATE librairie SET auteur=:auteur, titre=:titre, type=:type, menu=:menu, news=:news, isbn=:isbn, WHERE id=:id');

$stmt = $dbh->prepare($sql);

$update = (array(':auteur' => $auteur, ':titre' => $titre, ':type' => $type, ':menu' => $menu, ':news' => $news, ':isbn' => $isbn));

$stmt->execute($update);
$stmt->execute();
?>
LupusMic
le 25/07/2008 à 18:49
LupusMic
Dans la première requête que tu dis devoir enlever, il manque le nom de la table.

Je ne connais pas PDO. Quel est le message d'erreur ?
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LupusMic
le 25/07/2008 à 18:51
LupusMic
Tu as une virgule avant ton where dans la requête.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
jackbocar
le 25/07/2008 à 19:13
jackbocar
C'est pareil avec ou sans la virgule en trop !!

Warning: PDOStatement::execute() [function.PDOStatement-execute]: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in G:\www\www.pdo-net\admin\edit_news_1.php on line 35

Warning: PDOStatement::execute() [function.PDOStatement-execute]: SQLSTATE[HY093]: Invalid parameter number in G:\www\www.pdo-net\admin\edit_news_1.php on line 35

Warning: PDOStatement::execute() [function.PDOStatement-execute]: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in G:\www\www.pdo-net\admin\edit_news_1.php on line 36

Warning: PDOStatement::execute() [function.PDOStatement-execute]: SQLSTATE[HY093]: Invalid parameter number in G:\www\www.pdo-net\admin\edit_news_1.php on line 36

Les lignes :
35 $stmt->execute($update);
36 $stmt->execute();
jackbocar
le 25/07/2008 à 19:22
jackbocar
Pour le code du premier post :

Je me suis aussi mal exprimé que ça ?

Si je me sers de cette ligne de code, rien ne fonctionne. De plus pas de message d'erreur, retout à l'index sans aucun changement.
<?php
$dbh->exec('UPDATE librairie SET visible="1", auteur="'.$_POST['auteur'].'", titre="'.$_POST['titre'].'", type="'.$_POST['type'].'", menu="'.$_POST['menu'].'", news="'.$_POST['news'].'", isbn="'.$_POST['isbn'].'" WHERE id="'.$_POST['id'].'"');
header('Location: index.php');
exit();
}
?>


Si je me sers de celle-ci, tout fonctionne mis à part que je ne peux plus modiffier les news
<?php
$dbh->exec('UPDATE librairie SET visible="1", auteur="'.$_POST['auteur'].'", titre="'.$_POST['titre'].'", type="'.$_POST['type'].'", menu="'.$_POST['menu'].'", isbn="'.$_POST['isbn'].'" WHERE id="'.$_POST['id'].'"');
header('Location: index.php');
exit();
}
?>


Jack Bocar
LupusMic
le 26/07/2008 à 08:20
LupusMic
Dans ta requête, tu nomme les arguments suivants : ":auteur", ":titre", ":type", ":menu", ":news", ":isbn" et ":id". Or, dans le tableau de paramètres contenant les valeurs, tu ne fournit pas d'élément ayant pour clé "id". C'est pour ça que PDO n'a pas assez d'arguments et râle.

Il ne faut pas utiliser l'en-tête HTTP location, surtout pendant une phase de développement, et encore moins en période d'apprentissage. C'est le meilleur moyen de se perdre.

Qu'aucun message d'erreur ne s'affiche directement ne veut pas dire qu'il n'y a pas de message d'erreur prêt. Il faut que tu teste le retour des fonction qui peuvent générer des erreurs, pour déterminer si tu dois aller chercher le message d'erreur.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
jackbocar
le 29/07/2008 à 10:54
jackbocar
Bonjour,

Quand j'enregistre une nouvelle entrée, tous mes guillemets comme ceux-ci ", je les transforme en caractères HTML (&nbsp;).

Et lorsque j'édite ma nouvelle entrée pour une modification, ces guillemets HTML (&nbsp;) se changent automatiquement en ".

Et, je ne sais pas pourquoi, le fait d'avoir un seul ", me renvoi sur la page index sans aucun changement.

En fait, je pense que la BD refuse l'enregistrement des ", il me faut les convertir en entités HTML.

Ce qui fait, si je fais un lien, il doit être <a href='mon_lien.php' class='ma_class'>Mon lien</a>, idem pour les images.

Quelqu'un aurait-il rencontré ce problème ?
Quelle solution avez-vous trouvé ?

Merci

Jack Bocar
LupusMic
le 30/07/2008 à 13:50
LupusMic
Attention, &nbsp; n'est pas l'entité représentant les guillemets ! nbsp veut dire non-breakable space (espace insécable). C'est un espace typographique qui utilisé lorsque deux groupes de caractères ne doivent pas être séparés lors d'un retour à la ligne :

<label for='name'>Entrez votre nom&nbsp;: </label><input id='name' name='name' value='' />


Tu peux consulter cette référence assez exhaustive concernant les entités. Tu y trouveras l'équivalent ou guillemets simples et doubles.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours