Formulaire php Valeur envoyer NULL et non vide

Formulaire php Valeur envoyer NULL et non vide - PHP - Programmation

Marsh Posté le 05-09-2006 à 16:13:12    

Bonjour,  
j'ai créé un formulaire sous php/mysql et je voudrais envoyé NULL dans ma base qu'une chaine vide (pour mais test ensuite notnull ect ect)  
J'ai bien configuré mysql NULL = oui ...DEFAUT = NULL
mais si je ne remplie pas une chose dans mon formulaire il me renvoit une chaîne vide "".  
Donc dans ma base j'ai un "" au lieu de NULL...
merci d'avance  
 
ps: ne me dites pas de faire un teste  et de mettre en toute lettre NULL...il considére ça comme une chaîne de caractere ;)

Reply

Marsh Posté le 05-09-2006 à 16:13:12   

Reply

Marsh Posté le 05-09-2006 à 16:16:48    

jiojioforever a écrit :

ps: ne me dites pas de faire un teste  et de mettre en toute lettre NULL...il considére ça comme une chaîne de caractere ;)


Try again, tu étais bien parti :o ( sans les quotes autour du NULL hein)
Si ça marche toujours pas, fais nous un print de ta requête qu'on voit à quoi elle ressemble.

Reply

Marsh Posté le 05-09-2006 à 16:20:46    

oups...


Message édité par jiojioforever le 05-09-2006 à 16:21:08
Reply

Marsh Posté le 05-09-2006 à 16:24:15    

Par exemple,  
j'ai une page ou je fais appel à une requetes pour mettre des choses dans des champs. Pour être plus clair, j'ai des dates de concerts et je choisis d'en modifier une. Unep age s'ouvre avec les champs à modifier mais ces champs sont déjà remplis par des données que j'ai applé par la requête concerné.
Je continu...par exemple je décide de retirer le prix qui était de 3€ l'entrée et je laisse mon champ vide...  
 
je clique sur le bouton envoyer les modifications et op tout repart par POST sur une page qui execute cette requête :  
 
   $req = mysql_query('UPDATE concert SET concert_date = "'.$_POST['date_concert'].'", concert_heure  = "'.$_POST['heure_concert'].'", concert_prix = "'.$_POST['prix_concert'].'", concert_ville = "'.$_POST['ville_concert'].'",  concert_departement = "'.$_POST['dep_concert'].'", concert_lieu = "'.$_POST['lieu_concert'].'", concert_groupe1 = "'.$_POST['groupe1_concert'].'", concert_site1 ="'.$_POST['site1_concert'].'", concert_groupe2 = "'.$_POST['groupe2_concert'].'", concert_site2 ="'.$_POST['site2_concert'].'", concert_groupe3 = "'.$_POST['groupe3_concert'].'", concert_site3 ="'.$_POST['site3_concert'].'", concert_guest = "'.$_POST['guest'].'",  concert_flyer = "'.$image.'" WHERE concert_num = '.$_GET['concert_num']);

Reply

Marsh Posté le 05-09-2006 à 16:24:48    

et donc pour mon exemple du prix...celui-ci passe en chaine vide et non en NULL ^^

Reply

Marsh Posté le 05-09-2006 à 16:37:05    

Reply

Marsh Posté le 05-09-2006 à 16:42:11    

euh oui et ? :s

Reply

Marsh Posté le 05-09-2006 à 16:49:51    

Bin c'est de la bouse ce que tu écris donc tu arrêtes de mettre directement tes champs du formulaire dans ta requete.
Tu peux donc en profiter pour faires des tests sur chaque champs reçu, voir le reformater correctement ( donc y mettre NULL).
[:spamafote]

Reply

Marsh Posté le 05-09-2006 à 17:15:01    

oui mais c'était pour te montrer que je ne voyais pas comment mettre NULL dans ma requête vu que je prend tous les champs par une methode POST...donc si mon champ est vide ça m'insera un "" et non NULL...

Reply

Marsh Posté le 05-09-2006 à 17:19:11    

exemple sur un champs:

Code :
  1. $date_concert = empty($_POST['date_concert'])?'NULL':mysql_real_escape_string($_POST['date_concert']);


Et ensuite tu te sers de $date_concert dans ta requête.

Reply

Marsh Posté le 05-09-2006 à 17:19:11   

Reply

Marsh Posté le 05-09-2006 à 17:21:42    

donc en gros avant de balancer la grosse requete je teste champ par champ pour contrôler si c'est NULL ou non ?
mais je trouve ça bizar (et chiant) vu que dans la config Mysql on dit que le champt peut être null et si c'est le cas mettre NULL par défaut...

Reply

Marsh Posté le 05-09-2006 à 17:27:11    

jiojioforever a écrit :

mais je trouve ça bizar (et chiant) vu que dans la config Mysql on dit que le champt peut être null et si c'est le cas mettre NULL par défaut...

la valeur par défaut est utilisée lors d'un INSERT

Reply

Marsh Posté le 05-09-2006 à 17:29:16    

ok merci pour l'info donc UPDATE c'est mort..c'est bête ça :s

Reply

Marsh Posté le 05-09-2006 à 17:31:34    

de plus comment veux tu que ton champ prenne une valeur par défaut alors que tu lui affecte une valeur justement !

Reply

Marsh Posté le 05-09-2006 à 17:34:27    

non justement c'est ma page de modification...le champ peut être rempli par exemple par le prix du concert soit 3€ mais si je veux retirer le prix et donc laisser le champ vide puis envoyer le chamtp est donc null non?

Reply

Marsh Posté le 05-09-2006 à 17:38:47    

...
1) la valeur par défaut est utilisée lors d'un INSERT, dans ton cas c'est un UPDATE
2) '' != NULL
3) dans ta requete tu affectes des valeurs à tous tes champs
 
cqfd
 
donc relis bien les messages d'anapajari et tu t'en sortiras


Message édité par soju le 05-09-2006 à 17:48:31
Reply

Marsh Posté le 05-09-2006 à 18:21:40    

par contre ça me renvoi une chaîne  
 
$date_concert = empty($_POST['date_concert'])?'NULL':mysql_real_escape_string($_POST['date_concert']);  
 
avec marqué NULL :s

Reply

Marsh Posté le 05-09-2006 à 18:36:27    

j'ai fait un test comme ça et ça marche nikel...
 
if ($_POST['groupe3_concert'] == '')
{
$groupe3_concert = null;
}

Reply

Marsh Posté le 05-09-2006 à 18:59:28    

Sauf que c'est la chaîne "NULL" à mettre dans le champs...

Reply

Marsh Posté le 05-09-2006 à 19:04:24    

oui en majuscule j'ai vu ça :) ! je vais tester

Reply

Marsh Posté le 05-09-2006 à 19:05:45    

comme ça ?  
 
if ($_POST['site3_concert'] == '')  
{
$site3_concert = "NULL";
}
 
çame renvoit une chaîne de caractere NULL dans ma base :s

Reply

Marsh Posté le 05-09-2006 à 19:09:32    

grr je fais bien ça pourtant  
 
Il y a seulement une valeur de type NULL et c'est le mot-clé NULL , insensible à la casse. La valeur NULL  
 
<?php$var = NULL;?>
 
 
 

Reply

Marsh Posté le 05-09-2006 à 19:15:28    

