PHP rentre 0 au lieu de NULL

PHP rentre 0 au lieu de NULL - PHP - Programmation

Marsh Posté le 01-07-2022 à 15:17:56    

Bonjour

 

j'ai un script PHP simple pour acquérir des valeurs

 
Code :
  1. <?php
  2. include 'connect.php';
  3. if(isset($_GET['pH']))
  4. {
  5.         $chlore=$_GET['pH'];
  6. }
  7. if(isset($_GET['chlore']))
  8. {
  9.         $chlore=$_GET['chlore'];
  10. }
  11. if(isset($_GET['flow']))
  12. {
  13.         $flow=$_GET['flow'];
  14. }
  15. $sql  = 'INSERT INTO `ocr2022-test` (`id`, `date`, `pH` , `chlore`, `flow`) VALUES (NULL, UTC_TIMESTAMP,"'.$pH.'" , "'.$chlore.'", "'.$flow.'" )';
  16. if ($conn->query($sql) === TRUE) {
  17.     echo "Nouvelle entrée OK";
  18. } else {
  19.     echo "Erreur : " . $sql . "<br>" . $conn->error;
  20. $conn->close();
 

seulement meme si je n'entre aucune valeur sur ma page PHP, il met pH, chlore et flow a 0, alors qu'ils sont réglés à NULL dans ma page.

 

Si quelqu'un a une idée pour régler ça ? merci :)


Message édité par dureiken le 01-07-2022 à 15:18:23
Reply

Marsh Posté le 01-07-2022 à 15:17:56   

Reply

Marsh Posté le 01-07-2022 à 16:02:07    

Lu,
 
c'est normal : la cast (niveau PHP) de NULL en string (induit par la concaténation) donne la chaîne vide puis vient celle de MySQL qui, avec une colonne de type *INT, va à son tour caster cette chaîne vide provenant de PHP en 0 (ou donner une erreur avec un sql_mode moins laxiste).
 
Tu devrais commencer par préparer ta requête, t'es bon pour des injections SQL là et ça devrait corriger ce problème de "type" (d'ailleurs les entiers ne se quotent pas en SQL, chose qui n'aurait pas non plus permis d'insérer NULL).
 
Visiblement tu utilises mysqli, tu pourrais te passer de toute gestion d'erreur de requêtes avec un mysqli_report qui demanderait à lever une exception (c'est même le comportement par défaut de mysqli depuis PHP 8.1.0 en principe).

Message cité 1 fois
Message édité par pluj le 01-07-2022 à 17:34:18
Reply

Marsh Posté le 01-07-2022 à 16:31:35    

pluj a écrit :

Lu,
 
 
 
Tu devrais commencer par préparer ta requête, t'es bon pour des injections SQL là et ça devrait corriger ce problème de "type" (d'ailleurs les entiers ne quotent pas en SQL, chose qui n'aurait pas non plus permis d'insérer NULL).


 
Merci pour les éclaircissements, je ne suis pas du tout compétent en php, tu pourrais détailler ce point ?
 
Merci

Reply

Marsh Posté le 01-07-2022 à 16:41:16    

Reply

Marsh Posté le 01-07-2022 à 20:05:19    

Après j'ai pas tout compris mais ptet que tu veux juste tester si tes $_GET sont remplis...
 
Un truc du genre :

Code :
  1. $pH= false;
  2. if(isset($_GET['pH']) && !empty($_GET['pH'])) {
  3.         $pH=$_GET['pH'];
  4. }
  5. [idem pour les autre variables]
  6. if ($pH && $chlore && $flow) {
  7.     [faire ta requête]
  8. }


Message édité par mechkurt le 01-07-2022 à 20:05:51

---------------
D3
Reply

Marsh Posté le 02-07-2022 à 12:13:39    

Mettre NULL pour un ID, je pense que ça va mal se passer :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 02-07-2022 à 12:34:44    

Nop, c'est ce qu'il faut faire en MySQL quand tu as une colonne en autoincrement (tu peux aussi ne pas spécifier la colonne).


---------------
D3
Reply

Marsh Posté le 02-07-2022 à 13:08:06    

Ah ok. Moi, je mets pas la colonne.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 02-07-2022 à 16:48:07    

Je sais pas depuis quel version ça fonctionne mais j'ai appris à faire comme ça donc ça doit remonter un peu... [:gilbert gosseyn]


---------------
D3
Reply

Marsh Posté le 08-07-2022 à 06:02:59    

Code :
  1. if(isset($_GET['pH']))
  2. {
  3.         $chlore=$_GET['pH'];
  4. }
  5. if(isset($_GET['chlore']))
  6. {
  7.         $chlore=$_GET['chlore'];
  8. }


 
 
le ph doit s'écrire :  
 

Code :
  1. $pH=$_GET['pH'];

Message cité 1 fois
Message édité par spark le 08-07-2022 à 06:04:09

---------------
Un cycle complet sera une série de 100.
Reply

Marsh Posté le 08-07-2022 à 06:02:59   

Reply

Marsh Posté le 08-07-2022 à 07:43:44    

Petit rappel : empty() renvoie true si ta variable = 0, ou =false ou = '' ou = null ;)
De même, si $pH = 0 et que tu fais if ($pH == FALSE), ça renvoie true.
Par contre if ($pH === FALSE) renvoie false.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 08-07-2022 à 09:45:18    

spark a écrit :

Code :
  1. if(isset($_GET['pH']))
  2. {
  3.         $chlore=$_GET['pH'];
  4. }
  5. if(isset($_GET['chlore']))
  6. {
  7.         $chlore=$_GET['chlore'];
  8. }


 
 
le ph doit s'écrire :  
 

Code :
  1. $pH=$_GET['pH'];



 
oui pardon c'est un copier/coller pendant un test
 
pour voir si vous suivez :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed