[MySql] récupération d'un champs "id" auto-incréme

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [MySql] récupération d'un champs "id" auto-incréme

par x@v » 15 juin 2007, 15:15

tu paierais ?
id int(11)
tu me dois un verre :D
en faite j'ai dus refaire mes tables avec un auto-increment à 0, et miracle tout fonctionne, LOL.
Je tiens à vous remerciez de m'avoir accompagné sur ce problème, y a pas à dire sa fait toujours du bien de trouver une solution.

par Yosh » 15 juin 2007, 15:13

Je parierai que le type de ce champ est un smallint, qui est limité à 127 par son encodage.
Toute insertion d'un nombre plus grand que 127, fera que ce champ contiendra le plus grand nombre qu'il pourra contenir: 127
Change le type de champ, par un type qui admet des nombres plus grand un int, par exemple.
:pouce:

par iclo » 15 juin 2007, 14:55

Je parierai que le type de ce champ est un smallint, qui est limité à 127 par son encodage.
Toute insertion d'un nombre plus grand que 127, fera que ce champ contiendra le plus grand nombre qu'il pourra contenir: 127
Change le type de champ, par un type qui admet des nombres plus grand un int, par exemple.

par x@v » 15 juin 2007, 14:51

je reconnais qu'il faut pour débugger déployer une méthode que je n'est pas pour mysql. Mais je m'y attache.
$time=time();
    $query = "insert into article values
            ('',  'ecrivain', 'page', 'description', 'titre', 'article_text', 'image', 20, 10, 10)";
	$result=mysql_query($query, $lien) or die (mysql_error());
        $id_article = mysql_insert_id();
        echo $dernier_id;


  $date = date('Y-m-d').' '.$time;
  $requette_pages = "insert into pages 
                (page, date, id_article)
              values 
                ('zzzzz', '$date', $id_article)";
   mysql_query($requette_pages, $lien) or die (mysql_error());
le problème de ces deux requettes qui fonctionnent, elles insèrent bien les données mais pas comme il faut. La première requette fonctionne en insèrant :
id == 185
ecrivain ==ecrivain
page ==page
description ==description
titre ==titre
article_text ==article_text
image ==image
creer ==20
modifier ==10
publier ==10
la deuxième insère

Code : Tout sélectionner

page ==zzzzz description rubrique date == 2007-06-15 1181911335 id_article == 127
Donc comme ont peux le voir tout se que je demande s'insère à l'exceprion de l'id_article, qui me rentre invaraiblement à chaque insertion le nom 127 au lieu et en plca le dernier id

par Yosh » 15 juin 2007, 12:08

Je pensais pourtant avoir été clair...mais apparement non.
Qu'est-ce que tu veux dire par là ?
Et bien je pensais que les remarques que je lui ai fait lui servirai, mais ça n'a pas été le cas :?

par ouckileou » 15 juin 2007, 11:57

Je pensais pourtant avoir été clair...mais apparement non.
Qu'est-ce que tu veux dire par là ?

De toute façon la remarque ne s'applique pas à toi, mais à l'auteur du post.

Je suis désolé, mais c'est une perte de temps que de chercher à l'aveuglette quel pourrait être le problème, alors qu'un message d'erreur nous le dirait (ou son absence nous orienterait vers autre chose).

Et comme le dit zeus, c'est bien d'apprendre les trucs pour débugger soit-même, c'est un gain de temps pour tous. x@v ne va pas revenir poster dès qu'un truc ne marche pas, s'il ne sait pas débugger lui-même les petites erreurs de syntaxe, il s'en sortira pas.

Et enfin, quand on vient sur un forum, la moindre des choses est quand même de suivre les conseils donnés. Si on poste, c'est qu'on a un moment d'impuissance, et qu'on s'en remet à quelqu'un d'autre, donc on l'écoute. Et c'est pas du mépris, ça arrive à tout le monde, moi le premier.

par zeus » 15 juin 2007, 09:40

Au cas où toi, tu n'es pas compris, sur PHPFrance, on préfère expliquer les bonnes manières de coder plutôt que de donner directement une réponse qui ne sera pas comprise.

par Yosh » 15 juin 2007, 09:10

T'es toujours pas décidé à afficher les messages d'erreur MySQL ??

Là t'es dans une pièce noire, et tu cherches la sortie. Je t'ai filé une torche pour éclairer les 3/4 de la pièce et vérifier si elle y est ou non, et toi tu préfères continuer à y aller à taton sur chaque cm² des murs...

Et mysql_insert_id() marche très bien. Sauf que si t'insères rien, elle te renvoie rien, ça me paraît assez logique.

:roll:
Je pensais pourtant avoir été clair...mais apparement non.

par ouckileou » 15 juin 2007, 01:33

T'es toujours pas décidé à afficher les messages d'erreur MySQL ??

Là t'es dans une pièce noire, et tu cherches la sortie. Je t'ai filé une torche pour éclairer les 3/4 de la pièce et vérifier si elle y est ou non, et toi tu préfères continuer à y aller à taton sur chaque cm² des murs...

Et mysql_insert_id() marche très bien. Sauf que si t'insères rien, elle te renvoie rien, ça me paraît assez logique.

