Récupérer l'id d'une entrée au moment ou celle-ci est crée

Récupérer l'id d'une entrée au moment ou celle-ci est crée - PHP - Programmation

Marsh Posté le 22-06-2011 à 11:38:13    

Bonjour,
 
Dans l'intention de permettre une suppression, depuis le navigateur, d'une entrée crée par l'utilisateur, je souhaiterais savoir comment récupérer l'id.
Les choses se présenteraient alors comme suit :
 
Script pour la création de l'entrée :

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.    // Récupération des 10 derniers messages
  7.    $reponse = $bdd->query('SELECT titre, contenu FROM news_utilisateur ORDER BY ID DESC LIMIT 0, 10');
  8.    // Affichage de chaque message (toutes les données sont protégées par htmlspecialchars)
  9.    while ($donnees = $reponse->fetch())
  10.    {
  11.    echo '<p><h3>' . htmlspecialchars($donnees['titre']) . '</h3>' .  nl2br(htmlentities($donnees['contenu'])) . '</p>';
  12.    }
  13.    $reponse->closeCursor();
  14.    }
  15.    catch(Exception $e)
  16.    {
  17.    die('Erreur : '.$e->getMessage());
  18.    }
  19.   ?>


Suppression de l'entrée :

Code :
  1. <?php
  2.         function connect($sql)
  3.      {
  4.       try {
  5.        $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
  6.       } catch (Exception $exception) {
  7.        die('Une erreur est survenue lors de la connection a la base de données.</br>
  8.            ' . $exception->getMessage());
  9.       }
  10.       $res = $bdd->query($sql);
  11.       return $res;
  12.      }
  13.      $sql="DELETE FROM test . news WHERE  news . id =***";
  14.     ?>


Par avance, je vous remercie :)


Message édité par orang le 29-06-2011 à 19:06:52
Reply

Marsh Posté le 22-06-2011 à 11:38:13   

Reply

Marsh Posté le 22-06-2011 à 14:40:03    

Reply

Marsh Posté le 22-06-2011 à 17:03:49    

Merci à toi.
 
Je viens d'y passer une petit moment, sans succès.
J'ai tenté

Code :
  1. print $dbh->lastInsertId().'<br />';

et

Code :
  1. echo $bdd->lastInsertId();

à la suite de

Code :
  1. $req = $bdd->prepare('INSERT INTO news_utilisateur (titre, contenu) VALUES(?, ?)');
  2.     $req->execute(array($_POST['titre'].$_SESSION['prenom'], $_POST['contenu']."\n".' le '.date('j F Y')));


Mais aucun nombre ne s'affiche.
 
D'autre part, comment pourrais-je faire, une fois que j'aurai ce nombre, pour l'insérer dans la requête SQL de suppression ?
Edit : C'est à dire, qu'à un moment, je vais assigner la valeur de ce nombre à une variable, mais j'ai l'impression que la syntaxe :

Code :
  1. $sql="DELETE FROM test . news WHERE  news . id =" . $dernière_info;

n'est pas correcte.  
 
Merci encore.


Message édité par orang le 22-06-2011 à 17:08:07
Reply

Marsh Posté le 23-06-2011 à 15:31:05    

Si aucun nombre ne s'affiche, je suppose que c'est ta requête qui échoue.
Car ceci fonctionne chez moi :

Code :
  1. $dbh = new PDO('mysql:host=localhost;dbname=test', 'root', '');
  2. $stmt = $dbh->prepare("INSERT INTO test VALUES()" ); // test est une table qui ne contient qu'une colonne de type unsigned int, notnull, primary et auto increment
  3. $stmt->execute();
  4. $lastInsertId = $dbh->lastInsertId();
  5. echo $lastInsertId; // Affiche l'id inséré
  6. $stmt = $dbh->prepare("DELETE FROM test WHERE id = ?" );
  7. $stmt->execute(array($lastInsertId)); // Supprime l'enregistrement créé par la requête INSERT précédente


---------------
Mon Feedback !
Reply

Marsh Posté le 23-06-2011 à 21:32:50    

Merci à toi !
 
J'ai tenté en suivant ton script, cela n'a pas fonctionné.
J'ai ensuite tenté de l'adapté à l'existant :

