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 :

update entrée d'une table


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut update entrée d'une table
    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
    La page est: essai.php
    Table: news
    champs:
    -id: (int) clé primaire incrémentation automatique
    -titre: (VARCHAR)
    -contenu: TEXT
    voilà un de mes essais:
    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
    <!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>
    <body>
    <?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());
    }
     
    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();
    }
    ?>
    <b> Modification actualité </b>
     
       <form action="essai.php" method="post">
            <p>
            <label for="titre">Titre</label> : <br><input type="text" name="titre" id="titre" value="<?php if(isset($_POST['titre'])) echo $_POST['titre']?>" /><br />
            <label for="contenu">Contenu</label> : <br><textarea name="contenu" rows="8" cols="45" id="contenu">
             <?php
    		  if (isset($_POST['contenu']))
    		  echo $_POST['contenu'];
    		  ?>
    		</textarea><br />
            <input type="submit" value="Valider" />
    	</p>
        </form>
    </body>
    </html>
    "Scientists dream about doing great things. Engineers do them.”

    La réussite après tant de travail est un sentiment à vivre

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  2. #2
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    A priori ce serait au niveau de la requête préparée où ça n'irait pas.
    Essaies comme ceci pour voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if (isset($_POST['contenu'], $_POST['titre']))
    {
        $contenu = $_POST['contenu'];
        $titre = $_POST['titre'];
     
        $req = $bdd->prepare('UPDATE news SET contenu = :contenu WHERE titre = :titre');
        $req->bindParam(':contenu', $contenu, PDO::PARAM_STR);
        $req->bindParam(':titre', $titre, PDO::PARAM_STR);
        $req->execute();
        $req->closeCursor();
    }
    J'ai rajouté $_POST['titre'] dans le isset(), histoire de ne pas se faire avoir.
    Il y a des exemple dans la doc de Php : PDOStatement::execute


    Au passage, pourquoi utilises tu comme critère "titre" pour mettre à jour (pour désigner) la news ?
    Pourquoi ne pas plutôt utiliser un identifiant ?
    Il doit avoir un identifiant unique pour chaque news, non ? (c'est théoriquement plus fiable).
    D'ailleurs, 2 (voir plus) news pourraient très bien avoir le même titre, si c'est le cas ça va buguer.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  3. #3
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut
    Salut
    Merci RunCodePhp pour l'aide, j'ai changé le code comme vous m'avez indiqué mais ça ne marche toujours pas :\ , je vais changer l'identificateur peut etre que ça marchera.

    Bon moi j'ai choisis comme identificateur le 'titre' parce que j'ai pensé que c'est mieux puisque l'éditeur connait le titre et non pas l'id du titre dans la table.
    Et merci pour le plus que vous m'avez ajouté par bindParam (j'ai consulté le cours mais j'ai pas bien compris la difference entre avec bindParam et sans)
    "Scientists dream about doing great things. Engineers do them.”

    La réussite après tant de travail est un sentiment à vivre

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  4. #4
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut
    J'ai pensé que le mieux est de récupérer l'actualité à modifier tout d'abord, de l'afficher et puis la modifier, voici le code:
    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
    <!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>
    <body>
    <?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());
    }
    ?>
    <b> Modification actualité </b>
    <?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">
            <p>
            <label for="titre">Titre</label> : <br><input type="text" name="titre" id="titre" value="<?php if(isset($_POST['titre'])) echo $_POST[          'titre']?>" /><br />
            <label for="contenu">Contenu</label> : <br><textarea name="contenu" rows="8" cols="45" id="contenu">
              <?php
    		  if (isset($_POST['contenu']))
    		  echo $_POST['contenu'];
              ?>
    		</textarea><br />
            <input type="submit" value="Valider" />
    	  </p>
        </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();
    }
    ?>
    </body>
    </html>
    Mais avec ça le code ne fonctionne pas et j'ai cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe pr�s de ':id' � la ligne 1' in C:\Program Files (x86)\EasyPHP-5.3.8.0\www\projet\essai.php:23 Stack trace: #0 C:\Program Files (x86)\EasyPHP-5.3.8.0\www\projet\essai.php(23): PDO->query('SELECT titre, c...') #1 {main} thrown in C:\Program Files (x86)\EasyPHP-5.3.8.0\www\projet\essai.php on line 23

    J'ai essayé de tester l'affichage mais ça marche pas aussi!
    code affichage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    if (isset($_GET['id']) AND isset($_GET['titre']) AND isset($_GET['contenu']))
    {
      $reponse = $bdd->query('SELECT titre, contenu FROM news WHERE id = :id');
      while ($donnees = $reponse->fetch())
    {
    	echo $donnees['titre'];
    	echo $donnees['contenu'];
    }
    $reponse->closeCursor();
    }
    "Scientists dream about doing great things. Engineers do them.”

    La réussite après tant de travail est un sentiment à vivre

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  5. #5
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Bon moi j'ai choisis comme identificateur le 'titre' parce que j'ai pensé que c'est mieux puisque l'éditeur connait le titre et non pas l'id du titre dans la table.
    Ceci est un faut problème.
    Pour modifier une news, normalement tu dois avoir un formulaire qui édite cette news, entre autre le champ "contenu" pour permettre à l'utilisateur de rectifier le contenu en question.
    Donc un requête doit être fait pour récupérer cette new pour éditer le contenu.
    Et bien rien empêche de rajouter le champ "id" dans la requête de récupération de la news pour le mettre dans le formulaire dans un champ caché.
    Ce champ caché (non visible pour l'utilisateur) sera retourné lors de la validation du formulaire, tout comme le "contenu".
    Exemple (simple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <form ...etc...>
    <input type="hidden" name="id" value="<?php echo $donnees['id']; ?>" />
    <textarea name="contenu" rows="8" cols="45" id="contenu"><?php echo $donnees['contenu']; ?></textarea>
    <input type="submit" value="Valider" />
    </form>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $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);
    Attention aux erreurs d’inattentions.
    Faut bien comprendre qu'il doit à tout avoir une correspondance pour les noms utilisés (les :nom_parametre) entre le bindParam() et la requête.
    -> Même nom et même nombre de paramètres.
    Le paramètre :contenu correspond au :contenu dans la requête (le UPDATE), ici c'est bon.
    Mais le paramètre :titre dans le bondParam() ne se trouve pas dans la requête, c'est :id.
    Donc soit on utilise comme :id, soit :titre, cela des 2 cotés (bindParam/dans la requête.
    Vois tu le principe ?


    J'ai pensé que le mieux est de récupérer l'actualité à modifier tout d'abord, de l'afficher et puis la modifier
    Il serait mieux coté déroulement de :
    1/ de modifier la news (si c'est le cas)
    2/ de récupérer la new pour l'afficher

    Si on fait l'inverse (de récupérer en 1er) et s'il y a une modification à faire, lorsqu'on va récupérer la news son contenu ne contiendra pas la valeur du nouveau contenu car il sera effectif après son affichage, au moment du update.
    Vois tu le problème ?

    Les modifications (mise à jours, insertion suppressions) doivent être fait avant, sinon ça cause problème.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (isset($_GET['id']))
    {
      $reponse = $bdd->query('SELECT titre, contenu FROM news WHERE id = :id');
      while ($donnees = $reponse->fetch())
    {
    Une requête est faite, mais celle-ci attend un paramètre :id, mais on lui indique nulle part sa valeur, il n'y a pas de bindParam().
    C'est à peu près le même problème vu plus haut.

    Mais aussi, on effectue une boucle (while), et c'est $donnees qui contient les données de la news, mais à aucun moment $donnees est exploité.
    On fait : SI POST[titre] existe ALORS on affiche POST[titre]
    Mais il faudrait corriger par :
    SI POST[titre] existe ALORS on affiche POST[titre] SINON on affiche $donnees[titre].
    Ceci dit, faire une boucle est théoriquement inutile car vu qu'on récupère la news par son ID, un identifiant est unique, donc on obtiendra 1 news, une seule (au pire 0 news).



    A coté de ça, un autre aspect qui complique un peu les choses c'est que normalement il est bon de faire une redirection (un header) après toutes modifications (insert, update, delete).
    Mais une fois tout cela seraréglé on verra cela après, histoire d'éviter une embrouille.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  6. #6
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut
    Merci pour l'attention que vous m'accordez, j'ai essayé de bien comprendre ce que vous m'avez dis, mais seulement je n'ai pas bien saisis le problème que ça causera le fait d'afficher puis modifier.
    En fait, j'ai voulu faire le même système qu'aux forums par exemple; lorsque je veux éditer mon commentaire je clique sur éditer, le contenu s'affiche, puis je modifie et j'enregistre.

    Concernant la redirection vers la page d'actualité, j'ai laissé pour mettre après la vérification que le code de mise à jour fonctionne bien sinon j'aurai toujours une redirection vers la page d'accueil)

    J'ai modifié le code en tenant compte de vos remarques, est il mieux formé maintenant?
    NB: le code m'affiche une page blanche (y'a pas ou écrire, c'est pourquoi j'ai pensé à afficher le contenu avant)

    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
    <!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>
    <body>
    <?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());
    }
    ?>
    <b> Modification actualité </b>
    <?php
    // Modification du contenu
    if (isset($_GET['contenu'], $_GET['titre'], $_GET['id']))
    {
        $contenu = $_GET['contenu'];
        $id = $_GET['id'];
     
        $req = $bdd->prepare('UPDATE news SET contenu = :contenu WHERE id = :id');
        $req->bindParam(':contenu', $contenu, PDO::PARAM_STR);
        $req->bindParam(':id', $id, PDO::PARAM_STR);
        $req->execute();
        $req->closeCursor();
    // Affichage du contenu mise à jour	
      $reponse = $bdd->query('SELECT titre, contenu FROM news WHERE id = :id');
      while ($donnees = $reponse->fetch())
    {
    	echo $donnees['titre'];
    	echo $donnees['contenu'];
    }
    $reponse->closeCursor;
    }
    ?>
    </body>
    </html>
    "Scientists dream about doing great things. Engineers do them.”

    La réussite après tant de travail est un sentiment à vivre

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  7. #7
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Comme cela a l'air d'être un peu confus, je te mets un code (2 parties) qui j'espère te permettras de mieux voir.

    Je mets ci-dessous la 1ère partie, histoire de prendre les choses depuis le début.
    Théoriquement tu devrais avoir une page qui listerait toutes les news afin de faire le choix d'une news en particulier à modifier.
    Cette page je la nomme "liste_news.php", et c'est une liste de liens qui mènera vers essai.php.

    essai.php est la 2ème partie, c'est à mon sens la page contenant le formulaire du détail de la news à modifier, elle prévoit aussi de modifier la news après validation du formulaire.


    liste_news.php :
    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
    <?php
    // Fichier : liste_news.php
    // PARTIE TRAITEMENTS
    header('Content-Type: text/html; charset=UTF-8');
     
    try
    {
        $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
        $pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET NAMES utf8';
        $bdd = new PDO('mysql:host=localhost;dbname=projet', 'root', '', $pdo_options);
    }
    catch (PDOException $e)
    {
            die('Erreur : ' . $e->getMessage());
    }
     
    // Récupération de toutes les news
    $req = $bdd->prepare('SELECT id, titre FROM news');
    $req->execute();
    $liste_news = $req->fetchAll(PDO::FETCH_ASSOC);
     
     
    // PARTIE INTERFACE / HTML
    ?>
    <!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>Liste actualités</title>
    </head>
    <body>
    <?php
    // Affichage des liens des news
    foreach ($liste_news as $news) {
        echo '<a href="essai.php?id_news='.(int)$news['id'].'">Modifier cette news : '.$news['titre'].'</a><br />';
    }
    ?>
    </body>
    </html>
    Ici, on affiche le titre pour que l'utilisateur sache à quelle news il a affaire, mais ce titre ne sera pas renvoyé lors du clic.
    C'est uniquement l'identifiant (valeur du champ "id) qui sera renvoyé en GET.


    essai.php :
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    <?php
    // Fichier : essai.php
    // PARTIE TRAITEMENTS
    header('Content-Type: text/html; charset=UTF-8');
     
    try
    {
        $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
        $pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET NAMES utf8';
        $bdd = new PDO('mysql:host=localhost;dbname=projet', 'root', '', $pdo_options);
    }
    catch (PDOException $e)
    {
        die('Erreur : ' . $e->getMessage());
    }
     
    // Modification de l'actualité SI c'est le cas
    if (isset($_POST['valider'], $_POST['id_news'], $_POST['contenu']) && (int)$_POST['id_news'] > 0)
    {
        $id = (int)$_POST['id_news'];
        $contenu = $_POST['contenu'];
     
        $req = $bdd->prepare('UPDATE news SET contenu = :contenu WHERE id = :id');
        $req->bindParam(':contenu', $contenu, PDO::PARAM_STR);
        $req->bindParam(':id', $id, PDO::PARAM_INT);
        $req->execute();
     
        // Redirection (rafraichissement de cette page)
        header('Location: essai.php?id_news='.(int)$id);
        exit();
    }
     
    // Récupération de la news (Modifiée ou pas)
    if (isset($_GET['id_news']) && (int)$_GET['id_news'] > 0)
    {
        $id = (int)$_POST['id_news'];
        //
        $req = $bdd->prepare('SELECT id, titre, contenu FROM news WHERE id = :id');
        $req->bindParam(':id', $id, PDO::PARAM_INT);
        $req->execute();
        $actualite = $req->fetch(PDO::FETCH_ASSOC);
    }
     
    // PARTIE INTERFACE / HTML
    ?>
    <!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>
    <body>
     
    <b>(Formulaire) Modification actualité</b>
    <form action="essai.php" method="post">
        <p>
            Titre : <?php echo $actualite['titre']; ?><br />
            <label for="contenu">Contenu</label> :<br />
            <textarea name="contenu" rows="8" cols="45" id="contenu"><?php echo $actualite['contenu']; ?></textarea><br />
            <input type="hidden" name="id_news" value="<?php echo (int)$actualite['id']; ?>" />
            <input type="submit" name="valider" value="Valider" />
        </p>
    </form>
    </body>
    </html>
    Ici, les chose se passent en 2 temps (voir 3 selon le cas).
    1/ Lorsqu'on vient de liste_news.php, on édite la news.
    Donc aucune modification n'aura été faite (pas de UPDATE).
    A savoir que la news est récupérée (requête SQL) grâce au paramètre "id_news" obtenue en GET (du lien de l'étape précédente).
    Aussi, un seul et unique paramètre est obtenu -> id_news (pas de titre ni contenu, cela ne sert à d'ailleurs).

    2/ Lorsque cette page est éditée, l'utilisateur va corriger le contenu (zone de texte -> textarea), puis va valider le formulaire.
    Donc cette page sera rechargée et cette fois les données dans le formulaire seront obtenues par la méthode POST (méthode défini dans le formulaire).
    Les données obtenues sont : "id_news", "contenu" et "valide" (et non le titre).
    'id_news" ce trouve dans un champ caché (champ type -> hidden), caché car l'utilisateur ne le verra pas.

    3/ Ce 3ème temps est effectué uniquement lorsqu'une mise à jour est effectuée.
    On effectue cela pour éviter de refaire la même mise à jour si l'utilisateur à la "mauvaise" idée d'actualiser la page au niveau de son navigateur.
    Un header() permet en quelque sorte de recharger la page soit même (coté serveur).
    Du coup, cela revient à (ré)afficher la page essai.php comme si on venait de la page liste_news.php



    J'ai remarqué que l'encodage est l'UTF-8.
    Coté PDO (MySQL), il faut lui indiquer l'encodage sinon il risque fort d'avoir un problème (obtenir des caractères non conformes).
    J'ai rajouté ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET NAMES utf8';
    Mais si ceci peu provoquer une erreur, ça dépend de ta version de Php.
    Si ça provoque une erreur, faut supprimer cette ligne et faire explicitement une requête SQL (après connexion).
    Faire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bdd->exec('SET NAMES utf8');
    Toujours pour l'encodage UTF-8, il faut aussi le définir coté Php, j'ai rajouté ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Content-Type: text/html; charset=UTF-8');

    NB: le code m'affiche une page blanche
    Il doit avoir une ou plusieurs erreurs, assez grave même, mais les erreurs ne sont pas afficher, ce qui n'est pas pratique.
    Faut afficher les erreurs : directive display_errors à mettre à On dans le php.ini



    J'espère ne pas avoir fais d'erreurs (code pas du tout testé).
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  8. #8
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut
    bon voilà j'ai testé le code mais ça ne fonctionne pas correctement, j'essaye donc de modifier pourvu que je puisse corriger les erreurs.
    Si dessus les notifications affichés lors de l’exécution du code:

    Le code de liste_news.php fonctionne bien: il m'affiche la liste des titres des news précédé chacun par 'modifier cette news'
    Cependant lorsque je clique pour modifier l'une des news, voici ce que m'affiche la page essai.php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Notice: Undefined index: id_news in C:\Program Files (x86)\EasyPHP-5.3.8.0\www\projet\essai.php on line 36
    Mais il affiche bien le formulaire comme demandé: un espace <textarea> pour le contenu.

    En validant le contenu modifié:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Notice: Undefined variable: actualite in C:\Program Files (x86)\EasyPHP-5.3.8.0\www\projet\essai.php on line 57
    "Scientists dream about doing great things. Engineers do them.”

    La réussite après tant de travail est un sentiment à vivre

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  9. #9
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    j'ai un code non pas pour faire du copier/coller, mais te donner un exemple, pour par exemple te permettre de corriger ou adapter ton code.

    Aussi, j'ai bien préciser que c'était un code non testé, donc qu'il y ai de petites erreur je dirais que c'est presque normal.

    En faite le principal but était de te faire comprendre comment les choses se déroulent, etc ...


    Le message d'erreur dit qu'à la ligne 36 l'élément "id_news" n'existe pas.
    C'est normal je me suis trompé ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // Récupération de la news (Modifiée ou pas)
    if (isset($_GET['id_news']) && (int)$_GET['id_news'] > 0)
    {
        $id = (int)$_POST['id_news'];
        ... etc ...
    }
    Ce n'est pas : $id = (int)$_POST['id_news']; mais $id = (int)$_GET['id_news'];
    Tu devrais pouvoir corriger ce genre d'erreurs, c'est logique, de plus le message d'erreur est là pour aider à les détecter.

    La 2ème erreur devrait ne plus avoir lieu car elle est liée à la 1ère.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  10. #10
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut
    oui je sais bien que c'est un exemple, d'ailleurs c'est pourquoi j'ai dis que je suis entrain de travailler sur l'exemple pour pouvoir faire le code correcte mais juste j'ai voulu partagé les erreurs parce que j'ai pas su comment corriger, je suis encore débutante et entrain d'apprendre (d'ailleurs par exemple bindParam , on en a pas parlé dans le cours que je me suis basée sur) et en même temps je suis pressée c'est pourquoi y'a des détails qui m'échappent.
    Merci
    "Scientists dream about doing great things. Engineers do them.”

    La réussite après tant de travail est un sentiment à vivre

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  11. #11
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut
    J'ai pas pu corriger la 2ème erreur concernant undefined variable: actualite
    j'ai essayé d'inclure la partie interface dans la condition de récupération mais le problème est le même.
    Vraiment je ne comprends pas pourquoi l'update ne fonctionne pas.
    "Scientists dream about doing great things. Engineers do them.”

    La réussite après tant de travail est un sentiment à vivre

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  12. #12
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    La partie du "update" et l'erreur sur "actualite" sont 2 chose différentes, radicalement différentes mêmes, elles ne se déroulent pas du tout au même moment.
    Ca sous entend qu'il y aurait 2 erreurs.

    D'ailleurs, qu'est-ce qui t'amène à dire que l'update ne se ferait pas ?
    Est-ce que tu as tenté de faire quelque chose pour comprendre pourquoi ?


    Faut faire un tout petit peu de débug pour comprendre ce qui n'irait pas.
    C'est indispensable de savoir en faire un peu.
    Le débogage c'est une manière de suivre comment les chose se déroulent, comme par exemple savoir si on entre ou pas dans telle ou telle condition.
    D'afficher telle ou telle données (variable, tableau) pour constater IN VISU si elles sont conforment à ce qu'on attend.


    Modifie (provisoirement) comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // Récupération de la news (Modifiée ou pas)
    // Que contient GET ?
    var_dump($_GET);
    if (isset($_GET['id_news']) && (int)$_GET['id_news'] > 0)
    {
        $id = (int)$_GET['id_news'];
        echo 'On entre bien dans cette condition<br />';
        //
        ... etc ...
    }
    Aussi, dans cette page (le formulaire), fais un clic droit dans la page, puis -> "code source de la page" pour voir le code HTML généré, le formualire entre autre.
    Est-ce que les données dans les champs sont conforment ?


    Vois tu, on peu faire une multitude de choses très simples (des echo, print_r, var_dump) pour tenter de voir où se situe l'erreur.
    Et quand bien même on ne visualise pas où elle se trouve, cela permet de fournir pleins d'informations dans un forum comme ici pour nous mettre sur la piste.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  13. #13
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut
    j'ai conclu que l'update ne fonctionne pas, car j'ai essayé d'écrire et valider mais l'enregistrement dans la base ne s'est pas effectué, aussi j'ai compris que puisque il n'a pas identifié la variable actualité, c'est que les conditions de récupération n'ont pas été vérifiés et donc le contenu de la boucle si ne s'est pas exécuté et par suite la variable actualite sera indéfini.

    concernant le débogage, c'est la première fois que je me suis renseignée sur, je vais faire comme vous me l'avez demandé, merci.

    Je me suis renseignée sur var_dump, elle retourne les informations structurées d'une variable, y compris son type et sa valeur. Les tableaux et les objets sont explorés récursivement, avec des indentations, pour mettre en valeur leur structure, cependant, elle ne me retourne rien dans la page (ou elle n'est pas censé le faire?) !
    "Scientists dream about doing great things. Engineers do them.”

    La réussite après tant de travail est un sentiment à vivre

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  14. #14
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut
    Effectivement après avoir inséré echo '..' dans la condition, la page lors de son exécution ne m'affiche pas cette phrase, ce qui prouve que la condition n'a pas été vérifié! il n'a pas pu donc récupéré id_news???
    "Scientists dream about doing great things. Engineers do them.”

    La réussite après tant de travail est un sentiment à vivre

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  15. #15
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    concernant le débogage, c'est la première fois que je suis renseignée sur, je vais faire comme vous me l'avez demandé, merci.
    Oui, faut pas hésiter à rajouter des inforamtion pour comprendre ce qui ne va pas.
    De plus, il y a fort à parier que c'est une petite erreur.

    Pour l'erreur "actualite" (variable $actualite) apparemment cette erreur apparaitrait uniquement après avoir validé le formulaire.

    Ce qui veut dire que lorsqu'on vient de la page liste_news.php (ou l'équivalent de ton coté), le contenu du formulaire serait correcte.
    Pas d'erreur à ce moment sur $actualite.

    Et bien débug de la même manière, ou à peu près dans la partie de l'update.
    On peu faire comme ceci : (provisoirement toujours)
    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
    // Modification de l'actualité SI c'est le cas
    if (isset($_POST['valider'], $_POST['id_news'], $_POST['contenu']) && (int)$_POST['id_news'] > 0)
    {
        $id = (int)$_POST['id_news'];
        $contenu = $_POST['contenu'];
     
        echo 'On entre bien dans cette condition<br />';
        var_dump($_POST);
     
        $req = $bdd->prepare('UPDATE news SET contenu = :contenu WHERE id = :id');
        $req->bindValue(':contenu', $contenu, PDO::PARAM_STR);
        $req->bindValue(':id', $id, PDO::PARAM_INT);
        $req->execute();
     
        exit(); // Un point d'arrêt pour éviter une erreur dû au header() plus bas
     
        // ... etc ...
    }
    J'ai ici remplacé bindParam() par binValue() qui à mon sens serait mieux, plus adapté.

    Si on entre pas dans cette condition (rien ne s'affiche comme prévu) alors il doit avoir une erreur sur un nom (faute de frappe), ici ou dans le formulaire.
    Faut que les noms correspondent.

    Si on entre quand même dans la condition, il y a peut être une erreur sur une des valeurs.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  16. #16
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut
    Pour l'erreur "actualite" (variable $actualite) apparemment cette erreur apparaitrait uniquement après avoir validé le formulaire.
    oui, uniquement après avoir validé.

    Si on entre pas dans cette condition (rien ne s'affiche comme prévu) alors il doit avoir une erreur sur un nom (faute de frappe), ici ou dans le formulaire.
    Faut que les noms correspondent.

    Si on entre quand même dans la condition, il y a peut être une erreur sur une des valeurs.
    Rien ne s'affiche.
    Merci pour l'aide. je vais chercher à résoudre ces problèmes
    "Scientists dream about doing great things. Engineers do them.”

    La réussite après tant de travail est un sentiment à vivre

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  17. #17
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut
    Salut
    j'ai changé le code essai.php en mettant des echo '....' et print_r($actualite)
    ainsi que j'ai remplacé le $_GET['id_news] dans la condition de modification pas $_POST parce que id_news est récupéré la bas à partir du formulaire.

    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
    57
    58
    59
    60
    <!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>
    <body>
    <?php
     
    try
    {
        $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
        $pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET NAMES utf8';
        $bdd = new PDO('mysql:host=localhost;dbname=projet', 'root', '', $pdo_options);
    }
    catch (PDOException $e)
    {
        die('Erreur : ' . $e->getMessage());
    }
     
     
    // Modification de l'actualité SI c'est le cas
    if (isset($_POST['valider'], $_POST['id_news'], $_POST['contenu']))
    {
        $id = $_POST['id_news'];
        $contenu = $_POST['contenu'];
    	echo 'je suis dans la condition de modification';
     
        $req = $bdd->prepare('UPDATE news SET contenu = :contenu WHERE id = :id');
        $req->bindParam(':contenu', $contenu, PDO::PARAM_STR);
        $req->bindParam(':id', $id, PDO::PARAM_INT);
        $req->execute();
    	exit();
    }
     
    // Récupération de la news (Modifiée ou pas)
    if (isset($_GET['id_news']))
    {
        $id = $_GET['id_news'];
    	echo 'je suis en récupération';
     
        $req = $bdd->prepare('SELECT id, titre, contenu FROM news WHERE id = :id');
        $req->bindParam(':id', $id, PDO::PARAM_INT);
        $req->execute();
        $actualite = $req->fetch(PDO::FETCH_ASSOC);
    	print_r($actualite);
    }
    ?>
        <b>(Formulaire) Modification actualité</b>
    <form action="essai.php" method="post">
        <p>
            Titre : <?php echo $actualite['titre']; ?><br />
            <label for="contenu">Contenu</label> :<br />
            <textarea name="contenu" rows="8" cols="45" id="contenu"><?php echo $actualite['contenu']; ?></textarea><br />
            <input type="hidden" name="id_news" value="<?php echo $actualite['id_news']; ?>" />
            <input type="submit" name="valider" value="Valider" />
        </p>
    </form>
    </body>
    </html>
    Avec ce code, maintenant il m'affiche au début la phrase 'je suis en récupération' et après la validation il m'affiche 'je suis dans la condition de modification' cependant la modification dans la base de donnée du contenu ne s'effectue pas encore.
    "Scientists dream about doing great things. Engineers do them.”

    La réussite après tant de travail est un sentiment à vivre

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  18. #18
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    En rajoutant le var_dump() ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo 'je suis dans la condition de modification';
    var_dump($_POST);
    Qu'est-ce que POST contient ?
    Les valeurs de "id_news" et "contenu" sont elles conforment ?
    Les noms correspondent ils aux formulaire ? Aux champs de la Bdd ?

    As tu remplacer bindParam() par bindValue() ?

    Tu n'as pas fais le tour de tout ce qui était possible de vérifier


    Ceci dit je crois avoir vu au moins un problème (voir le problème).
    Dans le formulaire et pour le champ caché (hidden), remplace : $actualite['id_news']
    par : $actualite['id']

    Est-ce que l'affichage des messages d'erreurs sont vraiment activés ? (display_errors à On)
    Si c'est activé, c'est peut être le niveau des erreurs qui n'irait pas : (error_reporting, mettre E_ALL, dans le php.ini)



    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
    try
    {
        $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
        $pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET NAMES utf8';
        $bdd = new PDO('mysql:host=localhost;dbname=projet', 'root', '', $pdo_options);
    }
    catch (PDOException $e)
    {
        die('Erreur : ' . $e->getMessage());
    }
     
     
    // Modification de l'actualité SI c'est le cas
    if (isset($_POST['valider'], $_POST['id_news'], $_POST['contenu']))
    {
        $id = $_POST['id_news'];
        $contenu = $_POST['contenu'];
    	echo 'je suis dans la condition de modification';
     
        $req = $bdd->prepare('UPDATE news SET contenu = :contenu WHERE id = :id');
        $req->bindParam(':contenu', $contenu, PDO::PARAM_STR);
        $req->bindParam(':id', $id, PDO::PARAM_INT);
        $req->execute();
    	exit();
    }
     
    // Récupération de la news (Modifiée ou pas)
    if (isset($_GET['id_news']))
    {
        $id = $_GET['id_news'];
    	echo 'je suis en récupération';
     
        $req = $bdd->prepare('SELECT id, titre, contenu FROM news WHERE id = :id');
        $req->bindParam(':id', $id, PDO::PARAM_INT);
        $req->execute();
        $actualite = $req->fetch(PDO::FETCH_ASSOC);
    	print_r($actualite);
    }
    Il ne faut pas mettre toute cette partie de code après le <doctype>, faut le mettre avant le moindre code HTML, comme je l'avais fais au départ.
    C'est une erreur de procéder ainsi, tu vas rencontrer un problème tôt ou tard (très tôt à mon avis) dû au header().
    Une erreur très courante : Warning ... header already sent
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  19. #19
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut
    bonsoir,

    Merci pour l’enrichissement de connaissance en programmation php que vous m'avez fais en m'aidant.
    Enfin la modification s'effectue dans la base, effectivement le problème est $actualite['id_news'] qui devait être remplacée par $actualite['id']

    Et pour le header j'ai eu ce warning avec cette forme de code, je corrigerai.

    Pour display_errors, ou se trouve php.ini?
    "Scientists dream about doing great things. Engineers do them.”

    La réussite après tant de travail est un sentiment à vivre

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  20. #20
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    effectivement le problème est $actualite['id_news'] qui devait être remplacée par $actualite['id']
    Bien que c'est moi qui est commis cette erreur (désolé d'ailleurs), cela reste néanmoins une petite erreur, plus de l'étourderie qu'autre chose.

    Le fait que tu ne sois pas averti de ce genre d'erreurs est un vrai problème (trop perte de temps), il te faut corriger cela (display_errors ou/et error_reporting).

    Pour display_errors, ou se trouve php.ini?
    N'oublie pas qu'il y a la doc de php en ligne, les moteurs de recherches, etc ...

    Il y a beaucoup trop de facteurs qui entrent en jeu.
    Ca dépend de ton environnement, où cela se situe (local, distant voir les 2), et pour le distant (l'hébergeur) ça dépend des possibilités qu'il offre, sans compter qu'il y a plusieurs manière de corriger cela si c'est le cas.
    Faire le tours est impossible.

    La théorie ou une pratique très courante veut qu'on développe le site en local chez soit.
    Pour exemple et de mon coté j'utilise WampServer (voir ma signature) et il permet d'ouvrir le bon php.ini (car il y en a plusieurs) directement via un menu dans la barre des taches.

    Ceci dit, de mon coté (donc à titre personnel) j'ai toujours préféré ne pas toucher au php.ini (par pour ça en tout cas) mais de les définir en Php dans un fichier inclus à l'ensemble du projet/site Web, (genre fichier config.php).
    Avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ini_set('display_errors', 'On');
    ini_set('error_reporting', E_ALL);
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. journalisation des updates, inserts sur une table
    Par philou28 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/04/2007, 16h07
  2. VBA : modification d'une entrée dans une table
    Par Thibaut_Dupont dans le forum Access
    Réponses: 6
    Dernier message: 13/07/2006, 15h24
  3. Update sql, avec une table à deux colonnes ...
    Par dcz dans le forum Langage SQL
    Réponses: 8
    Dernier message: 04/04/2006, 18h06
  4. [MySQL] Supprimer la 1ère entrée d'une table
    Par micatmidog dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 17/09/2005, 00h58
  5. [Debutant] faire un update sur tout une table
    Par Karibou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/07/2005, 14h44

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