Page 1 sur 2

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

Posté : 14 juin 2007, 15:45
par x@v
Bonjour,
j'aimerai récupérerun champs de l'id, mais j'ai une méchante erreur, qui ne me parle pas ?
l'adresse de la page: http://88.167.164.83/alain/admin/test_mysql.php

Code : Tout sélectionner

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /var/www/alain/admin/test_mysql.php on line 12
<?php
require ("../inc/connexion.php");
$article_select_id = "select id from article where  
            titre ='eeeeeeee', 
            and article_text ='aaaaa', 
            and page ='pppppppp', 
            and creer  ='ccccccc', 
            and publier ='rrrrrrrrr', 
            and ecrivain ='eeeeeeee', 
	    and lien_statique ='llllllllll'";
     $select_result=mysql_query($article_select_id, $lien);
     $article = mysql_fetch_object($select_result);
     $id = $article->id;
echo $id;
?>
La structure de ma table

Code : Tout sélectionner

CREATE TABLE `article` ( `id` int(11) NOT NULL auto_increment, `ecrivain` varchar(16) NOT NULL default '', `page` varchar(200) NOT NULL default '', `description` text NOT NULL, `titre` text NOT NULL, `article_text` longtext NOT NULL, `image` text NOT NULL, `creer` int(11) NOT NULL default '0', `modifier` int(11) NOT NULL default '0', `publier` int(11) NOT NULL default '0', PRIMARY KEY (`id`), KEY `id` (`id`) ) TYPE=MyISAM AUTO_INCREMENT=131 ;
Merci d'avance

Re: [MySql] récupération d'un champs "id" auto-inc

Posté : 14 juin 2007, 15:48
par Yosh
$article_select_id = "select id from article where
titre ='eeeeeeee',
and article_text ='aaaaa',
and page ='pppppppp',
and creer ='ccccccc',
and publier ='rrrrrrrrr',
and ecrivain ='eeeeeeee',
and lien_statique ='llllllllll'";
Alors dans une requete SQL, si tu veux mettre plusieurs critère de sélection il faut les séparer par des AND et non pas par des , AND

Ce qui te donne

Code : Tout sélectionner

$article_select_id = "SELECT id FROM article WHERE titre = 'eeeeeeee' AND article_text = 'aaaaa' AND page = 'pppppppp' AND creer = 'ccccccc' AND publier = 'rrrrrrrrr' AND ecrivain = 'eeeeeeee' AND lien_statique = 'llllllllll';";

Posté : 14 juin 2007, 15:55
par x@v
j'ai exactement recopier
<?php
require ("../inc/connexion.php");
$article_select_id = "SELECT id FROM article 
 WHERE titre = 'eeeeeeee' 
 AND article_text = 'aaaaa' 
 AND page = 'pppppppp' 
 AND creer  = 20 
 AND publier = 50 
 AND ecrivain = 'eeeeeee' 
 AND lien_statique = ''";
 $select_result=mysql_query($article_select_id, $lien);
 $article = mysql_fetch_object($select_result);
 $id = $article->id;
echo $id;
?>
Mais l'erreur ne bouge pas :

Code : Tout sélectionner

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /var/www/alain/admin/test_mysql.php on line 12
la ligne 12 correspond à : $article =

Code : Tout sélectionner

mysql_fetch_object($select_result);

Posté : 14 juin 2007, 16:02
par Yosh
Ok, donc tu à un problème sur l'éxécution de ta requête.

La connexion à ta base de données fonctionne?

Sinon tout à l'air bon.

Posté : 14 juin 2007, 16:13
par ouckileou
Sinon tout à l'air bon.
Pourquoi se contenter de supposer, alors qu'on peut en être sûr ?
MySQL renvoie des messages d'erreurs à la connexion, la sélection de la base ou l'exécution des requêtes, ce serait bête de s'en passer.

voir ici donc, pour tous les trucs à faire soit-même avant de poster sur un forum :
http://www.phpfrance.com/forums/voir_sujet-19378.php

Posté : 14 juin 2007, 16:16
par Yosh
Sinon tout à l'air bon.
Pourquoi se contenter de supposer, alors qu'on peut en être sûr ?
MySQL renvoie des messages d'erreurs à la connexion, la sélection de la base ou l'exécution des requêtes, ce serait bête de s'en passer.

voir ici donc, pour tous les trucs à faire soit-même avant de poster sur un forum :
http://www.phpfrance.com/forums/voir_sujet-19378.php
Ba j'en suis sur ^^

Posté : 14 juin 2007, 16:51
par x@v
http://88.167.164.83/alain/admin/test_mysql.php
echo $toto; renvois l'id correctement
<?php
require ("../inc/connexion.php");
$titi="SELECT * FROM article";
$toto=mysql_query($titi, $lien);
echo $toto;
$article_select_id = "SELECT id FROM article 
 WHERE titre = 'eeeeeeee' 
 AND article_text = 'aaaaa' 
 AND page = 'pppppppp' 
 AND creer  = 20 
 AND publier = 50 
 AND ecrivain = 'eeeeeee' 
 AND lien_statique = ''";
 $select_result=mysql_query($article_select_id, $lien);
 $article = mysql_fetch_object($select_result);
 $id = $article->id;
echo $id;
?>
Le problème vient du sens des opérations, que j'ai mal démarrer
1/ //on insère les champs
2/ // je récupère l'id que je viens d'insérer
3/ // on finis par insérer l'id dans une autre table
4/ // on sélectionne cette autre table
Voilà ce que je voudrai faire, sa fait 4 requetes.

Posté : 14 juin 2007, 16:56
par Yosh
Non essaye en faisant mysql_query($requeteSQL) or die (mysql_error());

Posté : 14 juin 2007, 17:04
par x@v
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 ?

Posté : 14 juin 2007, 17:09
par Yosh
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.

Posté : 14 juin 2007, 17:29
par x@v
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

Posté : 14 juin 2007, 17:32
par Yosh
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.

Posté : 14 juin 2007, 17:59
par x@v
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();

Posté : 15 juin 2007, 01:33
par ouckileou
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:

Posté : 15 juin 2007, 09:10
par Yosh
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.