2016-04-27 178 views
1

所以我試圖讓用戶更新此表,但如果該字段留空,我想數據被單獨留下,而不是將其更改爲空白字段或空,任何想法?需要保持空白字段與表

<? 
    elseif ($Code == "U") 
    { 
    $sql = "UPDATE movieDATA SET Name = '$Name', Genre = '$Genre', Starring = '$Starring', Year = '$Year', BoxOffice = '$BoxOffice' where IDNO = '$idno'"; 
    $result= mysqli_query($link,$sql) or die(mysqli_error($link)); 
    $showresult = mysqli_query($link,"SELECT * from movieDATA") or die("Invalid query: " . mysqli_error($link)); 
    while ($row = mysqli_fetch_array($showresult)) 
     { 
     echo ("<br> ID = ". $row["IDNO"] . "<br> NAME = " . $row["Name"] . "<br>"); 
     echo("Genre = " . $row["Genre"] . "<br> Starring = " . $row["Starring"] . "<br>"); 
     echo("Year = " . $row["Year"] . "<br> Box Office = " . $row["BoxOffice"] . "<br>"); 
     } 
    } 
    ?> 
+0

不清楚你的問題。請描述或給出慾望輸出。 – RJParikh

+0

我正在更新一個表格,當用戶將一個字段留空時,代碼會將表格更新爲一個空白字段,我希望表格能夠保留它所擁有的數據,而不會被空白覆蓋! –

回答

1
$fields = array(); // Take a blank array of fields and values. 
$Name = trim($Name); // Trim the variable, user may add only spaces 
$Genre = trim($Genre); // Do this for all variables. 
$Starring = trim($Starring); 
$Year = trim($Year); 
$BoxOffice = trim($BoxOffice); 
if (! empty($Name)) { // If user has filled the field, append to array. 
$fields[] = "Name = '$Name'"; 
} 
if (! empty($Genre)) { 
$fields[] = "Name = '$Genre'"; 
} 
if (! empty($Starring)) { 
$fields[] = "Name = '$Starring'"; 
} 
if (! empty($Year)) { 
$fields[] = "Name = '$Year'"; 
} 
if (! empty($BoxOffice)) { 
$fields[] = "Name = '$BoxOffice'"; 
} 
if (! empty($fields)) { // If the array is not empty, go for Query. 
$sql = "UPDATE movieDATA SET "; // If user has not added any field value, 
$sql .= implode(', ', $fields); // no SQL Query will be fired. 
$sql .= " WHERE IDNO = '$idno'"; 
} 

您的需求:

不更新其用戶領域已空白。

解決方案:

  • 添加如果檢查條件,如果每場被填滿。
+0

明白了。謝謝! –

1

一種方式做到這一點:

$q_set = []; 

if (!empty($Name)) { 
    $q_set []= "Name = '$Name'"; 
} 
if (!empty($Genre)) { 
    $q_set []= "Genre = '$Genre'"; 
} 
/* ... */ 
if (!empty($q_set)) { 
    $sql = "UPDATE movieDATA SET " . implode(',', $q_set) 
    . " WHERE IDNO = '$idno'"; 
} 

注意,這兩個變量傳遞到SQL should be escaped

+0

這似乎是專業的事情!然而,這是作業,我可以使用它。任何方式可以用更簡單的代碼來完成? –

+0

@FagnerSchuindtCaetano,你可以在一行中收集它們:'foreach(['Name','Genre']爲$ f)isset($ {$ f})和$ set [] =「$ f ='」。 $ {$ f}。 「'」;'。但這是一個非常糟糕的代碼,因爲它充滿了假設。代碼應該易於閱讀,但不一定簡短。 –