Formulaire php Valeur envoyer NULL et non vide - PHP - Programmation
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 ( 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.
Marsh Posté le 05-09-2006 à 16:20:46
oups...
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']);
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 ^^
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).
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...
Marsh Posté le 05-09-2006 à 17:19:11
exemple sur un champs:
Code :
|
Et ensuite tu te sers de $date_concert dans ta requête.
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...
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
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
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 !
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?
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
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
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;
}
Marsh Posté le 05-09-2006 à 18:59:28
Sauf que c'est la chaîne "NULL" à mettre dans le champs...
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
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;?>
Marsh Posté le 05-09-2006 à 19:15:28
ça non plus de fonctionne pas
if (empty($_POST['groupe3_concert']))
{
$groupe3_concert = NULL;
}
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...
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'; |
Donc tu mets des quote quand y'a une valeur, et sinon pouet
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.
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
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 ?
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.',
Marsh Posté le 06-09-2006 à 11:55:18
après ton
Code :
|
est-ce que tu peux faire
Code :
|
et nous donner ce qui est affiché?
Marsh Posté le 06-09-2006 à 12:59:16
effectivement ^^ mais ça modifie bien mes données...
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 :
|
Change le en:
Code :
|
et dis nous ce que cela affiche!
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
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
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 :
|
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)
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';
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'].'",.... |
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...
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