IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Trois différentes erreurs depuis que je suis passé à PDO


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    110
    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 : 110
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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"
    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.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu t'es trompé dans les noms, il faut relire ton code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <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.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre très actif
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    110
    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 : 110
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. En 1987, 42% des développeurs américains étaient des femmes : que s’est-il passé depuis ?
    Par Sarah Mendès dans le forum Débats sur le développement - Le Best Of
    Réponses: 195
    Dernier message: 27/08/2015, 15h13
  2. [PHP 5.0] Mystère avec erreur inconnue en php, depuis que je fais du OO
    Par fredu dans le forum Langage
    Réponses: 10
    Dernier message: 28/03/2009, 15h28
  3. Réponses: 6
    Dernier message: 31/03/2008, 18h17
  4. Rien ne fonctionne plus depuis que j'ai mis un mot de passe
    Par beegees dans le forum Installation
    Réponses: 8
    Dernier message: 05/03/2008, 14h37
  5. mouse.cursorpos.y différent de ce que j'attends
    Par Guigui_ dans le forum Composants VCL
    Réponses: 3
    Dernier message: 28/11/2002, 21h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo