Renvoyer NULL avec UPDATE

Résolu
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

  1. 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,
    1. Eh ben voilà... Simple et concis, ça marche...

      Merci mille fois
      Bonne soirée
  2. 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
    1. $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
    2. @PitetJe pense que là on tient le bon bout...
      Je teste et je dis si ça marche

      Merci mille fois
    3. @PitetCa 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 ?
    4. Modérateur
      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 ??
    5. @jordane45Parce 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
  3. Contributeur
    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>";
    1. La déclaration de la table accepte le Null pour ce champ ???
      1. Oui tout à fait. La valeur par défaut est NULL
      2. essaie peut être avec la fonction isnull

        peut être trop pressé 'NULL' est différent de NULL
        enlève les '' ...
      3. @FallentreeSi j'enlève les ' ', ma requète ne fonctionne pas lorsque $_POST["action"] n'est pas vide...
      4. Contributeur
        @isa--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?
    2. 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'";

      1. Contributeur
        et en retirant les apostrophes autour de $action dans le code de la requête?
    3. Contributeur
      bonjour, montre nous le code qui prepare et fait l'UPDATE.
      tu dois obtenir:
      UPDATE retours SET action = NULL

       
      1. Je sais bien, mais c'est là mon problème puisque j'obtiens
        UPDATE retours SET action = 'NULL'
    4. Contributeur
      bonjour, montre-nous le code qui prépare et fait l'UPDATE.