Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1740 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  PHP/MySQL : Cast implicite foireux

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

PHP/MySQL : Cast implicite foireux

n°1581804
theredled
● REC
Posté le 03-07-2007 à 11:20:11  profilanswer
 

Hello

 

- J'ai dans une table un valeur float égale à 0.000
- Je la chope avec mysql_result qui la cast en string (normal)
- Ce mysql_result est retourné par une fonction, qui elle me donne un boolean :(

 

Voici les bouts de la chose :

Code :
  1. $creditDispo = $_SESSION['panier']->slvGetCreditDispo();
  2. echo (gettype($creditDispo)).','.$creditDispo; //affiche "boolean,1"


La fonction slvGetCreditDispo() :

Code :
  1. function slvGetCreditDispo() {
  2.     return mysql_val("SELECT credit_dispo FROM customers WHERE customers_id = '".sqlQuotes($_SESSION['client']->getClientID())."'", '', true) or die ('pb sql credit '.mysql_error());
  3. }


la fonction mysql_val() :

Code :
  1. // Retourne la premiere valeur de la première ligne de la Requete
  2. function mysql_val($sql, $msgErrSup='', $showSql=false) {
  3.     $tab = array();
  4.     if ($showSql) echo $sql;
  5.     $req = mysql_query($sql) or die ('Err SQL >'.$sql.' > '.mysql_error().$msgErrSup);
  6.     if (mysql_num_rows($req)==0)    return false;
  7.     else {
  8.         $res = mysql_result($req,0);
  9.         echo gettype($res);  // affiche "string"
  10.         return $res;
  11.     }
  12. }
 

Où est le pb :/ ?


Message édité par theredled le 03-07-2007 à 11:21:02

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
mood
Publicité
Posté le 03-07-2007 à 11:20:11  profilanswer
 

n°1581823
theredled
● REC
Posté le 03-07-2007 à 11:56:23  profilanswer
 

Par contre quand je remplace

Code :
  1. function slvGetCreditDispo() {
  2.  return mysql_val("SELECT credit_dispo FROM customers WHERE customers_id = '".sqlQuotes($_SESSION['client']->getClientID())."'", '', true) or die ('pb sql credit '.mysql_error());
  3. }


Par

Code :
  1. function slvGetCreditDispo() {
  2.  $res = mysql_val("SELECT credit_dispo FROM customers WHERE customers_id = '".sqlQuotes($_SESSION['client']->getClientID())."'", '', true) or die ('pb sql credit '.mysql_error());
  3.  return $res;
  4. }


Ca marche  :heink:  
Pourquoi [:totoz]


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°1581853
cgo2
Dum spiro spero
Posté le 03-07-2007 à 12:27:55  profilanswer
 


 
Parceque c'est comme ça !
 
D'abord, "or" est un opérateur logique : il retourne toujours un boolean, dans tous les cas

Code :
  1. var_dump(12 or 24); // boolean true
  2. return machin() or truc(); // retournera toujours un boolean


 
Mais alors pourquoi une syntaxe comme "mysql_bidule() or die()" ça fonctionne ? Parceque les opérateurs logique s'arretent dès que la condition est vérifiée (je sais plus comment ça s'appelle ça). En gros, si mysql_bidule() retourne vrai, ça sert à rien de tester la suite puisque de toutes façons, que ça soit vrai ou faux, ça retournera vrai. Par contre si mysql_bidule() est faux, alors on passe à l'autre partie.
 
Ensuite, pour la deuxième syntaxe, c'est une question d'ordre de priorité des opérateurs en PHP ( voir http://www.php.net/manual/fr/langu [...] precedence ). En gros l'opérateur "=" est prioritaire sur "or". Donc :
 

Code :
  1. $a = 12 or 24; // equivaut à ($a = 12) or 24;
  2. var_dump($a); // int 12


 
 
mais
 

Code :
  1. $a = (12 or 24);
  2. var_dump($a); // boolean true


 
Voila voila


---------------
When it's from Finland it's good.  - Mon blog
n°1581878
theredled
● REC
Posté le 03-07-2007 à 13:22:15  profilanswer
 

Oh mon dieu je n'avais pas vu ce "or die" qui n'a rien à foutre là en fait [:totoz]
merci :o


Message édité par theredled le 03-07-2007 à 13:22:53

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  PHP/MySQL : Cast implicite foireux

 

Sujets relatifs
[PHP] Dicton par jour[PHP] comment faire un éditeur de feuille de style
Avoir la liste de toutes les fonctions PHP + plantage WAMPconfiguration environnement PHP sous dreamweaver
[PHP + Javascrip] Guillemets + apostrophe pour afficher message o clicFonction js avec paramètre PHP
Visual Studio JAVA et MysqlVariable Javascript -> PHP
[mysql] CONCAT + GROUP BY ?Doc mysql authentification pour apache2
Plus de sujets relatifs à : PHP/MySQL : Cast implicite foireux


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR