Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1328 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Afficher/supprimer le contenu d'une bdd en fonction d'un id précis

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Afficher/supprimer le contenu d'une bdd en fonction d'un id précis

n°2063168
orang
Posté le 14-03-2011 à 11:03:19  profilanswer
 

Bonjour,
 
Je cherche supprimer la dernière entrée d'une base de donnée au moyen d'un bouton de formulaire.
Pour tenter d'atteindre l'objectif, pourquoi ne pas tenter de passer par une liste déroulante :

Code :
  1. <div class="colonne-1">
  2.   <?php
  3.    echo 'Sélectionnez l\'actualité que vous souhaitez afficher : ';
  4.    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
  5.    $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);
  6.    $reponse = $bdd->query('SELECT titre, contenu, id FROM news_utilisateur ORDER BY ID DESC LIMIT 0, 10');
  7.    echo '<form method="post" action="../Pages/esphp.php">';
  8.    echo '<SELECT NAME="Actu">';
  9.    echo '<OPTION>Selection</OPTION>';
  10.    while ($donnees = $reponse->fetch())
  11.    {
  12.    echo '<OPTION value=' . $donnees['id'] . '>' . $donnees['titre'];
  13.    echo '</OPTION>';
  14.    }
  15.    echo '</SELECT>';
  16.    echo '<br /> <input type="submit" name="submit" value="selection">';
  17.    echo '</form>';
  18.   ?>
  19.  </div>
  20.  <div class="colonne-2">
  21.   <?php
  22.    if (isset($_POST['Actu']) AND !empty($_POST['Actu']))
  23.    {
  24.     $reponse = $bdd->query("SELECT titre, contenu FROM news_utilisateur WHERE id ="$donnees['id'];
  25.     echo 'test';
  26.    }
  27.   unset($_POST['Actu']);
  28.   ?>
  29.  </div>


 
 
Pour le moment, ce formulaire se contente d'afficher les titres.
 Le problème est que je ne parviens pas à récupérer la valeur du SELECT.
 Celle-ci me permettrait d'afficher sous le menu déroulant, la news correspondant à la valeur prise par l'OPTION.
 Une idée pour y parvenir (avec ou sans JS) ?


Message édité par orang le 15-03-2011 à 18:38:48
mood
Publicité
Posté le 14-03-2011 à 11:03:19  profilanswer
 

n°2063184
MEI
|DarthPingoo(tm)|
Posté le 14-03-2011 à 11:20:17  profilanswer
 

Je crois qu'il manque la balise fermante du form.
Et name="actu" pourrai mieux fonctionner.


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°2063193
orang
Posté le 14-03-2011 à 11:34:01  profilanswer
 

Merci :)
Mais cela ne me permets pas de récupérer la valeur du SELECT.
Une fois que je pourrais la récupérer, le site pourra afficher les infos.
Ce ne sera qu'en suite que j'inclurai un  

Code :
  1. $sql="delete from news where"


Sachant, que je ne saurai pas quoi insérer pour le where.

n°2063195
MEI
|DarthPingoo(tm)|
Posté le 14-03-2011 à 11:34:57  profilanswer
 

Bah quand tu fait submit dans le PHP t'as $_POST["actu"] quoi... :spamafote:


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°2063196
orang
Posté le 14-03-2011 à 11:37:43  profilanswer
 

Merci, et ensuite, comment exploiter ce $_POST["actu"] pour par exemple, afficher la news qui correspond à l'actu sélectionnée via le menu déroulant ?

n°2063784
orang
Posté le 15-03-2011 à 17:48:07  profilanswer
 

Je me permets un petit up, comment feriez-vous pour afficher/supprimer le contenu d'une bdd en fonction d'un id précis ?
J'imagine que ce doit être quelque chose comme ça :

