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

x@v
Mammouth du PHP | 570 Messages

14 juin 2007, 15:45

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

Mammouth du PHP | 568 Messages

14 juin 2007, 15:48

$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';";

x@v
Mammouth du PHP | 570 Messages

14 juin 2007, 15:55

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);

Mammouth du PHP | 568 Messages

14 juin 2007, 16:02

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.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

14 juin 2007, 16:13

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

Mammouth du PHP | 568 Messages

14 juin 2007, 16:16

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 ^^

x@v
Mammouth du PHP | 570 Messages

14 juin 2007, 16:51

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.
Modifié en dernier par x@v le 14 juin 2007, 16:58, modifié 1 fois.

Mammouth du PHP | 568 Messages

14 juin 2007, 16:56

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

x@v
Mammouth du PHP | 570 Messages

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 ?

Mammouth du PHP | 568 Messages

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.

x@v
Mammouth du PHP | 570 Messages

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

Mammouth du PHP | 568 Messages

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.

x@v
Mammouth du PHP | 570 Messages

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();

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

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:

Mammouth du PHP | 568 Messages

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.