Renvoyer NULL avec UPDATE

Résolu/Fermé
isa-- Messages postés 77 Date d'inscription lundi 16 septembre 2013 Statut Membre Dernière intervention 11 mars 2020 - 21 nov. 2017 à 12:21
isa-- Messages postés 77 Date d'inscription lundi 16 septembre 2013 Statut Membre Dernière intervention 11 mars 2020 - 22 nov. 2017 à 18:18
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...


7 réponses

yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
21 nov. 2017 à 12:36
bonjour, montre nous le code qui prepare et fait l'UPDATE.
tu dois obtenir:
UPDATE retours SET action = NULL

 
1
isa-- Messages postés 77 Date d'inscription lundi 16 septembre 2013 Statut Membre Dernière intervention 11 mars 2020 1
21 nov. 2017 à 14:04
Je sais bien, mais c'est là mon problème puisque j'obtiens
UPDATE retours SET action = 'NULL'
0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
21 nov. 2017 à 12:34
bonjour, montre-nous le code qui prépare et fait l'UPDATE.
0
isa-- Messages postés 77 Date d'inscription lundi 16 septembre 2013 Statut Membre Dernière intervention 11 mars 2020 1
21 nov. 2017 à 12:57
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 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
21 nov. 2017 à 15:00
et en retirant les apostrophes autour de $action dans le code de la requête?
0
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 208
21 nov. 2017 à 13:02
La déclaration de la table accepte le Null pour ce champ ???
0
isa-- Messages postés 77 Date d'inscription lundi 16 septembre 2013 Statut Membre Dernière intervention 11 mars 2020 1
21 nov. 2017 à 14:04
Oui tout à fait. La valeur par défaut est NULL
0
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 208
Modifié le 21 nov. 2017 à 14:44
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 77 Date d'inscription lundi 16 septembre 2013 Statut Membre Dernière intervention 11 mars 2020 1 > Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019
21 nov. 2017 à 15:48
Si j'enlève les ' ', ma requète ne fonctionne pas lorsque $_POST["action"] n'est pas vide...
0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476 > isa-- Messages postés 77 Date d'inscription lundi 16 septembre 2013 Statut Membre Dernière intervention 11 mars 2020
21 nov. 2017 à 16:13
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 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
21 nov. 2017 à 15:18
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 77 Date d'inscription lundi 16 septembre 2013 Statut Membre Dernière intervention 11 mars 2020 1
21 nov. 2017 à 15:58
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 lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
21 nov. 2017 à 16:12
$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 77 Date d'inscription lundi 16 septembre 2013 Statut Membre Dernière intervention 11 mars 2020 1 > Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022
21 nov. 2017 à 16:57
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 77 Date d'inscription lundi 16 septembre 2013 Statut Membre Dernière intervention 11 mars 2020 1 > Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022
21 nov. 2017 à 17:15
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 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
21 nov. 2017 à 17:46
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 77 Date d'inscription lundi 16 septembre 2013 Statut Membre Dernière intervention 11 mars 2020 1 > jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024
21 nov. 2017 à 17:52
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 lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
22 nov. 2017 à 09:12
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 77 Date d'inscription lundi 16 septembre 2013 Statut Membre Dernière intervention 11 mars 2020 1
22 nov. 2017 à 18:18
Eh ben voilà... Simple et concis, ça marche...

Merci mille fois
Bonne soirée
0