Code :
  1. <?php
  2.   try
  3.    {
  4.    $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
  5.    // Récupération des 10 derniers messages
  6.    $reponse = $bdd->query('SELECT titre, contenu FROM news_utilisateur ORDER BY ID DESC LIMIT 0, 10');
  7.    // Affichage de chaque message (toutes les données sont protégées par htmlspecialchars)
  8.    while ($donnees = $reponse->fetch())
  9.    {
  10.    echo '<p><h3>' . htmlspecialchars($donnees['titre']) . '</h3>' .  nl2br(htmlentities($donnees['contenu'])) . '</p>';
  11.    }
  12.    $reponse->closeCursor();
  13.    }
  14.    catch(Exception $e)
  15.    {
  16.    die('Erreur : '.$e->getMessage());
  17.    }
  18.   $lastInsertId = $bdd->lastInsertId();
  19.   echo $lastInsertId; // Affiche l'id inséré
  20.    ?>


Mais ça n'a pas mieux marché.
 
J'ai ensuite tenté l'opération suppression :

Code :
  1. <?php
  2.    $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
  3.    $stmt = $bdd->prepare("INSERT INTO test VALUES()" ); // test est une table qui ne contient qu'une colonne de type unsigned int, notnull, primary et auto increment
  4.    $stmt->execute();
  5.    $lastInsertId = $bdd->lastInsertId();
  6.    echo $lastInsertId; // Affiche l'id inséré
  7.    $stmt = $bdd->prepare("DELETE FROM test WHERE id = ?" );
  8.    $stmt->execute(array($lastInsertId)); // Supprime l'enregistrement créé par la requête INSERT précédente
  9.   ?>


Sans obtenir de meilleur résultat.
 
J'avoue que je sèche complètement  :(  

Reply

Marsh Posté le 24-06-2011 à 11:05:16    

$sql="INSERT INTO `table` VALUES (...........)";
 
 $ret=mysql_query($sql);
 
 $id=mysql_insert_id();

Reply

Marsh Posté le 24-06-2011 à 12:07:01    

Merci :)
 
J'ai donc ajouté, pour l'insertion du message :

Code :
  1. <?php
  2. $req = $bdd->prepare('INSERT INTO news_utilisateur (titre, contenu) VALUES(?, ?)');
  3. $ret=mysql_query($sql);
  4. $id=mysql_insert_id();
  5. $req->execute(array($_POST['titre'].$_SESSION['prenom'], $_POST['contenu']."\n".' le '.date('j F Y')));
  6. echo $bdd->lastInsertId(); ?>


 
Mais là encore, je n'obtiens pas le résultat attendu.

Message cité 1 fois
Message édité par orang le 24-06-2011 à 12:08:18
Reply

Marsh Posté le 24-06-2011 à 13:50:26    

Et tu nous certifies qu'en base tes données sont correctement sauvegardées ?


---------------
Mon Feedback !
Reply

Marsh Posté le 26-06-2011 à 11:23:58    

Tout à fait, le titre s'affiche, le message s'affiche.
Mais le n° id non :/

Reply

Marsh Posté le 26-06-2011 à 15:28:35    

Pourquoi ne pas utiliser directement la fonction mysql ?
 
Car à mon avis le problème vient de l'utilsation de pdo (enfin, je vois que ça).
 
Donc teste avec LAST_INSERT_ID() pour voir.
 
 

Reply

Marsh Posté le 26-06-2011 à 15:28:35   

Reply

Marsh Posté le 26-06-2011 à 23:12:27    

Merci !
C'est à peu près ce que propose flo850.
Je vais regarder ça de plus près :)
 
Edit : Désolé, je n'y suis toujours pas parvenu.
J'ai essayé ceci :

Code :
  1. <?php
  2.             try
  3.                 {
  4.                 $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
  5.                 // Récupération des 10 derniers messages
  6.                 $reponse = $bdd->query('SELECT titre, contenu FROM news_utilisateur ORDER BY ID DESC LIMIT 0, 10');
  7.                 $Dernier_enreg = $bdd->query('SELECT LAST_INSERT_ID() FROM news_utilisateur ORDER BY ID DESC LIMIT 0, 10');
  8.                 // Affichage de chaque message (toutes les données sont protégées par htmlspecialchars)
  9.                 while ($donnees = $reponse->fetch())
  10.                 {
  11.                 echo '<p><h3>' . htmlspecialchars($donnees['titre']) . '</h3>' .  nl2br(htmlentities($donnees['contenu'])) . '</p>';
  12.                 echo $Dernier_enreg;
  13.                 }
  14.                 $reponse->closeCursor();
  15.                 }
  16.                 catch(Exception $e)
  17.                 {
  18.                 die('Erreur : '.$e->getMessage());
  19.                 }
  20.              ?>


Mais un message d'erreur s'affiche :

Citation :

[size=0] Catchable fatal error: Object of class PDOStatement could not be converted to string[/size]
 
 


J'ai essayé de voir sans y trouver d'indication probante.
J'ai également tenté d'insérer directement la fonction SQL en faisant comme ici, mais lorsque je fais un echo sur un  

Code :
  1. $Dernier_enreg = "SELECT LAST_INSERT_ID() FROM news_utilisateur ORDER BY ID DESC LIMIT 0, 10";

l'echo m'affiche ce texte tel quel sans interprétation.


Message édité par orang le 27-06-2011 à 09:59:56
Reply

Marsh Posté le 29-06-2011 à 11:10:49    

Je me permets un up :)

Reply

Marsh Posté le 29-06-2011 à 11:45:04    

orang a écrit :

Merci :)
 
J'ai donc ajouté, pour l'insertion du message :


Code :
  1. <?php
  2. $req = $bdd->prepare('INSERT INTO news_utilisateur (titre, contenu) VALUES(?, ?)');
  3. $ret=mysql_query($sql);
  4. $id=mysql_insert_id();
  5. $req->execute(array($_POST['titre'].$_SESSION['prenom'], $_POST['contenu']."n".' le '.date('j F Y')));
  6. echo $bdd->lastInsertId(); ?>


Mais là encore, je n'obtiens pas le résultat attendu.
 
 
Ne passe par par le $bdd
 

Code :
  1. <?php
  2. $sql = 'INSERT INTO news_utilisateur (titre, contenu) VALUES("blablala titre", "blablabla contenu";)';
  3. $ret=mysql_query($sql);
  4. $id=mysql_insert_id();
  5. echo $id; ?>


 
Ca devrais passer ...


Message édité par GordonF_69 le 29-06-2011 à 11:46:46
Reply

Marsh Posté le 29-06-2011 à 11:45:59    

Puis oubli pas le mysql_error() pour afficher les erreurs provenant de mysql.

Reply

Marsh Posté le 29-06-2011 à 18:59:57    

Merci à toi !
Par contre, désolé, je ne suis pas parvenu à réaliser l'attendu.
Pour :

Code :
  1. <?php
  2. session_start();
  3. // Connexion à la base de données
  4. try
  5. {
  6.     $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
  7.    $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);
  8.     // Insertion du message à l'aide d'une requête préparée
  9.     $sql = 'INSERT INTO news_utilisateur (titre, contenu) VALUES(?, ?)';
  10. $ret=mysql_query($sql);
  11. $id=mysql_insert_id();
  12.     // Redirection du visiteur vers la page d'actualité chercheurs
  13.     header('Location:../Pages/Actu_chercheurs.php?id=$id');
  14. mysql_error();
  15. }
  16. catch(Exception $e)
  17. {
  18.     die('Erreur : '.$e->getMessage());
  19. }
  20. ?>


Puis  

