Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/02/2011, 15h18   #1
Nouveau Membre du Club
 
Homme
Inscription : février 2009
Messages : 93
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2009
Messages : 93
Points : 31
Points : 31
Par défaut Trois différentes erreurs depuis que je suis passé à PDO

Bonjour,
j'ai décidé de mettre tous mes scripts à PDO, mais voila que j'ai pas mal d'erreurs. Je voudrais que vous m'aidez à les corriger s'il vous plait.
je vous montre la première page celle qui envoie la news sur le site.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php 
		if (isset($_GET['modifier_news'])) // Si on demande de modifier une news
		{
				// On protège la variable "modifier_news" pour éviter une faille SQL
			$_GET['modifier_news'] = htmlspecialchars($_GET['modifier_news']);
				// On récupère les infos de la news correspondante
			$retour = $db ->query('SELECT * FROM billets WHERE id=\'' . $_GET['modifier_news'] . '\'');
			while($donnees =$retour->fetch())
			{
					// On place le titre et le contenu dans des variables simples
				$titre = stripslashes($donnees['titre']);
				$contenu = stripslashes($donnees['contenu']);
				$id_billet = $donnees['id']; // Cette variable va servir pour se souvenir que c'est une modification
			}
		}
		else // C'est qu'on rédige une nouvelle news
		{
				// Les variables $titre et $contenu sont vides, puisque c'est une nouvelle news
			$titre = '';
			$contenu = '';
			$id_billet = 0; // La variable vaut 0, donc on se souviendra que ce n'est pas une modification
		}
?>
<form action="./liste_news.php" method="post">
<p>Titre : <input type="text" size="30" name="titre" value="<?php echo $titre; ?>" /></p>
<p>
    Votre News:<br />
    <textarea name="contenu" cols="50" rows="10">
    <?php echo $contenu; ?>
    </textarea><br />
 
    <input type="hidden" name="id_news" value="<?php echo $id_billet; ?>" />
    <input type="submit" value="Envoyer" />
</p>
</form>
Je vous montre la page qui liste, modifie et supprime les news.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
		//-----------------------------------------------------
// Vérification 1 : est-ce qu'on veut poster une news ?
//-----------------------------------------------------
if (isset($_POST['titre']) AND isset($_POST['contenu']))
{
    $titre = htmlspecialchars($_POST['titre']);
    $contenu = htmlspecialchars($_POST['contenu']);
    // On vérifie si c'est une modification de news ou pas
	$id_billet = htmlspecialchars($_POST['billet']);
   	if ($_POST['id_billet'] == 0)// (!empty($_POST['billet'])) $id_billet = $_POST['billet']; //
	{
        // Ce n'est pas une modification, on crée une nouvelle entrée dans la table
        $new = $db->query("INSERT INTO billets(titre, contenu, date_creation) VALUES(titre, contenu, NOW())") or die(print_r($db->errorInfo()));
		$new->closeCursor();
	}
    else //$id = 0;
    {
        // On protège la variable "id_news" pour éviter une faille SQL
        $_POST['id_billet'] = addslashes($_POST['id_billet']);
        // C'est une modification, on met juste à jour le titre et le contenu
        $req = $db->query("UPDATE billets SET titre='" . $titre . "', contenu='" . $contenu . "' WHERE id='" . $_POST['id_billet'] . "'");
		$req->closeCursor();
   }
}
// Vérification 2 : est-ce qu'on veut supprimer une news ?
//-------------------------------------------------------
if (isset($_GET['supprimer_news'])) // Si on demande de supprimer une news
{
    $_GET['supprimer_news'] = htmlspecialchars($_GET['supprimer_news']);
    $req = $db->query('DELETE FROM billets WHERE id=\'' . $_GET['supprimer_news'] . '\'');
	$req->closeCursor();
}
?>
<table><tr>
<th>Modifier</th>
<th>Supprimer</th>
<th>Titre</th>
<th>Date</th>
</tr>
<?php
	$per = $db->query('SELECT id, titre, contenu, DATE_FORMAT(date_creation, \'Le %d - %m - %Y à %Hh %imin %ssec\') AS date_creation_fr FROM billets ORDER BY id  DESC LIMIT '.$id.', 5');
    while ($donnees = $per->fetch())
	{
?>
<tr>
<td><?php echo '<a href="rediger_news.php?modifier_news=' . $donnees['id'] . '">'; ?>Modifier</a></td>
<td><?php echo '<a href="liste_news.php?supprimer_news=' . $donnees['id'] . '">'; ?>Supprimer</a></td>
<td><?php echo stripslashes($donnees['titre']); ?></td>
<td><?php echo DATE_FORMAT('%d/%m/%Y à %Hh%imin%ss\'', $donnees['date_creation']); ?></td>
</tr>
<?php
} // Fin de la boucle qui liste les news
$per ->closeCursor();
?>
</table>
Voila les erreurs que je reçois pendant l'affichage de la page "./liste_news.php"
Citation:
Notice: Undefined index: billet in C:\wamp\www\site\administration\liste_news.php on line 47
Notice: Undefined index: date_creation in D:\wamp\www\site\administration\liste_news.php on line 87
Warning: date_format() expects parameter 1 to be DateTime, string given in D:\wamp\www\site\administration\liste_news.php on line 87
Merci de me donner un coup de main.
herzak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 15h31   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Tu t'es trompé dans les noms, il faut relire ton code.

Code :
$id_billet = htmlspecialchars($_POST['billet']);
tu n'as pas de champ "billet" dans ton formulaire, tu as par contre "id_news".
Il n'y a aucune raison de faire un htmlspecialchars() ici.

Code :
1
2
        // On protège la variable "id_news" pour éviter une faille SQL
        $_POST['id_billet'] = addslashes($_POST['id_billet']);
En PDO on utilise des requêtes préparées.
Si tu ne veux pas passer par une requête préparée et que ton id est numérique, utilise intval().

Code :
$per = $db->query('SELECT id, titre, contenu, DATE_FORMAT(date_creation, \'Le %d - %m - %Y à %Hh %imin %ssec\') AS date_creation_fr FROM billets ORDER BY id  DESC LIMIT '.$id.', 5');
Ne fait pas ta mise en forme dans une requête SQL.
Retourne ta date seule (au format francais si tu veux) et ajoute le texte en PHP ensuite au moment ou il le faut.

Code :
<td><?php echo DATE_FORMAT('%d/%m/%Y à %Hh%imin%ss\'', $donnees['date_creation']); ?></td>
Ton champ s'appelle date_creation_fr et non date_creation.
Et tu n'as pas besoin de date_format() ici puisque que tu as déjà formaté ta date dans la requête.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 16h01   #3
Nouveau Membre du Club
 
Homme
Inscription : février 2009
Messages : 93
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2009
Messages : 93
Points : 31
Points : 31
Oui mon champ se nomme "date_creation"
je modifie et je vous tient informer
j'ai essayé de corriger mes erreurs selon votre indication.
l'erreur sql est corrigé mais pas l'autre.
le champ du formulaire a été corrigé.

Bon merci j'ai finalement trouvé le petit trou.
je devais déclaré une variable tout en haut.
bonne soirée
herzak est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h53.


 
 
 
 
Partenaires

Hébergement Web