2017-05-26 42 views
0

因此,如果post收到的值爲null,我試圖在表格行中顯示某個值。 到目前爲止,我得到這個作爲我小的數據庫(它在西班牙語):如果接收值爲null,則插入值

DROP DATABASE IF EXISTS fantasmas; 
CREATE DATABASE fantasmas; 
USE fantasmas; 

CREATE TABLE tipos(
ID tinyint(2) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
TIPO VARCHAR(45) UNIQUE 
); 

CREATE TABLE datos(
ID tinyint(2) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
NOMBRE VARCHAR(50) NOT NULL, 
ARCHIVO VARCHAR(30), 
AVISTAMIENTO VARCHAR(50) NOT NULL, 
LOCALIDAD VARCHAR(50) NOT NULL, 
INFO VARCHAR(200), 
FKTIPOS TINYINT(2) UNSIGNED, 
FOREIGN KEY (FKTIPOS) REFERENCES tipos(ID) 
); 

INSERT INTO tipos (TIPO) VALUES('Vapor'), ('Forma Animal'), ('Forma Humanoide'), ('Dios/Semidios'),('No Catalogado'); 

這些插入值到「tipos」,然後顯示在選擇這樣的:

<select name="tipos"> 
    <option value="sintipo">---------</option> 
     <?php 
      while($row = mysqli_fetch_assoc($rta)): 
      $tipo = $row['TIPO']; 
      echo '<option value="'.$row['ID'].'">'.$tipo.'</option>'; 
      endwhile; 
     ?> 
</select> 

後,當形式發送,插圖表,看起來是這樣的,如果有人選擇「------」選項,它分配空值:

$query = "INSERT INTO datos SET NOMBRE='$nombre', AVISTAMIENTO='$lugar', LOCALIDAD='$localidad', INFO='$info', ARCHIVO='$ruta', FKTIPOS = NULLIF('$tipo','sintipo')"; 

所有填寫表單中的數據,然後顯示在不同的租一張桌子的行。 我現在需要的是,如果有人選擇「------」選項,屏幕顯示的值是「沒有目錄」 到目前爲止,我還沒有能夠做到這一點。 任何人都可以幫助我嗎?

+0

在最後一個查詢$ query中,你不應該把$ tipo包裝在單引號內,比如'$ tipo',沒有它$ tipo,它應該工作! –

+0

請sql在您的查詢中跳過您的$ params,所顯示的代碼很容易出現SQL注入,這是一個非常大的風險 – Roberto

回答

0

在插入之前,你可以在PHP端進行空檢查。或者...您可以使用SQL內建的ISNULL()

您還可以在SQL中使用CASE語句來跨多個值完成此行爲。

我知道這不是最長的答案,但它應該工作。

0

這是你要求的嗎?

$query = "INSERT INTO datos SET NOMBRE='$nombre', AVISTAMIENTO='$lugar', LOCALIDAD='$localidad', INFO='$info', ARCHIVO='$ruta', FKTIPOS = " . ($tipo == 'sintipo' ? 'NULL' : "'$tipo'"); 

請注意,您的代碼非常髒,您甚至不會過濾並逃避收入值,正如我猜測的那樣。嘗試谷歌php mysql escape values