web-dev-qa-db-fra.com

Est-il possible d'avoir une valeur HTML SELECT/OPTION égale à NULL avec PHP?

Ce qui suit est un extrait de mon formulaire HTML qui extrait les options des lignes du tableau en conséquence.

Ce que je veux faire, c'est que la valeur de la première option soit NULL. Par conséquent, si aucun choix n'est fait, NULL est entré lorsque le formulaire est soumis à la base de données.

    <td>Type</td>
    <td>:</td>
    <td><select name="type_id" id="type_id" class="form">
    <option value=""></option>
        <?php 
            $sql = mysql_query("SELECT type_id, type FROM $tbl_add_type") or die(mysql_error());
            while ($row = mysql_fetch_array($sql))
                {
                    echo "<option value=".$row['type_id'].">" . $row['type'] . "</option>";
                }
        ?>
    </select>*</td>

Est-ce possible? Ou quelqu'un pourrait-il suggérer un moyen plus facile/meilleur de le faire?

Merci

Mise à jour: Merci pour la réponse, j'utilise la méthode détaillée ci-dessous pour le convertir en NULL.

if ($_POST['location_id'] === '')
                    {
                        $_POST['location_id'] = 'NULL';
                    }

Cependant, lorsque vous essayez d'utiliser cette valeur NULL avec la requête suivante, cela ne fonctionne pas.

UPDATE addresses SET location_id='NULL' WHERE ipid = '4791'

Je sais que cela doit plutôt être location_id=NULL mais je ne sais pas comment faire cela ...

Mise à jour 2: voici comment mes requêtes fonctionnent:

if ($_POST['location_id'] === '')
{
$_POST['location_id'] = 'NULL'; // or 'NULL' for SQL
}

$notes=isset($_POST['notes']) ? mysql_real_escape_string($_POST['notes']) : '';
//$location_id=isset($_POST['location_id']) ? mysql_real_escape_string($_POST['location_id']) : '';
$ipid=isset($_POST['ipid']) ? mysql_real_escape_string($_POST['ipid']) : '';


$sql="UPDATE addresses 
    SET notes='$notes', location_id='$location_id'
    WHERE ipid = '$ipid'";


mysql_query($sql) or die(mysql_error());
28
Bernard

Non, les valeurs POST/GET ne sont jamais null. Le meilleur qu'ils peuvent être est une chaîne vide, que vous pouvez convertir en null/'NULL'.

if ($_POST['value'] === '') {
    $_POST['value'] = null; // or 'NULL' for SQL
}
30
deceze

Tout ce dont vous avez besoin est un contrôle du côté des choses. 

<?php 
if(empty($_REQUEST['type_id']) && $_REQUEST['type_id']!=0) $_REQUEST['type_id'] = null;
3
Jason

En php 7, vous pouvez faire:

$_POST['value'] ?? null;

Si la valeur est égale à '' comme indiqué dans d'autres réponses, il vous enverra également la valeur null.

Oui c'est possible. Vous devez faire quelque chose comme ça:

if(isset($_POST['submit']))
{
  $type_id = ($_POST['type_id'] == '' ? "null" : "'".$_POST['type_id']."'");
  $sql = "INSERT INTO `table` (`type_id`) VALUES (".$type_id.")";
}

Il vérifie si la variable $_POST['type_id'] a une valeur vide . Si oui, il lui affecte la chaîne NULL . Sinon, il lui attribue la valeur 'pour la notation SQL

0
Michael Walter

c’est pourquoi je n’aime pas du tout les valeurs NULL dans la base de données.
J'espère que vous l'avez pour une raison.

if ($_POST['location_id'] === '') {
  $location_id = 'NULL';
} else {
  $location_id = "'".$_POST['location_id']."'";
}
$notes = mysql_real_escape_string($_POST['notes']);
$ipid  = mysql_real_escape_string($_POST['ipid']);

$sql="UPDATE addresses 
    SET notes='$notes', location_id=$location_id
    WHERE ipid = '$ipid'";

echo $sql; //to see different queries this code produces
// and difference between NULL and 'NULL' in the query
0
Your Common Sense