Code :
  1. <?php
  2.             try
  3.                 {
  4.                 $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
  5.                 // Récupération des 10 derniers messages
  6.                 $reponse = $bdd->query('SELECT titre, contenu FROM news_utilisateur ORDER BY ID DESC LIMIT 0, 10');
  7.                 $Dernier_enreg = $bdd->query('SELECT LAST_INSERT_ID() FROM news_utilisateur ORDER BY ID DESC LIMIT 0, 10');
  8.                 // Affichage de chaque message (toutes les données sont protégées par htmlspecialchars)
  9.                 while ($donnees = $reponse->fetch())
  10.                 {
  11.                 echo '<p><h3>' . htmlspecialchars($donnees['titre']) . '</h3>' .  nl2br(htmlentities($donnees['contenu'])) . '</p>';
  12.                 echo $_GET[$id];
  13.    }
  14.                 $reponse->closeCursor();
  15.                 }
  16.                 catch(Exception $e)
  17.                 {
  18.                 die('Erreur : '.$e->getMessage());
  19.                 }
  20.              ?>
  21.  </div>
  22. </div>
  23.  <div class="pied_de_page">
  24.   <?php include('../Elements/pied_de_page.php'); ?>


Se pose un problème de transmission de la variable $id.
Mais même en faisant cela :

Code :
  1. <?php
  2. session_start();
  3. // Connexion à la base de données
  4. try
  5. {
  6.     $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
  7.                 $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);
  8.     // Insertion du message à l'aide d'une requête préparée
  9.     $sql = 'INSERT INTO news_utilisateur (titre, contenu) VALUES(?, ?)';
  10.     $ret=mysql_query($sql);
  11.     $id=mysql_insert_id();
  12.     echo $id;
  13.     mysql_error();
  14. }
  15. catch(Exception $e)
  16. {
  17.     die('Erreur : '.$e->getMessage());
  18. }
  19. ?>


lorsque je ne redirige pas au moment de la création de 'titre' et 'contenu', un chiffre s'affiche et ce chiffre est systématiquement '0'.
 
Désolé, je sais que je commence à être lourd avec ces questions qui dépassent la question initiale, mais j'avoue être un peu perdu.

Message cité 2 fois
Message édité par orang le 29-06-2011 à 19:05:48
Reply

Marsh Posté le 29-06-2011 à 19:58:57    

orang a écrit :

lorsque je ne redirige pas au moment de la création de 'titre' et 'contenu', un chiffre s'affiche et ce chiffre est systématiquement '0'.
 
Désolé, je sais que je commence à être lourd avec ces questions qui dépassent la question initiale, mais j'avoue être un peu perdu.


 
T'es certain que ta clef primaire est en auto-increment ?
Parce là, le 0 indique le contraire.
 

Code :
  1. DESC news_utilisateur;


 
?
 

Reply

Marsh Posté le 29-06-2011 à 20:12:29    

Merci à toi.
 
Je ne suis pas parvenu à inclure un DESC.
Par contre, j'ai vérifié, tout semble bon :
http://theblackparrot.free.fr/Pages/DESC.jpg

Reply

Marsh Posté le 29-06-2011 à 21:52:01    

Je ne me rappelle plus de phpmyadmin, mais l'icone avec la clef, c'est bien pour stipuler une clef primaire ?
ça devrait pas être grisé pour l'id s'il y'en a vraiment une ?
Parce que si pas de primary key, l'auto_increment ne peut être opérationnel.
 
Bizarre ce type btree  :heink:  
 
Pour le desc, tu peux normalement l'exécuter dans phpmyadmin.

Reply

Marsh Posté le 29-06-2011 à 23:08:57    

Ouvre ton my.ini / my.cnf et vérifies que tu as ceci :
 
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_VALUE_ON_ZERO"
 
Le mode strict te permet d'afficher les erreurs MySQL avec le plus haut niveau de sévérité, et le no auto value on zero te permet d'insérer la valeur zéro (faut mettre \N à la place de l'id si tu ne veux pas préciser l'id)
 
Redémarre MySQL et dis nous quoi.
 
Exporte la structure de la table et copie-colle là nous ici.


Message édité par CyberDenix le 29-06-2011 à 23:09:46

---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 30-06-2011 à 00:01:26    

Merci !
 
@boutlatent : Tout à fait, du coup, deux ne sont pas grisées.
Lorsque je tente d'en ajouter une en plus de celle de l'id, j'obtiens le message suivant :

Citation :

Incorrect table definition; there can be only one auto column and it must be defined as a key
 


Voici pour la structure de la table :