Code :
  1. $bdd->query("SELECT titre, contenu FROM news_utilisateur WHERE id ="$donnees['id'];


Ou

Code :
  1. $bdd->query("DELET titre, contenu,id FROM news_utilisateur WHERE id ="$donnees['id'];


Mais je ne parviens pas à trouver la syntaxe exacte.

n°2063955
AzOo
Posté le 16-03-2011 à 10:01:26  profilanswer
 

Pour l'affichage :
 
SELECT titre, contenu FROM news_utilisateur WHERE id =".$donnees['id']."
 
Suppression :
 
DELETE FROM news_utilisateur WHERE id =".$donnees['id']."
 
(http://sql.1keydata.com/fr/sql-delete.php)

Message cité 1 fois
Message édité par AzOo le 16-03-2011 à 10:01:51

---------------
*** [Feed-Back] AzOo ***
n°2063975
orang
Posté le 16-03-2011 à 10:40:59  profilanswer
 

AzOo a écrit :

Pour l'affichage :
 
SELECT titre, contenu FROM news_utilisateur WHERE id =".$donnees['id']."
 
Suppression :
 
DELETE FROM news_utilisateur WHERE id =".$donnees['id']."
 
(http://sql.1keydata.com/fr/sql-delete.php)


 
Merci à toi, suite à ton message, j'ai essayé les deux :  

Code :
  1. $reponse = $bdd->query(DELETE FROM news_utilisateur WHERE id =".$donnees['id']." );


Code :
  1. $reponse = $bdd->query(DELETE FROM news_utilisateur WHERE id =".$donnees['id']." );


 
Mais dans les deux cas :  
 Parse error: syntax error, unexpected T_STRING in C:\wamp\www\Pages\esphp.php on line 37
L’intégralité du code :

Code :
  1. <!DOCTYPE html>
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta charset="ISO-8859-1">
  5. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
  6. <title>Mise En Page</title>
  7. <link href="../CSS/ess-css.css" rel="stylesheet" type="text/css" />
  8. </head>
  9. <body>
  10. <div class="entete">
  11.  <a href="../refonte.html">Bonjour</a>
  12. </div>
  13. <div class="cadre">
  14.  <div class="colonne-1">
  15.   <?php
  16.    echo 'Sélectionnez l\'actualité que vous souhaitez afficher : ';
  17.    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
  18.    $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);
  19.    $reponse = $bdd->query('SELECT titre, contenu, id FROM news_utilisateur ORDER BY ID DESC LIMIT 0, 10');
  20.    echo '<form method="post" action="../Pages/esphp.php">';
  21.    echo '<SELECT NAME="Actu">';
  22.    echo '<OPTION>Selection</OPTION>';
  23.    while ($donnees = $reponse->fetch())
  24.    {
  25.    echo '<OPTION value=' . $donnees['id'] . '>' . $donnees['titre'];
  26.    echo '</OPTION>';
  27.    }
  28.    echo '</SELECT>';
  29.    echo '<br /> <input type="submit" name="submit" value="selection">';
  30.    echo '</form>';
  31.   ?>
  32.  </div>
  33.  <div class="colonne-2">
  34.   <?php
  35.    if (isset($_POST['Actu']) AND !empty($_POST['Actu']))
  36.    {
  37.     $reponse = $bdd->query(DELETE FROM news_utilisateur WHERE id =".$donnees['id']." );
  38.     echo 'test';
  39.    }
  40.   unset($_POST['Actu']);
  41.   ?>
  42.  </div>
  43. </div>
  44.  <div class="enbas">
  45. au revoir
  46. </div>
  47. </body>
  48. </html>



Message édité par orang le 16-03-2011 à 10:41:51
n°2063978
pop-pan
yay!
Posté le 16-03-2011 à 10:45:10  profilanswer
 

la query doit etre une string.
 
$reponse = $bdd->query("DELETE FROM news_utilisateur WHERE id =".$donnees['id']." " );


---------------
Plop !
n°2063983
orang
Posté le 16-03-2011 à 10:52:10  profilanswer
 

Merci :)
J'ai testé ceci :  

Code :
  1. $reponse = $bdd->query("SELECT titre, contenu FROM news_utilisateur WHERE id =".$donnees['id']." " );


 
ou recopié ce que tu indiques :

Code :
  1. $reponse = $bdd->query("DELETE FROM news_utilisateur WHERE id =".$donnees['id']." " );


 
Dans les deux cas, le serveur renvoie :
( ! ) Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1' in C:\wamp\www\Pages\esphp.php on line 37
( ! ) PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 in C:\wamp\www\Pages\esphp.php on line 37

mood
Publicité
Posté le 16-03-2011 à 10:52:10  profilanswer
 

n°2065007
orang
Posté le 21-03-2011 à 10:46:30  profilanswer
 

Je me permets un petit up :)

n°2065040
Paulp
~, sweet ~
Posté le 21-03-2011 à 12:08:01  profilanswer
 

- Pourquoi rajouter un espace à la fin de tes requêtes SQL ?
- Tu devrais utiliser les requêtes préparées avec PDO.
- Essaye de faire un echo "SELECT ... " en passant en paramètre tout ce que tu passes en paramètre au $bdd->query(), et copie-colle le résultat dans PHPMyAdmin (ou autre interface d'administration)
- Essaye aussi de mettre un try/catch autour de la requête et d'afficher le détail de l'exception avec un print_r

n°2065042
Paulp
~, sweet ~
Posté le 21-03-2011 à 12:09:41  profilanswer
 

En fait, ligne 37, tu n'as plus de $donnees, donc ta requête est :

Code :
  1. DELETE FROM news_utilisateur WHERE id =


Est-ce qu'il ne faudrait pas mettre plutôt

 
Code :
  1. $reponse = $bdd->query("DELETE FROM news_utilisateur WHERE id =" . $_POST['Actu'] );


edit : ce que j'ai dit sur les requêtes préparées reste valable !


Message édité par Paulp le 21-03-2011 à 12:10:46
n°2065053
orang
Posté le 21-03-2011 à 13:03:02  profilanswer
 

Merci pour ces nouveaux conseils.
J'ai essayé de me renseigner à propos du PDO::prepare sans trop avoir compris.
Par contre, j'ai entouré d'un try/catch, mais n'ayant plus d'erreur, celui-ci n'est plus nécessaire :

Code :
  1. $reponse = $bdd->query("DELETE FROM news_utilisateur WHERE id =" . $_POST['Actu'] );


fonctionne parfaitement :)
 
Par contre, je ne sais pas comment afficher l'info en question, j'ai essayé ceci :  

Code :
  1. <?php
  2.    try
  3.    {
  4.     $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
  5.     $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);
  6.    if (isset($_POST['Actu']) AND !empty($_POST['Actu']))
  7.    {
  8.     $bdd2 = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);
  9.     $dotat = $bdd2->query("SELECT titre, contenu FROM news_utilisateur WHERE id =" . $_POST['Actu']);
  10.     $donnees2 = $dotat;
  11.     echo htmlspecialchars($donnees2['titre']) . nl2br(htmlentities($donnes2['contenu']));
  12.    }
  13.    }
  14.    catch(Exception $e)
  15.    {
  16.     die('Erreur : '.$e->getMessage());
  17.    }
  18.   ?>


