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

PHP & Base de données Discussion :

Problème de récupération, fetch(PDO::FETCH_OBJ) en cause ?


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    telodo
    Invité(e)
    Par défaut Problème de récupération, fetch(PDO::FETCH_OBJ) en cause ?
    Bonsoir !


    Description de la situation :

    J'ai une page journal.php qui récupère les valeurs des actualités postés dans une base de données MySQL et les affiches dans un champs texte. Suite à quoi, l'utilisateur peut décider de cliquer sur le bouton modifier ou supprimer (pour modifier ou supprimer l'actualité).

    Pour ce faire j'utilise une boucle while.

    La page journal_modifier-supprimer.php récupère la valeur des champs texte ainsi que l'ID de l'actualité afin de procéder à sa modification ou à sa suppression dans la base de données.

    Problème :

    La modification ne fonctionne pas.

    Lorsque je clique sur modifier (peu importe l'actualité) sur ma page journal.php, le résultat sur ma page journal_modifier-supprimer.php affiche toujours la même valeur (id,titre,texte).



    journal.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
     
    // Connexion à la base de données
    $connexion = new PDO('mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
     
    // Préparation de la requête à l'exécution
    $req = "SELECT * FROM site_journal ORDER BY date DESC";
    $req_finale = $connexion->query($req);
     
    // Récupération et affichage du résultat de la requête
    while($lignes=$req_finale->fetch(PDO::FETCH_OBJ))
    {
    	echo '<tr><input type="hidden" name="id" value="'.$lignes->id.'">';
    	echo '<td valign="top"><input name="titre" value="'.$lignes->titre.'" size="30" maxlength="120"><br>'.$lignes->id.'</td>';
    	echo '<td><textarea name="texte" rows="5" cols="40">'.$lignes->texte.'</textarea></td>';
    	echo '<td align="center"><input type="submit" name="modsupp" value="Modifier"><input type="submit" name="modsupp" value="Supprimer"></td></tr>';
    }
     
    // Fermeture du curseur de la requête
    $req_finale->closeCursor();
    journal_modifier-supprimer.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
     
    // Variables de modification/suppression
    $modsupp = $_POST['modsupp'];
     
    // Variables
    $date = time();
    $id = $_POST['id'];
    $titre = $_POST['titre'];
    $texte = $_POST['texte'];
     
    if ($modsupp=="Modifier") {	
    	// Ajout de la news en fonction des vérification
    	if ($titre!="" AND $texte!="") {
    		// Connexion à la base de données
    		try {
      			$connexion = new PDO('mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
    		} catch (PDOException $e) {
      			echo 'Echec de la connexion : ' . $e->getMessage();
    		}
     
    		// Préparation de la requête à l'exécution
    		$req = "UPDATE site_journal SET titre='$titre',date='$date' WHERE id=$id";
    		$req_finale = $connexion->exec($req) or die($connexion->errorInfo());
     
    		// Exécution de la requête
    		//$req_finale->execute();
     
    		// Fermeture du curseur de la requête
    		$req_finale->closeCursor();
     
    		echo "Votre message a bien été modifié dans le journal !<br />
    		<a href='journal.php'>Cliquez ici pour retourner à la page précedente.</a>";
    	}
    }


    N'étant pas un développeur invétéré, je ne peux être sûr du problème. Mais j'ai tendance à penser que cela viendrait de la ligne while($lignes=$req_finale->fetch(PDO::FETCH_OBJ)).

    Qu'en pensez-vous ? Ai-je fait une erreur quelque part ?


    En vous remerciant du temps que vous m'aurez accordé à me lire et peut-être à me répondre ! :-)

  2. #2
    Membre émérite Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Par défaut
    Comment se passe la transition entre journal.php et journal_modifier-supprimer.php ??

    Je vois des éléments de formulaire ( <input type hidden ) mais je ne vois pas de <form>

  3. #3
    telodo
    Invité(e)
    Par défaut
    Oops excusez-moi !

    La transition se fait ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form method="post" name="formJournalModifierSupprimer" action="journal_modifier-supprimer.php">
    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
     
    <form method="post" name="formJournalModifierSupprimer" action="journal_modifier-supprimer.php">
    <table border="1" align="center" cellpadding="5" cellspacing="0" bordercolor="#777777">
    	<tr>
    		<td align="center">Titre</td>
    		<td align="center">Texte</td>
    		<td align="center">Action</td>
    	</tr>
    <?php
     
    // Connexion à la base de données
    $connexion = new PDO('mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
     
    // Préparation de la requête à l'exécution
    $req = "SELECT * FROM site_journal ORDER BY date DESC";
    $req_finale = $connexion->query($req);
     
    // Récupération et affichage du résultat de la requête
    while($lignes=$req_finale->fetch(PDO::FETCH_OBJ))
    {
    	echo '<tr><input type="hidden" name="id" value="'.$lignes->id.'">';
    	echo '<td valign="top"><input name="titre" value="'.$lignes->titre.'" size="30" maxlength="120"><br>'.$lignes->id.'</td>';
    	echo '<td><textarea name="texte" rows="5" cols="40">'.$lignes->texte.'</textarea></td>';
    	echo '<td align="center"><input type="submit" name="modsupp" value="Modifier"><input type="submit" name="modsupp" value="Supprimer"></td></tr>';
    }
     
    // Fermeture du curseur de la requête
    $req_finale->closeCursor();
     
    ?>
     
    	</tr>
    </table>
    </form>

  4. #4
    Membre émérite Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Par défaut
    Ok merci pour cette précision.

    Donc quand on regarde la source, on a bien pour chaque article les infos adéquats dans les champs mais le problème se situe au niveau de la soumission du formulaire.
    Ce qui se passe :
    Quand l'utilisateur appuie sur un bouton submit du formulaire, il envoie tout le formulaire ( tous les articles ) ce qui fait que les champs s'écrasent les uns après les autres ne vous laissant visiblement que le dernier ou le premier.

    Pour que cela fonctionne, il faudrait que chaque article affiché est sa propre section <form>

    Un peu comme cela mais sans être sur que cela fonctionne ( et de plus ce n'est pas très élégant) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    while($lignes=$req_finale->fetch(PDO::FETCH_OBJ))
    {
    	echo '<form method="post" name="formJournalModifierSupprimer" action="journal_modifier-supprimer.php">';
            echo '<tr><input type="hidden" name="id" value="'.$lignes->id.'">';
    	echo '<td valign="top"><input name="titre" value="'.$lignes->titre.'" size="30" maxlength="120"><br>'.$lignes->id.'</td>';
    	echo '<td><textarea name="texte" rows="5" cols="40">'.$lignes->texte.'</textarea></td>';
    	echo '<td align="center"><input type="submit" name="modsupp" value="Modifier"><input type="submit" name="modsupp" value="Supprimer"></td></tr>';
    echo '</form>';
    }
    De cette façon, uniquement les infos de l'article concerné seront transmises

    Bonne soirée

  5. #5
    telodo
    Invité(e)
    Par défaut
    Bien vue !

    Cela faisait une paire d'heure que je cherchais, me documentais.. mais finalement en vain ! J'avoue ne pas avoir pensé à cela une seule seconde.

    Je vous remercie beaucoup !

Discussions similaires

  1. [TIBSQL] Problème de récupération d'un champs
    Par TitiFr dans le forum Bases de données
    Réponses: 6
    Dernier message: 07/08/2005, 13h33
  2. [hibernate]Problème de récupération d'objet...
    Par roxx62 dans le forum Hibernate
    Réponses: 1
    Dernier message: 07/07/2005, 11h36
  3. Réponses: 8
    Dernier message: 12/05/2005, 08h16
  4. Nouveau problème de récupération de valeurs.
    Par pmboutteau dans le forum ASP
    Réponses: 4
    Dernier message: 09/03/2005, 10h48
  5. Problème de récupération de texte de formulaire
    Par bigourson dans le forum Langage
    Réponses: 4
    Dernier message: 15/09/2004, 16h27

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