15/12/2010 @ 13:11:28: wangacoast: coquille et php [RESOLU]
bonjour tout le monde,
today, j'ai un petit soucis en php. Il s'agit d'un code fonctionnant dans mon logiciel de gestion de bibliothèque PMB. Il permet de générer des identifiants (id) de manière automatique par incrémentation pour les attribuer aux livres. Je ne vais pas entrer dans les détails mais les paramètres par défaut du code ne me convenant pas, j'ai bidouillé le code.
Le résultat ne pose pas de problème, apparemment je n'ai pas fait de grosse bêtise mais le logiciel me sort quand même ce message d'erreur après la génération de l'id :
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /homez.27/kaowarso/www/pmb/includes/gen_code/gen_code_exemplaire.php on line 8
Je me permets de vous mettre une copie de mon code bidouillé avec les éléments modifiés en rouge :
<?php
function init_gen_code_exemplaire($notice_id,$bull_id)
{
global $dbh;
$requete="select (expl_cb)as cb from exemplaires WHERE max(expl_id)";
$query = mysql_query($requete, $dbh);
if(mysql_num_rows($query)) {
if(($cb = mysql_fetch_object($query)))
$code_exemplaire= $cb->cb;
else $code_exemplaire = "0";
} else $code_exemplaire = "0";
return $code_exemplaire;
}
function gen_code_exemplaire($notice_id,$bull_id,$code_exemplaire)
{
$code_exemplaire++;
return $code_exemplaire;
}
et voici le code original :
<?php
function init_gen_code_exemplaire($notice_id,$bull_id)
{
global $dbh;
$requete="select max(expl_cb)as cb from exemplaires WHERE expl_cb like 'GEN%'";
$query = mysql_query($requete, $dbh);
if(mysql_num_rows($query)) {
if(($cb = mysql_fetch_object($query)))
$code_exemplaire= $cb->cb;
else $code_exemplaire = "GEN000000";
} else $code_exemplaire = "GEN000000";
return $code_exemplaire;
}
function gen_code_exemplaire($notice_id,$bull_id,$code_exemplaire)
{
$code_exemplaire++;
return $code_exemplaire;
}
un grand merci d'avance!
15/12/2010 @ 13:31:29: max: coquille et php
pour débuger et avoir le message d'erreur de MySQL:
echo mysql_errno($dbh) . ": " . mysql_error($dbh) . "\n";
A placer après le query
15/12/2010 @ 13:32:42: wangacoast: coquille et php
j'ai essayé mais toujours la même erreur
15/12/2010 @ 13:34:56: zion: coquille et php
ajoute un echo(mysql_error()); après le mysql_query pour qu'on sache au moins quoi
15/12/2010 @ 13:35:02: max: coquille et php
je me suis trompé, j'efface mon précedent message et je recommande:
ton WHERE max() n'est pas valide.
Tu ne peux pas utiliser ces fonctions dans une condition.
15/12/2010 @ 13:35:13: wangacoast: coquille et php
ok voilà : 1111: Invalid use of group function
15/12/2010 @ 13:35:51: zion: coquille et php
Enfin, sans avoir l'erreur, ton WHERE est foireux.
$requete="select (expl_cb)as cb from exemplaires WHERE max(expl_id)";
max quoi, c'est pas bon du tout comme query... Tu veux faire quoi?
15/12/2010 @ 13:38:02: max: coquille et php
avoir les expli_cb dont la valeur expli_id est la plus haute ?
15/12/2010 @ 13:38:42: wangacoast: coquille et php
ok alors en fait je lui demande de sélectionner la valeur expl_cb (dans une colonne de ma table sql) dont l'identifiant expl_id est le plus grand de la série. Comment devrais je m'y prendre à ton avis?
15/12/2010 @ 13:40:49: wangacoast: coquille et php
si je dis : where expl_id=max(expl_id) ?
15/12/2010 @ 13:43:08: max: coquille et php
pas de max() dans un where qu'on te dit
tu attends un seul résultat ?
select expl_cb from exemplaires order by expli_id desc limit 0,1;
ce n'est valable que si expli_id est unique et qu'il s'incrémente, si tu as plusieurs lignes qui ont le même expli_id, tu n'en aura q'un avec cette requête.
15/12/2010 @ 13:48:09: wangacoast: coquille et php
en fait il me faut le expl_cb. Je m'explique : la colonne expl_cb contient l'ensemble des id de mes bouquins. Seulement je ne peux pas prendre le MAX de expl_cb parce que l'on a engendré plein d'id avec des formats différents. Du coup, il ne sélectionne pas la bonne valeur maximale.
Heureusement chaque expl_cb est doté d'un identifiant contenu dans la colonne expl_id. Et donc forcément, le plus grand expl_id correspond au dernier expl_cb encodé. Je dois donc partir de ce dernier pour générer mes futurs id de livres.
15/12/2010 @ 13:56:16: wangacoast: coquille et php
ça marche comme dirait Bourvil dans le jour le plus long
![:wink: :wink:](images/smileys/wink.gif)
merci beaucoup!