Instruction require_once() et erreur "supplied argument is not a valid MySQL"

Résolu
karpediem Messages postés 49 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 22 septembre 2014 - 27 mars 2009 à 13:27
karpediem Messages postés 49 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 22 septembre 2014 - 30 mars 2009 à 01:43
Bonjour @ toutezéatous,

J'ai une question toute bête, j'ai presque honte de la poser, mais je vais prendre sur moi ;o))

J'ai une page php qui est appellée à la validation de mon formulaire et qui ressemble à ça en résumé :

<?php
require_once('../config/connexion.php'); // mes paramètres de connexion mysql

if (toto) {
   $id_select = '1';
    $sql = "UPDATE selection SET dt_demande=NOW() WHERE id_selection ='".$id_select."'";
    mysql_select_db($sql_bdd, $bdd_link) or die(mysql_error());
    $result = mysql_query($sql, $bdd_link) or die(mysql_error());
}

if (tata) {

   $id_select = '2';

    $sql = "UPDATE selection SET dt_demande=NOW() WHERE id_selection ='".$id_select."'";

    mysql_select_db($sql_bdd, $bdd_link) or die(mysql_error());

    $result = mysql_query($sql, $bdd_link) or die(mysql_error());

}

?>

Ce code fonctionne bien qu'il ne soit pas très élégant, alors comme je fais deux fois le même traitement, je me suis dit qu'il serait bon de le mettre dans une fonction comme ceci :

<?php

require_once('../config/connexion.php'); // mes paramètres de connexion mysql


function update_param($id_select ) {
    $sql = "UPDATE selection SET dt_demande=NOW() WHERE id_selection ='".$id_select."'";

    mysql_select_db($sql_bdd, $bdd_link) or die(mysql_error());

    $result = mysql_query($sql, $bdd_link) or die(mysql_error());
}

if (toto) {

   update_param('1');

}


if (tata) {
   update_param('2');


}


?>

Sauf que là, il me sort une erreur sur la ligne 4, à l'instruction
    mysql_select_db($sql_bdd, $bdd_link) or die(mysql_error());

qui est :
   "supplied argument is not a valid MySQL"

Comme si il n'arrivait pas à reconnaitre mes paramétres de connexion...

J'ai essayé en remettant
   require_once('../config/connexion.php');
à l'intérieur de ma fonction mais j'ai le même problème. Si je fais un echo de ma requête, elle est bonne (je l'ai passée directement dans phpadmin)

Il doit donc y avoir quelque chose dans le comportement de require_once ou des function
ou des deux ;o)) que je ne saisi pas...

Quelqu'un aurait-il svp une idée de là où je me plante ?

Merci et excellente journée @ toutezéatous.

2 réponses

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
27 mars 2009 à 18:33
Salut Karpediem,

Il n'y a pas de question con !! C'est ne pas la poser qui l'est (j'frai bien d'en prendre de la graine des fois)

C'est un problème de portée des variables :
$sql_bdd et $bdd_link ne sont pas définies dans ta fonction => portée local

Le fait que tu essais de mettre un require_once ne change rien si, comme je le pense, tu as laissé le premier require_once (je me trompe ?) En effet, PHP ne ré inclut pas ../config/connexion.php puisqu'il la déjà inclus au début ("_once" : 1 seule fois)

Mettre un require('../config/connexion.php') règlerai sans doute ton problème, mais ce n'est pas une bonne idée, je préfère faire comme ça :
function update_param($id_select, $bdd_link, $sql_bdd) {

En fait tu peux simplement faire :

function update_param($id_select ) {
    $sql = "UPDATE selection SET dt_demande=NOW() WHERE id_selection ='".$id_select."'";
    $result = mysql_query($sql) or die(mysql_error());
}

Le mysql_query utilisera la dernière ressource de connexion, inutile donc de la préciser.
Il faut par contre mettre le "mysql_select_db($sql_bdd, $bdd_link) or die(mysql_error());" dans connexion.php, sauf si tu travailles sur des bases de données distinctes.

Et puis pourquoi ne pas jouer la simplicité ? :
<?php
require_once('../config/connexion.php'); // penser à inclure mysql_select_db

if ($toto) { // toto ?? => $toto plutôt, non ?
   $id_select = '1';
} elseif ($tata) {
   $id_select = '2';
}

$sql = "UPDATE selection SET dt_demande=NOW() WHERE id_selection ='".$id_select."'";
$result = mysql_query($sql) or die(mysql_error());
?>

Cordialement,

Kohntark -
3
karpediem Messages postés 49 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 22 septembre 2014
30 mars 2009 à 01:43
Hola Kohntark !

ça me fait plaisir de te voir par ici, d'autant que tes réponses sont toujours pertinentes ;o))

Tu as raison sur toute la ligne !

Concernant l'algorithmique de ma fonction, elle est assez compliquée... Au départ, j'avais fait comme tu le suggères avec 1 unique appel au UPDATE, mais c'était un vrai fouillis au niveau du code car en fait j'ai 2 cas de figure en fonction de là où l'on est lorsqu'on appelle ce traitement :
- le 1er super simple, on a la clé, on sait qu'il existe et qu'il est bon => on a juste à faire le UPDATE.
- dans le 2eme cas, on doit vérifier s'il existe ou pas, s'il n'existe pas, on fait un INSERT, s'il existe, on teste si la valeur de la date_de_fin est bonne, etc. et si c'est ok, alors seulement on fait le UPDATE...

Le fait d'avoir séparé les 2 cas de figure me donne un code nettement plus lisible... C'est une motivation presque plus esthétique qu'opérationnelle ;o))

Encore un grand MERCI !!
0
Rejoignez-nous