Mais il m'affiche ceci : Cannot use object of type PDOStatement as array in C:\wamp\www\Pages\esphp.php on line 43


Message édité par orang le 21-03-2011 à 13:05:05
n°2065057
Paulp
~, sweet ~
Posté le 21-03-2011 à 13:16:09  profilanswer
 

quand tu copies ton code, indique quelle ligne correspond au numéro de l'erreur (43 en l’occurrence) ...
 
l'erreur dit que ligne 43 (probablement la ligne 11 ci-dessus), tu essayes d'utiliser un objet PDOStatement comme un tableau.
Il s'agit de $donnees2.
Si tu regardes la ligne d'au dessus, tu as mis $donnees2 = $dotat.
$dotat est effectivement un object PDOStatement.
Comment le convertir en tableau : tu vas sur la doc de PDOStatement
http://php.net/manual/fr/class.pdostatement.php
et tu cherches ...
D'ailleurs, tu l'as déjà fait dans ton code précédent.

n°2065066
orang
Posté le 21-03-2011 à 13:42:19  profilanswer
 

Merci !
Je pensais justement pouvoir échapper à cette phase, et n'avais pas vu le lien entre celle-ci et le fait qu'il s'agisse d'un object PDOStatement.
Le truc est que désormais, le serveur ne trouve pas la variable donnees2 :