:roll:

par x@v » 14 juin 2007, 17:59

j'ai fais ça, mais sa ne passe pas, il m'enregistre deux fois le même enregistrement avec la première requete ?
 $query = "insert into article values
            ('',  '$ecrivain', '$page', '$description', '$titre', '$article_text', '$image', $time, '', $time)";
	$result=mysql_query($query, $lien);
      $dernier_id = mysql_insert_id();
echo $dernier_id;
    if (!$result)
       return false;
edit ->
C'est moi qui à fait la bétise j'ai mis deux fois:
$result=mysql_query($query, $lien);
que je suis bête.
Par contre ma deuxième requete plante :
    $requette_pages = "insert into pages values
                ('rrrrr', 'gggg', 'gggg', '$date', $dernier_id)";
$dernier_id c'est bien un type entier qui est renvoyé ?

Sa ne fonctionne pas du tout mysql_insert_id();

par Yosh » 14 juin 2007, 17:32

Ok donc une fois que tu a fait ton

Code : Tout sélectionner

$query = "insert into article values ('', '$ecrivain', '$page', '$description', '$titre', '$article_text', '$image', $time, '', $time)"; $result=mysql_query($query, $lien); if (!$result) return false;
Tu n'a plus qu'a utiliser la fonction mysql_insert_id, ce qui va te renvoyer l'id de ta dernière requete d'insertion. En bref pas besoin de faire une requete SELECT pour faire ce que tu veux.

Ensuite tu continue ton traitement.

par x@v » 14 juin 2007, 17:29

en faite c'est un cms, donc j'ai fait ça
<?php
###################################CONNEXION##############
require ("../inc/connexion.php");
// Ce script permet d'ajouter ou de mettre à jour un article dans la base de donnée
  $titre = $_POST['titre'];
  $page = $_POST['page'];
  $time = time();
  $ecrivain = $_POST['ecrivain'];
 // $lien_statique=$_POST['nom_lien_statique'];// deuxième menu
  $article_text = addslashes($article_text);
  $titre = addslashes($titre);
  // numéro de l'article $_REQUEST['article'];
  if (isset($_POST['article']) && $_REQUEST['article']!='')
  {  ######################## Modification d'un article ########################
    $story = $_POST['article'];

    $query = "update article
              set titre = '$titre',
              article_text = '$article_text',
              ecrivain  = '$ecrivain',
              page = '$page',
              modifier = $time,
              lien_statique='$lien_statique' 
              where id = $article";
  }
  else 
  {         ########### SI c'est un nouvel article ##########

    $query = "insert into article values
            ('',  '$ecrivain', '$page', '$description', '$titre', '$article_text', '$image', $time, '', $time)";
	$result=mysql_query($query, $lien);
    if (!$result)
       return false;
  

// selection de l'id de l'article pour l'insertion de sont id dans une autre table
  $article_select_id = "select id from article where  
            titre = '$titre' 
            and article_text = '$article_text' 
            and page = '$page' 
            and creer = $time 
            and publier = $time 
            and ecrivain = '$ecrivain'";
     $select_result=mysql_query($article_select_id, $lien);
     $article = mysql_fetch_object($select_result);
     $id = $article->id;
echo $id;

  $date = date('Y-m-d');

    $requette_pages = "insert into pages values
                ('$page', '$description', '$rubrique', '$date', $id )";
  $result = mysql_query($query, $lien);
  $pages = mysql_query($requette_pages, $lien);
}
  if (!$result) 
  {
    echo 'Il y a une erreur à l\'execution de cette requete : <pre>'.$query.'</pre>';
    echo mysql_error();
    echo 'Vous devez prévenir l\'administrateur';
    @mail($mail, $_SERVER['HTTP_HOST'].':: erreur de requette', 'L\'équipe '.$_SERVER['HTTP_REFERER'].$_SERVER['HTTP_HOST'].' vous remercie Et vous envoie cet email vous prévenant d\'une requette mal insérer de la page "article envoyé"');
    exit;
  }
else if (!$pages)
  {
    echo 'Il y a une erreur à l\'execution de cette requete : <pre>'.$requette_pages.'</pre>';
    echo mysql_error();
    echo 'Vous devez prévenir l\'administrateur';
    exit;
  }
else
 return true;  
//header('Location: '.$_REQUEST['destination']);
?>
mais c'est encore à débugger

par Yosh » 14 juin 2007, 17:09

Mon but étant d'insérer un article, puis de récupérer sont id, pour l'insérer dans une autre page.
Il me faut 4 requettes je trouve ça lourd, il y a peut être un autre moyen ?
Requete 1 : "Insert into"

Ensuite récupération de l'id avec mysql_insert_id

Et je vois pas l'intérêt de réinsérer l'enregistrement!

Essaye d'être plus clair stp.

par x@v » 14 juin 2007, 17:04

Mon but étant d'insérer un article, puis de récupérer sont id, pour l'insérer dans une autre page.
Il me faut 4 requettes je trouve ça lourd, il y a peut être un autre moyen ?

par Yosh » 14 juin 2007, 16:56

Non essaye en faisant mysql_query($requeteSQL) or die (mysql_error());