Code :
  1. -- phpMyAdmin SQL Dump
  2. -- version 3.3.9
  3. -- http://www.phpmyadmin.net
  4. --
  5. -- Serveur: localhost
  6. -- Généré le : Mer 29 Juin 2011 à 21:48
  7. -- Version du serveur: 5.1.53
  8. -- Version de PHP: 5.3.4
  9. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
  10. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
  11. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
  12. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
  13. /*!40101 SET NAMES utf8 */;
  14. --
  15. -- Base de données: `test`
  16. --
  17. -- --------------------------------------------------------
  18. --
  19. -- Structure de la table `news_utilisateur`
  20. --
  21. CREATE TABLE IF NOT EXISTS `news_utilisateur` (
  22.   `id` int(11) NOT NULL AUTO_INCREMENT,
  23.   `titre` varchar(25) NOT NULL,
  24.   `contenu` text NOT NULL,
  25.   PRIMARY KEY (`id`)
  26. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=77 ;
  27. --
  28. -- Contenu de la table `news_utilisateur`
  29. --


J'ai regardé un peu au sujet du sql mode que tu proposes, je n'ai pas réussi à l'implanter. Le fichier my.ini contient ceci :

Citation :

#Path to the language  
language=G:/wamp/bin/mysql/mysql5.1.40/share/french
# Example MySQL config file for medium systems.
#
# This is for a system with little memory (32M - 64M) where MySQL plays
# an important part, or systems up to 128M where MySQL is used together with
# other programs (such as a web server)
#
# You can copy this file to
# /etc/my.cnf to set global options,
# mysql-data-dir/my.cnf to set server-specific options (in this
# installation this directory is C:mysqldata) or
# ~/.my.cnf to set user-specific options.
#
# In this file, you can use all long options that a program supports.
# If you want to know which options a program supports, run the program
# with the "--help" option.
 
# The following options will be passed to all MySQL clients
[client]
#password    = your_password
port        = 3306
socket        = /tmp/mysql.sock
 
# Here follows entries for some specific programs
 
# The MySQL server
[wampmysqld]
port        = 3306
socket        = /tmp/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
basedir=c:/wamp/bin/mysql/mysql5.1.53
log-error=c:/wamp/logs/mysql.log
datadir=c:/wamp/bin/mysql/mysql5.1.53/data
 
# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (via the "enable-named-pipe" option) will render mysqld useless!
#  
#skip-networking
 
# Disable Federated by default
skip-federated
 
# Replication Master Server (default)
# binary logging is required for replication
log-bin=mysql-bin
 
# binary logging format - mixed recommended
binlog_format=mixed
 
# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted
server-id    = 1
 
# Replication Slave (comment out master section to use this)
#
# To configure this host as a replication slave, you can choose between
# two methods :
#
# 1) Use the CHANGE MASTER TO command (fully described in our manual) -
#    the syntax is:
#
#    CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>,
#    MASTER_USER=<user>, MASTER_PASSWORD=<password> ;
#
#    where you replace <host>, <user>, <password> by quoted strings and
#    <port> by the master's port number (3306 by default).
#
#    Example:
#
#    CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306,
#    MASTER_USER='joe', MASTER_PASSWORD='secret';
#
# OR
#
# 2) Set the variables below. However, in case you choose this method, then
#    start replication for the first time (even unsuccessfully, for example
#    if you mistyped the password in master-password and the slave fails to
#    connect), the slave will create a master.info file, and any later
#    change in this file to the variables' values below will be ignored and
#    overridden by the content of the master.info file, unless you shutdown
#    the slave server, delete master.info and restart the slaver server.
#    For that reason, you may want to leave the lines below untouched
#    (commented) and instead use CHANGE MASTER TO (see above)
#
# required unique id between 2 and 2^32 - 1
# (and different from the master)
# defaults to 2 if master-host is set
# but will not function as a slave if omitted
#server-id       = 2
#
# The replication master for this slave - required
#master-host     =   <hostname>
#
# The username the slave will use for authentication when connecting
# to the master - required
#master-user     =   <username>
#
# The password the slave will authenticate with when connecting to
# the master - required
#master-password =   <password>
#
# The port the master is listening on.
# optional - defaults to 3306
#master-port     =  <port>
#
# binary logging - not required for slaves, but recommended
#log-bin=mysql-bin
 
# Point the following paths to different dedicated disks
#tmpdir        = /tmp/        
#log-update     = /path-to-dedicated-directory/hostname
 
# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = C:mysqldata/
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = C:mysqldata/
#innodb_log_arch_dir = C:mysqldata/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#innodb_buffer_pool_size = 16M
#innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 5M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50
 
[mysqldump]
quick
max_allowed_packet = 16M
 
[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates
 
[isamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
 
[myisamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
 
[mysqlhotcopy]
interactive-timeout
 
[mysqld]
port=3306
 


Message édité par orang le 30-06-2011 à 00:02:19
Reply

Marsh Posté le 01-07-2011 à 18:50:02    

Bah en fait, je crois que ça vient bien de ton script php, auquel j'avais mal  
 
Car déjà ce genre de requête, et ta façon d'utiliser le mysql_error() est plutôt saugrenue  :D  
 

orang a écrit :

.....
 
    $sql = 'INSERT INTO news_utilisateur (titre, contenu) VALUES(?, ?)';
 $ret=mysql_query($sql);
 $id=mysql_insert_id();
    // Redirection du visiteur vers la page d'actualité chercheurs
    header('Location:../Pages/Actu_chercheurs.php?id=$id');
 mysql_error();
}
catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}
?>
[/cpp]
Puis  
[cpp]<?php
            try
                {
                $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
                // Récupération des 10 derniers messages
                $reponse = $bdd->query('SELECT titre, contenu FROM news_utilisateur ORDER BY ID DESC LIMIT 0, 10');
                $Dernier_enreg = $bdd->query('SELECT LAST_INSERT_ID() FROM news_utilisateur ORDER BY ID DESC LIMIT 0, 10');
                // Affichage de chaque message (toutes les données sont protégées par htmlspecialchars)
                while ($donnees = $reponse->fetch())
                {
                echo '<p><h3>' . htmlspecialchars($donnees['titre']) . '</h3>' .  nl2br(htmlentities($donnees['contenu'])) . '</p>';
                echo $_GET[$id];
    }
                $reponse->closeCursor();
                }
                catch(Exception $e)
                {
                die('Erreur : '.$e->getMessage());
                }
             ?>
  </div>
 </div>
  <div class="pied_de_page">
   <?php include('../Elements/pied_de_page.php'); ?>


 
Je suppose que les ? ne sont pas insérer tels quels, et que c'était juste pour abréger ton code ?
 
Claque ton mysql_error() derrière ton query, mysql_query(blabla) or exit (mysql_error());
Et bien évidemment la fonction errorInfo de pdo, puisque tu utilises pdo.
 
 
 

Reply

Marsh Posté le 02-07-2011 à 19:14:06    

Bonsoir,
 
Tu parles du

Code :
  1. $sql = 'INSERT INTO news_utilisateur (titre, contenu) VALUES(?, ?)';


 ?
car dans ce cas, je l'ai noté ainsi, ne sachant pas noter autre chose.
 
Sinon, j'ai évité de rentrer un  

Code :
  1. /* Provoque une erreur -- mauvaise syntaxe SQL */
  2.                 $stmt = $dbh->prepare('mauvaise syntaxe sql');
  3.                 if (!$stmt) {
  4.                    echo "nPDO::errorInfo():n";
  5.                    print_r($dbh->errorInfo());
  6.                 }


car ça me génère des erreurs.
Par contre,  

Code :
  1. <?php
  2. session_start();
  3. // Connexion à la base de données
  4. try
  5. {
  6.     $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
  7.                 $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);
  8.     // Insertion du message à l'aide d'une requête préparée
  9.     $sql = 'INSERT INTO news_utilisateur (titre, contenu) VALUES(?, ?)';
  10.     $ret=mysql_query($sql);
  11.     mysql_error();
  12.     $id=mysql_insert_id();
  13.     // Redirection du visiteur vers la page d'actualité chercheurs
  14.     echo $id;
  15.    
  16. }
  17. catch(Exception $e)
  18. {
  19.     die('Erreur : '.$e->getMessage());
  20. }
  21. ?>


Continue à me renvoyer un beau 0.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed