Mettre une condition php dans une requete sql

Fermé
mont_dani Messages postés 232 Date d'inscription mardi 6 juin 2017 Statut Membre Dernière intervention 7 mai 2024 - Modifié le 22 mai 2022 à 16:31
yg_be Messages postés 23524 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 11 avril 2025 - 9 juin 2022 à 20:41
bonjour.

J'ai besoin de traiter les valeur NULL de mon formulaire envoyer par POST à la requete SQL.

Je l'ai fait en mettant une condition IF.

Existe-t-il une solution pour mettre la condition IF directement dans la requete.

Voici mon code
try
  {
   //$db = new PDO('mysql:host=localhost;dbname=meteo;charset=utf8', 'kmorghylcdc', 'JacoyBeo2');
   $sql = new PDO('mysql:host=localhost;dbname=meteo;charset=utf8', 'root', '');
   
   $sql->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   echo "<BR>connection reussi";
  }
  catch (Exception $e)
  {
    die('Erreur : ' .$e->getMessage());
  }
  
  
  
 
  //si POST est vide ==> oups probleme
if ( empty($_POST['DATE'] || $_POST['T_MINI']))
 //|| $_POST['T_MINI'] != "" || $_POST['T_MAXI'] != "" || $_POST['SAISON'] != ""  )
 {
    // Es un SPAMbot
    echo "<br>oups ya un probleme";
 exit();
 Echo "Tu mensaje no se pudo enviar. Por favor, contacta con nostros.";
 }
 else
 {

  // Establecer las variables para los datos que queremos agregar a la base de datos
  $DATE=($_POST['DATE']);
  $T_MINI=($_POST['T_MINI']);
  $T_MAXI=($_POST['T_MAXI']);
  $LLUVIA=($_POST['LLUVIA']);
  $NIEVE=($_POST['NIEVE']);
  $SAISON=($_POST['SAISON']);
  
  if(!empty($_POST['LLUVIA'])){
  // Aquí creamos una variable que llama al método prepare() del objeto de la base de datos
  // La consulta SQL que desea ejecutar se ingresa como parámetro y los marcadores de posición se escriben así: nombre_marcador
  $my_Insert_Statement = $sql-> prepare ("INSERT INTO releve ( DATE , T_MINI , T_MAXI, LLUVIA , NIEVE , SAISON) VALUES (:DATE,:T_MINI,:T_MAXI,:LLUVIA,:NIEVE,:SAISON)");
  // Ahora le decimos al script a qué variable se refiere realmente cada marcador de posición usando el método bindParam()
  // El primer parámetro es el marcador de posición en la declaración anterior; el segundo parámetro es una variable a la que debe referirse
  
  $my_Insert_Statement-> bindParam (':DATE', $DATE ) ;
  $my_Insert_Statement-> bindParam (':T_MINI', $T_MINI ) ;
  $my_Insert_Statement-> bindParam (':T_MAXI', $T_MAXI ) ;
  $my_Insert_Statement-> bindParam (':LLUVIA', $LLUVIA ) ;
  $my_Insert_Statement-> bindParam (':NIEVE', $NIEVE ) ;
  $my_Insert_Statement-> bindParam (':SAISON', $SAISON ) ;
  }else{
  // Aquí creamos una variable que llama al método prepare() del objeto de la base de datos
  // La consulta SQL que desea ejecutar se ingresa como parámetro y los marcadores de posición se escriben así: nombre_marcador
  $my_Insert_Statement = $sql-> prepare ("INSERT INTO releve ( DATE , T_MINI , T_MAXI,  NIEVE , SAISON) VALUES (:DATE,:T_MINI,:T_MAXI,:NIEVE,:SAISON)");
  // Ahora le decimos al script a qué variable se refiere realmente cada marcador de posición usando el método bindParam()
  // El primer parámetro es el marcador de posición en la declaración anterior; el segundo parámetro es una variable a la que debe referirse
  
  $my_Insert_Statement-> bindParam (':DATE', $DATE ) ;
  $my_Insert_Statement-> bindParam (':T_MINI', $T_MINI ) ;
  $my_Insert_Statement-> bindParam (':T_MAXI', $T_MAXI ) ;
  //$my_Insert_Statement-> bindParam (':LLUVIA', $LLUVIA ) ;
  $my_Insert_Statement-> bindParam (':NIEVE', $NIEVE ) ;
  $my_Insert_Statement-> bindParam (':SAISON', $SAISON ) ;
  } 
   
  // Ejecutar la consulta} usando los datos que acabamos de definir
  // El método de ejecución () devuelve VERDADERO si tiene éxito y FALSO si no, lo que le permite escribir sus propios mensajes aquí
  if ( $my_Insert_Statement-> execute ())
   {  
   header('Location: datos_meteo.php');
    exit();
   } 
   else 
   {  
   echo "No se pudo crear el registro" ;
   }
 } 


J'ai essayer de faire sans succès

$my_Insert_Statement = $sql-> prepare ("INSERT INTO releve ( DATE , T_MINI ,  if(!empty($_POST['LLUVIA'])){echo 'LLUVIA ,'} T_MAXI,  NIEVE , SAISON) VALUES (:DATE,:T_MINI,:T_MAXI,  if(!empty($_POST['LLUVIA'])){echo ':LLUVIA ,'} :NIEVE,:SAISON)");


Ou est mon erreur? Que dois-je faire?
A voir également:

2 réponses

jordane45 Messages postés 38464 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 12 avril 2025 4 741
22 mai 2022 à 17:42
Bonjour,

Deux solutions.
Soit, dans la définition des tes champs dans ta table, tu définis une valeur par défaut ( ce qui implique ensuite que tu dois gérer au niveau de ton php les champs que tu veux insérer ou non ( en enlevant donc ceux qui sont NULL dans ton $_POST )
Soit, tu le gère au moment de récupérer les valeurs de ton formulaire, via, par exemple, l'écriture ternaire.

Par exemple, au lieu d'écrire :
  $LLUVIA=($_POST['LLUVIA']);

tu fais

 // je stocke dans $LLUVIA la valeur de  $_POST['LLUVIA'] si il n'est pas vide ou null, sinon j'y mets le texte : 'LUVIA'
  $LLUVIA= !empty($_POST['LLUVIA']) ? $_POST['LLUVIA'] : 'LUVIA';
0
mont_dani Messages postés 232 Date d'inscription mardi 6 juin 2017 Statut Membre Dernière intervention 7 mai 2024
23 mai 2022 à 07:30
En replcant la ligne sugéré cela ne fonctionne pas.

mon champ est defini ainsi dans ma table:
LLUVIA decimal(20,0) Sí NULL

J'ai cette erreur:
( ! ) Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 1366 Incorrect decimal value: 'LUVIA' for column 'LLUVIA' at row 1 in C:\wamp64\www\lacansera\lacansera\es\noticias\guardar_datos.php on line 57
( ! ) PDOException: SQLSTATE[HY000]: General error: 1366 Incorrect decimal value: 'LUVIA' for column 'LLUVIA' at row 1 in C:\wamp64\www\lacansera\lacansera\es\noticias\guardar_datos.php on line 57

Mais cela fonctionne si je remplace la ligne que tu as suggéré par
if (!empty($_POST['LLUVIA'])) {$LLUVIA = $_POST['LLUVIA'];}


Merci
0
jordane45 Messages postés 38464 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 12 avril 2025 4 741
23 mai 2022 à 09:11
Si c'est un champ décimal, tu peux faire autorisant le null
  $LLUVIA= !empty($_POST['LLUVIA']) ? $_POST['LLUVIA'] : NULL;

ou si tu veux mettre un 0 si il n'est pas rempli
  $LLUVIA= !empty($_POST['LLUVIA']) ? $_POST['LLUVIA'] : 0 ;
0
yg_be Messages postés 23524 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 11 avril 2025 1 577 > jordane45 Messages postés 38464 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 12 avril 2025
9 juin 2022 à 20:41
@mont_dani, peux-tu donner suite, ou marquer comme résolu?
0