ça non plus de fonctionne pas :(
 
if (empty($_POST['groupe3_concert']))  
{
$groupe3_concert = NULL;
}

Reply

Marsh Posté le 05-09-2006 à 19:28:34    

je pensais là...il n'est pas possible de dire par exemple dans mysql si on trouve un champ vide alors on lui attribut automatiquement NULL ? une sorte de règle...

Reply

Marsh Posté le 05-09-2006 à 20:05:58    

Attention, ne pas confondre le null de PHP qui ne met rien dans une variable, et le null mysql qui doit être explicité dans la requête. Sûrement ça bug parce que t'as mis des quotes.
 
Quand t'as une valeur :

site3_concert="zePouet"


Mais quand c'est null, y'a pas de quotes :

site3_concert=NULL


 
On se retrouve avec :
 

$site3_concert = isset($_POST['site3_conert']) ? '"' . mysql_real_escape_machin($_POST['site3_concert']) . '"' : 'NULL';
 
...
 
UPDATE ...... AND site3_concert = ' . $site3_concert . ' ...


Donc tu mets des quote quand y'a une valeur, et sinon pouet
 

Reply

Marsh Posté le 06-09-2006 à 11:27:20    

ça ne fonctionne toujours pas...
 
regarde dans ta requête :
UPDATE ...... AND site3_concert = ' . $site3_concert . ' ...
 
tu mets des guillemets donc même si on a NULL ça mettra 'NULL' donc uen chaîne de carateres...
mon probleme est toujours pas résolu snif.

Reply

Marsh Posté le 06-09-2006 à 11:29:12    

Nan j'en met pas.
 

$site3_concert = 'NULL';


->y'a la chaîne de caractère NULL dans la variable
 
Quand c'est ensuite injecté dans la requête, ça se transforme en

AND site3_concert = NULL ...


Donc c'est bon

Reply

Marsh Posté le 06-09-2006 à 11:51:02    

mais tu utilises bien ce code ?  
$site3_concert = isset($_POST['site3_conert']) ? '"' . mysql_real_escape_machin($_POST['site3_concert']) . '"' : 'NULL';  
 
à la place du machin c'est string non ?

Reply

Marsh Posté le 06-09-2006 à 11:52:34    

je pense là... il faut que je retire mais " " dans ma requête alors :
 
$req = mysql_query('UPDATE concert SET concert_date = "'.$date_concert.'", concert_heure  = "'.$heure_concert.'",
 
soit  
 
$req = mysql_query('UPDATE concert SET concert_date = '.$date_concert.', concert_heure  = '.$heure_concert.',

Reply

Marsh Posté le 06-09-2006 à 11:55:18    

après ton

Code :
  1. $req = "update ...".$desvaleurs." ...";


est-ce que tu peux faire

Code :
  1. print $req;


et nous donner ce qui est affiché?

Reply

Marsh Posté le 06-09-2006 à 12:01:50    

j'ai juste un 1 qui s'affiche....

Reply

Marsh Posté le 06-09-2006 à 12:53:00    

oula [:johneh]

Reply

Marsh Posté le 06-09-2006 à 12:59:16    

effectivement ^^ mais ça modifie bien mes données...


Message édité par jiojioforever le 06-09-2006 à 13:03:58
Reply

Marsh Posté le 06-09-2006 à 13:16:09    

jiojioforever a écrit :

j'ai juste un 1 qui s'affiche....


my bad, j'aurais du être plus clair ...
 
Tu as dans ton code:

Code :
  1. $req = mysql_query('UPDATE concert SET ...');


Change le en:

Code :
  1. $sql = 'UPDATE concert SET ...'; // avec tes concaténations
  2. print $sql;
  3. $req = mysql_query($sql);


et dis nous ce que cela affiche!

Reply

Marsh Posté le 06-09-2006 à 14:28:32    

voilà ce que ça m'affiche
 
UPDATE concert SET concert_date = "2005-12-18", concert_heure = "21h", concert_prix = "NC", concert_ville = "Auchel", concert_departement = "62", concert_lieu = "L'Odéon", concert_groupe1 = "Guerilla Poubelle", concert_site1 ="http://www.guerilla-poubelle.com", concert_groupe2 = """", concert_site2 ="NULL", concert_groupe3 = """", concert_site3 ="NULL", concert_guest = "non", concert_flyer = "" WHERE concert_num = 9

Reply

Marsh Posté le 06-09-2006 à 14:29:19    

j'ai mis le code que pour ça :  
 
$groupe2_concert = isset($_POST['groupe2_concert']) ? '"' . mysql_real_escape_string($_POST['groupe2_concert']) . '"' : 'NULL';  
$site2_concert = isset($_POST['site2_conert']) ? '"' . mysql_real_escape_string($_POST['site2_concert']) . '"' : 'NULL';  
$groupe3_concert = isset($_POST['groupe3_concert']) ? '"' . mysql_real_escape_string($_POST['groupe3_concert']) . '"' : 'NULL';  
$site3_concert = isset($_POST['site3_conert']) ? '"' . mysql_real_escape_string($_POST['site3_concert']) . '"' : 'NULL';  
 
en prenant soin de modifier mon formulaire en mettant vide

Reply

Marsh Posté le 06-09-2006 à 14:31:02    

Donc là tu constates qu'il y a des " ( double quotes) autour de tes NULL alors qu'il ne devrait pas y en avoir.  
Ta requête devrait être de la forme:

Code :
  1. UPDATE concert SET ..., concert_site2 =NULL,... WHERE concert_num = 9


les " en trop proviennent de la chaine initiale ( celle dans laquelle tu fais tes concaténations).
 
Par ailleurs les valeurs en SQL sont généralement entourées de ' ( quotes) et non de " ( double quotes)


Message édité par anapajari le 06-09-2006 à 14:31:54
Reply

Marsh Posté le 06-09-2006 à 21:21:41    

oui mais justement le NULL il ne faut pas de ' ' mais pour les chaînes de caracteres oui...sinon ça ne rentre pas dans la base ou alors c'est moi qui écrit mal ce code là :  
 
$groupe3_concert = isset($_POST['groupe3_concert']) ? '"' . mysql_real_escape_string($_POST['groupe3_concert']) . '"' : 'NULL';  
$site3_concert = isset($_POST['site3_conert']) ? '"' . mysql_real_escape_string($_POST['site3_concert']) . '"' : 'NULL';

Reply

Marsh Posté le 07-09-2006 à 09:51:00    

nan c'est ta requête qui est mal écrite !!!!!

Citation :

$req = mysql_query('UPDATE concert SET concert_date = "'.$_POST['date_concert'].'",....

Reply

Marsh Posté le 07-09-2006 à 10:02:09    

oui...et voilà ma requête  
 
UPDATE concert SET concert_date = 2005-10-31, concert_heure = 20h, concert_prix = gratuit, concert_ville = Valenciennes, concert_departement = 59, concert_lieu = Le Blue Note, concert_groupe1 = Low F (it), concert_site1 =http://www.low-f.com, concert_groupe2 = "Full Screen", concert_site2 =NULL, concert_groupe3 = "", concert_site3 =NULL, concert_guest = non, concert_flyer = WHERE concert_num = 6  
 
les chaînes de caractere n'ont pas de ' ' et donc rien ne s'insert dans l base...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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