Renvoyer NULL avec UPDATE

Résolu
isa-- Messages postés 82 Date d'inscription   Statut Membre Dernière intervention   -  
isa-- Messages postés 82 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

J'ai dans ma base un champ "action" dont la valeur par défaut est NULL
Pas de soucis pour les INSERT
Par contre, si je fais un UPDATE, je n'arrive pas à renvoyer la valeur NULL pour ce champ.
Le mieux que j'aie pu obtenir est un UPDATE `retours` SET `action` = 'NULL' ce qui fait entrer dans ma base la chaine de caratères "NULL" est non pas NULL.

Voici mon code pour la variable $action :

$action=$_POST["action"];
$action = $action == '' ? 'NULL':"'".mysql_real_escape_string($action)."'";


Merci d'avance pour votre aide, je crois que je patouille avec la fonction mysql_real_escape_string...


A voir également:

7 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour, montre nous le code qui prepare et fait l'UPDATE.
tu dois obtenir:
UPDATE retours SET action = NULL

 
1
isa-- Messages postés 82 Date d'inscription   Statut Membre Dernière intervention   1
 
Je sais bien, mais c'est là mon problème puisque j'obtiens
UPDATE retours SET action = 'NULL'
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour, montre-nous le code qui prépare et fait l'UPDATE.
0
isa-- Messages postés 82 Date d'inscription   Statut Membre Dernière intervention   1
 
Merci de ta réponse

Le code pour préparer est dans mon premier message.
Voici celui de la requête :

$req="UPDATE `retours` SET `lr` = '$lr', `cial` = '$cial', `date` = '$date1', `client` = '$client', `dpt` = '$dpt', "
."`ref` = '$ref',`nolot` = '$nolot',`qte` = '$qte',`longu` = '$longu',`larg` = '$larg',`motif` = '$motif', "
." `action` = '$action',`matiere` = '$matiere',`msno` = '$msno',`traite` = '$traite',`nofacture` = '$nofacture',`erreur` = '$erreur',`nomerreur` = '$nomerreur', "
."`obs` = '$obs',`reprise` = '$reprise',`cloture` = '$cloture',`coutmatiere` = '$coutmatiere',`coutport` = '$coutport', "
."`montantavoir` = '$montantavoir',`noavoir` = '$noavoir',`nodossier` = '$nodossier', `dateavoir` = '$dateavoir',`montantprejudice` = '$montantprejudice',"
." `montantmatiere` = '$montantmatiere',`montantfourn` = '$montantfourn',`saisie` = '$saisie'"
." WHERE `id` = '$get'";

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
et en retirant les apostrophes autour de $action dans le code de la requête?
0
Fallentree Messages postés 2309 Date d'inscription   Statut Membre Dernière intervention   209
 
La déclaration de la table accepte le Null pour ce champ ???
0
isa-- Messages postés 82 Date d'inscription   Statut Membre Dernière intervention   1
 
Oui tout à fait. La valeur par défaut est NULL
0
Fallentree Messages postés 2309 Date d'inscription   Statut Membre Dernière intervention   209
 
essaie peut être avec la fonction isnull

peut être trop pressé 'NULL' est différent de NULL
enlève les '' ...
0
isa-- Messages postés 82 Date d'inscription   Statut Membre Dernière intervention   1 > Fallentree Messages postés 2309 Date d'inscription   Statut Membre Dernière intervention  
 
Si j'enlève les ' ', ma requète ne fonctionne pas lorsque $_POST["action"] n'est pas vide...
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > isa-- Messages postés 82 Date d'inscription   Statut Membre Dernière intervention  
 
si tu enlèves les '', ta requete fonctionne-t-elle quand $_POST["action"] est vide?
"ma requête ne fonctionne pas": message d'erreur, résultat inattendu?
peux-tu partager ce que contiennent $action et $req quand $_POST["action"] n'est pas vide?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
tu peux tester avec cet exemple pour comprendre:
$action1='NULL';
$action2="'"."action"."'";

echo "<br>";
echo $action1;
echo "<br>";
echo $action2;
echo "<br>";
echo "'$action1'";
echo "<br>";
echo "'$action2'";
echo "<br>";
0
isa-- Messages postés 82 Date d'inscription   Statut Membre Dernière intervention   1
 
Je reprends un peu ma demande pour que ce soit plus clair :

Requete : UPDATE `retours` SET `action` = '$action'


Je récupère $action par $action=$_POST["action"] 

puis
$action = $action == '' ? 'NULL':"'".mysql_real_escape_string($action)."'";


Si $action est vide, je veux que le champ action de ma bdd soit NULL et non pas vide.

Ce qui n'est pas le cas actuellement car ce que je génère est :
UPDATE retours SET action = 'NULL'

à la place de
UPDATE retours SET action = NULL


La question est donc comment faire dégager les '' de ma requête si $action est vide ?

Je pense que le problème vient de ma fonction mysql_real_escape_string($action) que je ne maitrise pas.
C'est là que j'ai besoin d'aide
Merci d'avance
0
Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   527
 
$action = $action == '' ? 'NULL' : "'" . mysql_real_escape_string($action) . "'";

$req = 'UPDATE `retours` SET `action` = ' . $action;


Si $action vaut 'toto', $req vaudra :
UPDATE `retours` SET `action` = 'toto'


Si $action est une chaine vide, $req vaudra :
UPDATE `retours` SET `action` = NULL
0
isa-- Messages postés 82 Date d'inscription   Statut Membre Dernière intervention   1 > Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention  
 
Je pense que là on tient le bon bout...
Je teste et je dis si ça marche

Merci mille fois
0
isa-- Messages postés 82 Date d'inscription   Statut Membre Dernière intervention   1 > Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention  
 
Ca ne marche pas avec
$req = 'UPDATE `retours` SET `action` = ' . $action;

Ca marche à priori avec :
$req = 'UPDATE `retours` SET `action` =  $action;

Cela te semble - t il cohérent ?
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

Petite remarque en passant .....
Dans tes précédents messages... tu utilisais mysqli_* ....
Alors comment se fait-il que là .. tu aies des instruction mysql_* qui trainent ??
0
isa-- Messages postés 82 Date d'inscription   Statut Membre Dernière intervention   1 > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
Parce que je n'ai déjà pas compris grand chose à la fonction mysql_real_escape_string, alors la fonction mysqli_real_escape_string encore moins

Les explications du manuel php sont obscures pour moi
0
Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   527
 
Salut,

Un exemple simple auquel devrait ressembler ton code :
<?php

if (isset($_POST['action'])) {
	$action = empty($_POST['action']) ? 'NULL' : "'" . $_POST['action'] . "'"; 
	//$action = empty($_POST['action']) ? 'NULL' : "'" . mysqli_real_escape_string($_POST['action']) . "'"; 
	$req = 'UPDATE `retours` SET `action` = ' . $action;
	var_dump($req);
}

?>

<form method="post" action="">
	<input type="text" name="action">
	<input type="submit">
</form>


Bonne journée,
0
isa-- Messages postés 82 Date d'inscription   Statut Membre Dernière intervention   1
 
Eh ben voilà... Simple et concis, ça marche...

Merci mille fois
Bonne soirée
0