Code :
  1. <?php
  2.    try
  3.    {
  4.     $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
  5.     $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);
  6.    if (isset($_POST['Actu']) AND !empty($_POST['Actu']))
  7.    {
  8.     $bdd2 = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);
  9.     $dotat = $bdd2->query("SELECT titre, contenu FROM news_utilisateur WHERE id =" . $_POST['Actu']);
  10.     while ($donnees2 = $dotat->fetch())
  11.     {
  12.     echo htmlspecialchars($donnees2['titre']) . nl2br(htmlentities($donnes2['contenu']));
  13.     }
  14.    }
  15.    }
  16.    catch(Exception $e)
  17.    {
  18.     die('Erreur : '.$e->getMessage());
  19.    }
  20.   ?>


n°2065069
Paulp
~, sweet ~
Posté le 21-03-2011 à 13:51:19  profilanswer
 

- Quel est le résultat ?
- Pourquoi te connectes-tu deux fois à la base de données ?
- le !empty() rend inutile le isset()
- pour utiliser les requêtes préparées, au lieu de :

Code :
  1. $dotat = $bdd2->query("SELECT titre, contenu FROM news_utilisateur WHERE id =" . $_POST['Actu']);


utilise :

Code :
  1. $statement = $bdd2->prepare("SELECT titre, contenu FROM news_utilisateur WHERE id=:id" );
  2. $dotat = $statement->execute(array('id'=>$_POST['Actu']));


Message édité par Paulp le 21-03-2011 à 13:51:30
n°2065089
orang
Posté le 21-03-2011 à 14:24:53  profilanswer
 

Merci encore :)
Suite à tes conseils, j'ai nettoyé le code et été me documenter :

Code :
  1. <?php
  2.    try
  3.    {
  4.    if (!empty($_POST['Actu']))
  5.    {
  6.     $statement = $bdd->prepare("SELECT titre, contenu FROM news_utilisateur WHERE id=:id" ); // Prépare une requête
  7.     $dotat = $statement->execute(array('id'=>$_POST['Actu'])); //Exécute une requête préparée
  8.     echo htmlspecialchars($donnees['titre']);
  9.     echo nl2br(htmlentities($donnees['contenu']));
  10.    }
  11.    }
  12.    catch(Exception $e)
  13.    {
  14.     die('Erreur : '.$e->getMessage());
  15.    }
  16.   ?>


À terme, je placerai la préparation en haut de page, à la place de ce que j'avais fait.


Message édité par orang le 21-03-2011 à 14:25:26

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Afficher/supprimer le contenu d'une bdd en fonction d'un id précis

 

Sujets relatifs
formulaire de contact : erreur ?Modifier formulaire / php débutant
comment sauter la ligne à chaque nouvelle entree de text box[Résolu] Formulaire dynamique lié à une base de donnée
[BATCH] Supprimer une clé du registre bien définit ? [RESOLU]Eviter la répétition des votes sur un formulaire Google Document
[QST] création d'un script/formulaire[resolu] Probleme de variable "tout" sur un formulaire de recherche
Bouton supprimer / DébutantSupprimer des lignes
Plus de sujets relatifs à : Afficher/supprimer le contenu d'une bdd en fonction d'un id précis


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR