Probleme requete SQL

Eléphanteau du PHP | 13 Messages

06 déc. 2011, 18:52

Bonjour a tous
Je cherche a creer une zone admin qui permet a l'admin de mettre des articles, cependant lorsque l'on choisi de modifier le titre il m'affiche Syntax error or access violation: 'WHERE id=1' at line 1
quand je modifie le contenu ou la date il m'affiche d'autre données supplémentaires dans l'erreur.
<?php
					try
					{ 
						$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
						$bdd = new PDO('mysql:host=localhost;dbname=***************', 'root', '', $pdo_options);
						if (isset($_POST['titre']) AND isset($_POST['contenu']) AND isset($_POST['date_creation_fr']))
						{
							$titre = addslashes($_POST['titre']);
							$contenu = addslashes($_POST['contenu']);
							$date_creation_fr = $_POST['date_creation_fr'];
							if ($_POST['id_article'] == 0)
								{
									$req = $bdd->prepare('INSERT INTO article(titre, contenu, date_creation) VALUES (:titre, :contenu, :date_creation)');
									$req->execute(array('titre' => $titre, 'contenu' => $contenu, 'date_creation' => $date_creation_fr));
										
								}
								else
								{
									$_POST['id_article'] = addslashes($_POST['id_article']);
									$req = $bdd->query('UPDATE article SET titre=' . $titre . ', contenu=' . $contenu . ', date_creation=' . $date_creation_fr . ' WHERE id=' . $_POST['id_article'] . '');
								}
						}
						if (isset($_GET['supprimer_article']))
						{
							$_GET['supprimer_article'] = addslashes($_GET['supprimer_article']);
							$req = $bdd->query('DELETE FROM article WHERE id =' . $_GET['supprimer_article'] . '');
						}
						?>
Je ne met pas tout je pense que l'erreur est ici
La partie INSERT marche parfaitement c'est la UPDATE qui soule ^^

ViPHP
xTG
ViPHP | 7331 Messages

06 déc. 2011, 19:53

Utilises PDO::quote() pour protéger les variables.

Eléphanteau du PHP | 13 Messages

06 déc. 2011, 21:13

je remplace juste quote par query ? J'ai plus d'erreur par contre ca m'edite rien :(

ViPHP
xTG
ViPHP | 7331 Messages

06 déc. 2011, 21:39

As-tu regardé la documentation de la fonction avant de faire un simple et bête remplacement ?
http://fr2.php.net/manual/fr/pdo.quote.php

Eléphanteau du PHP | 13 Messages

06 déc. 2011, 21:51

nan apres j'ai essayé ca
$req = $bdd->query('UPDATE article SET titre=' . $titre . ', contenu=' . $contenu . ', date_creation=' . $date_creation_fr . ' WHERE id=' . $bdd->quote($_POST['id_article']) . '');
mais ca me remet le message d'erreur sql, j'ai pas trop compris comment utiliser pdo quote avec la documentation :s

ViPHP
xTG
ViPHP | 7331 Messages

07 déc. 2011, 08:15

Cette dernière utilisation est déjà mieux, cela dit il faut le faire pour toutes les variables.
Car d'après ton message d'erreur c'est à cause de ce qui se trouve quelque part avant le WHERE que ça plante.

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

07 déc. 2011, 10:01

Cette dernière utilisation est déjà mieux, cela dit il faut le faire pour toutes les variables.
Car d'après ton message d'erreur c'est à cause de ce qui se trouve quelque part avant le WHERE que ça plante.
au vu du nom de champ date_creation, je pense que c'est une date et que donc : date_creation=' . $date_creation_fr . ' va pas fournir une donnée correcte (hé oui une date doit être fournit sous forme de chaine de caractères ;) )

pour ce qui est de l'utilisation de PDO y a un tuto la => http://www.siteduzero.com/tutoriel-3-34 ... x-bdd.html

bonne lecture :)

et pas de requête préparée par pitié :mrgreen:

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 13 Messages

07 déc. 2011, 20:48

merci j'ai fait pour les autres données et ca marche :D
Merci aussi pour le tuto je sais a quoi ca sert maintenant

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

07 déc. 2011, 21:35

:mrgreen: :mrgreen:
Il en faut peu pour être heureux ......