2012-01-09 11 views
25

Quello che segue è uno snippet del mio modulo HTML che estrae le opzioni dalle righe della tabella di conseguenza.È possibile avere un valore SELECT/OPTION HTML come NULL utilizzando PHP?

Quello che voglio fare è che il primo valore di opzione sia NULL, quindi quando non viene effettuata alcuna scelta, NULL viene inserito quando il modulo viene inviato al database.

<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> 

È possibile? O qualcuno potrebbe suggerire un modo più semplice/migliore per farlo?

Grazie

Update: Grazie per la risposta, sto usando il metodo descritto di seguito per convertirlo a NULL.

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

Tuttavia, quando si tenta di utilizzare questo valore NULL con la seguente query, non funziona.

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

so che deve essere invece location_id=NULL ma non sanno come fare questo ...

Aggiornamento 2: ecco come funzionano le mie domande:

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()); 

risposta

27

No, I valori POST/GET non sono mai null. Il meglio che possono essere è una stringa vuota, che è possibile convertire in null/'NULL'.

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

Davvero? 'Var_dump ($ _ GET [ 'missingKey']); // NULL' http://codepad.org/2s7jCBbc – AlienWebguy

+0

Grazie all'inganno - Ho usato la tua risposta, ma ho ancora problemi nel trovarla a destra NULL - se mi vedi aggiornare. Qualche idea? – Bernard

+0

@Alien Questo non è un valore POST/GET, è un valore * inesistente *. – deceze

3

Tutto ciò che serve è un controllo sul lato post delle cose.

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

Quel è pericoloso. Cosa succede se 'type_id = 0' è un ID valido? – AlienWebguy

+0

È vero. In realtà, suggerirei un approccio diverso ma realisticamente molto probabilmente sarà troppo problematico per il richiedente domanda. – Jason

0

Sì, è possibile. Devi fare qualcosa di simile:

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

Verifica se la variabile $_POST['type_id'] ha un valore vuoto. Se sì, assegna a NULL una stringa. In caso contrario, assegna il valore con 'ad esso per la notazione SQL

+0

Errore di sintassi PHP: imprevisto ']' riga 3 – Jason

+0

thx, per il suggerimento. l'ho risolto –

0

ecco perché non assomigliano affatto ai valori NULL nel database.
Spero che lo stiate avendo per un motivo.

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 
Problemi correlati