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

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2083848
orang
Posté le 22-06-2011 à 11:38:13  profilanswer
 

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
mood
Publicité
Posté le 22-06-2011 à 11:38:13  profilanswer
 

n°2083907
flo850
moi je
Posté le 22-06-2011 à 14:40:03  profilanswer
 
n°2083934
orang
Posté le 22-06-2011 à 17:03:49  profilanswer
 

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
n°2084267
Tirkyth
Posté le 23-06-2011 à 15:31:05  profilanswer
 

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 !
n°2084377
orang
Posté le 23-06-2011 à 21:32:50  profilanswer
 

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  :(  

n°2084494
GordonF_69
Posté le 24-06-2011 à 11:05:16  profilanswer
 

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

n°2084534
orang
Posté le 24-06-2011 à 12:07:01  profilanswer
 

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
n°2084566
Tirkyth
Posté le 24-06-2011 à 13:50:26  profilanswer
 

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


---------------
Mon Feedback !
n°2084958
orang
Posté le 26-06-2011 à 11:23:58  profilanswer
 

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

n°2084974
boutlatent
Posté le 26-06-2011 à 15:28:35  profilanswer
 

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.
 
 

mood
Publicité
Posté le 26-06-2011 à 15:28:35  profilanswer
 

n°2085020
orang
Posté le 26-06-2011 à 23:12:27  profilanswer
 

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
n°2085748
orang
Posté le 29-06-2011 à 11:10:49  profilanswer
 

Je me permets un up :)

n°2085767
GordonF_69
Posté le 29-06-2011 à 11:45:04  profilanswer
 

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
n°2085768
GordonF_69
Posté le 29-06-2011 à 11:45:59  profilanswer
 

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

n°2085947
orang
Posté le 29-06-2011 à 18:59:57  profilanswer
 

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
n°2085951
boutlatent
Posté le 29-06-2011 à 19:58:57  profilanswer
 

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;


 
?
 

n°2085953
orang
Posté le 29-06-2011 à 20:12:29  profilanswer
 

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

n°2085964
boutlatent
Posté le 29-06-2011 à 21:52:01  profilanswer
 

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.

n°2085968
CyberDenix
Posté le 29-06-2011 à 23:08:57  profilanswer
 

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)
n°2085985
orang
Posté le 30-06-2011 à 00:01:26  profilanswer
 

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
n°2086539
boutlatent
Posté le 01-07-2011 à 18:50:02  profilanswer
 

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.
 
 
 

n°2086690
orang
Posté le 02-07-2011 à 19:14:06  profilanswer
 

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.

mood
Publicité
Posté le   profilanswer
 


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

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

 

Sujets relatifs
Calcul d'une valeur dans un tableau double entréecomment Crée une liste deroulante avec php
Supprimer une seule entrée seulement dans une BDDrecuperer contenu du log mysql-bin.xxxx
API Amazon, comment récuperer une inforécupérer le nom d'une image dans un dossier
[Matlab] Recuperer les valeurs d'un quiverrécupérer une variable dans une base de donnée pour la mettre dans un
Parser XML en Java et y récupérer des informationshelp!!! comment recuperer un text sur un site qui a deconecté ...
Plus de sujets relatifs à : Récupérer l'id d'une entrée au moment ou celle-ci est crée


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