Bonjour à tous et à toutes
Voila je rencontre un petit soucis que je n'arrive pas à résoudre.
J'ai une base de données comportant certains champs null ..
Lorsque le type de champs est en Date/Heure, Integer et autres, pas de soucis j'arrive à tester correctement le fait qu'ils soit null ou pas.
En revanche, lorsque le champs est en Texte, je n'arrive absolument pas à tester s'il sont null alors qu'avec une requête en WHERE le champs IS NULL ça fonctionne très bien.
Je vous explique.
Je récupère a valeur du champs dans un input, que je publie après en méthode POST.
C'est au moment de la récupération du $_POST que ça déconne. Pour une date ça fonctionne, integer aussi, et tout le reste en fait, mais pas pour un type Texte.
A partir de cette récupération je génère une requete d'update, et il me faut impérativement dans mon where des IS NULL. C'est pourquoi je test si mon post l'est ou pas.
Je vous montre
Code :
- else
- {
- if($numeroName == 0)
- {
- $clauseWhere .= " ".$v;
- }// on regarde si on est à la première instruction pas de AND
- else
- {
- $clauseWhere .= " AND ".$v;
- }
- // on regarde si on est null
- if(trim($_POST["anc".$v]) == "" || trim($_POST["anc".$v]) == " " || $_POST["anc".$v] == " " || $_POST["anc".$v] == "" || trim($_POST["anc".$v]) === NULL || is_null(trim($_POST["anc".$v])) || is_null($_POST["anc".$v]) || empty($_POST["anc".$v]))
- {
- $clauseWhere .= ' IS NULL ';
- }
- else
- {
- // ---------------------------------------------------------------------------------------
- // --------------------------------------------------------------------------------------- si on à une date
- if($typeChamp == "DATE" || $typeChamp == "TIME" || $typeChamp == "DATETIME" )
- {
- $clauseWhere .= "=cvdate('".addslashes(htmlentities($_POST["anc".$v]))."')";
- }
- else
- {
- $clauseWhere .= "='".addslashes(htmlentities($_POST["anc".$v]))."'";
- }
- }
- }
- }
- // on incrémente pour dire qu'on est plus à la première instruction
- $numeroName ++;
- } // fin du while
- echo "<br><br><br><br>".$clauseWhere."<br><br><br><br>";
- $clauseWhere = str_replace("=''"," IS NULL ",$clauseWhere);
- $clauseWhere = str_replace("=' '"," IS NULL ",$clauseWhere);
- $clauseWhere = str_replace(NULL," IS NULL ",$clauseWhere);
- $clauseWhere = str_replace("NULL"," IS NULL ",$clauseWhere);
- echo "<br><br><br><br>".$clauseWhere."<br><br><br><br>";
|
et voici ce qu'il m'affiche
Code :
- WHERE ABO_ID=18 AND CLIENTDM_ID=' ' AND CLIENTDAT_ID=' ' AND CLIENTPATCH_ID=' ' AND ABO_IDENT='AMUE' AND ABO_PW='XX.?.XX' AND ABO_NOM='AMUE' AND ABO_PNOM='.' AND ABO_SOC='AMUE' AND ABO_MAIL='.' AND ABO_NBCX=643 AND ABO_DATCONN=cvdate('2008-03-27 17:06:15') AND ABO_HABCONSULT='Z' AND ABO_HABMAJ='Z' AND ABO_IDEXT='091' AND ABO_GENERIQUE=' ' AND ABO_PW_AT=' ' AND ABO_PW_ADMIN='NCDQ'
- WHERE ABO_ID=18 AND CLIENTDM_ID=' ' AND CLIENTDAT_ID=' ' AND CLIENTPATCH_ID=' ' AND ABO_IDENT='AMUE' AND ABO_PW='XX.?.XX' AND ABO_NOM='AMUE' AND ABO_PNOM='.' AND ABO_SOC='AMUE' AND ABO_MAIL='.' AND ABO_NBCX=643 AND ABO_DATCONN=cvdate('2008-03-27 17:06:15') AND ABO_HABCONSULT='Z' AND ABO_HABMAJ='Z' AND ABO_IDEXT='091' AND ABO_GENERIQUE=' ' AND ABO_PW_AT=' ' AND ABO_PW_ADMIN='NCDQ'
|
Vous voyez il ne prend pas en compte le fait d'avoir les ='', il me prend pas en compte le fait d'être null, enfin c'est la misère quoi.
Normalement je devrais obtenir
Code :
- WHERE ABO_ID=18 AND CLIENTDM_ID IS NULL AND CLIENTDAT_ID IS NULL AND CLIENTPATCH_ID IS NULL AND ABO_IDENT='AMUE' AND ABO_PW='XX.?.XX' AND ABO_NOM='AMUE' AND ABO_PNOM='.' AND ABO_SOC='AMUE' AND ABO_MAIL='.' AND ABO_NBCX=643 AND ABO_DATCONN=cvdate('2008-03-27 17:06:15') AND ABO_HABCONSULT='Z' AND ABO_HABMAJ='Z' AND ABO_IDEXT='091' AND ABO_GENERIQUE IS NULL AND ABO_PW_AT IS NULL AND ABO_PW_ADMIN='NCDQ'
|
Voila
Est ce que quelqu'un sais pourquoi il me fait ça.. Je ne comprend pas, vraiment j'ai fais tous les tests possible et inimaginable et la je pige pas.
Si vous pouvez m'aider ça serai gentil. Je pense que l'espace entre les ' ' dois avoir une valeur bien spécifique, mais je sais pas laquelle.
En vous remerciant d'avance, j'espère que vous saurez m'aider ^^
Cordialement
EDIT : Bon bah ne cherchez pas plus, je ne sais pas pourquoi mais le NULL était automatiquement transformé en et donc je ne voyais absolument rien à l'interprétation ...
Si ça arrive un jour à quelqu'un il saura quoi faire ^^
Message édité par micfont999 le 07-05-2008 à 12:59:41
---------------
> http://graphicriver.net/user/micfo [...] micfont999