2014-02-07 84 views
0

我有一個數據庫正在更新,當我更改一個症狀時,我想讓它將症狀嚴重性行中的所有值重置爲0,但是當我更新那一個症狀時,它將所有行設置爲0,而不是僅僅那一行。這是我的代碼,我在if語句中做了。如果你知道一個更簡單的方法,它將不勝感激。用PHP更新MySQL數據庫,將所有列設置爲0而不是1

我沒有使用WHERE,因爲我想要更改所有的id,而不僅僅是一個,它會隨時生成它們。我有20個症狀,僅在數據庫中更新ID 1。對不起,如果代碼糟透了,我很新。

如果我更新所有20一次,偉大的,但如果我只更新一個或兩個,他們都得到重新設置爲0。

mysql_select_db("$database", $conn) or die(mysql_error()); 

// if statements to delete this and that 

$db="$id"."_symp"; 

$sql2 = "SELECT * FROM $db"; 

$getit = mysql_query ($sql2, $conn); 

// I know I'm using outdated SQL, but it works for me, so I keep using it 
while($row = mysql_fetch_array($getit, MYSQL_ASSOC)) 
    { 
     //symptom 1 
     if ($_POST[symptom1] == $row[symptom1]) { 
      print " "; 
     } 
     else { 
      mysql_query("UPDATE $db SET symptom1_sev = '0'") OR die(mysql_error()); 
     } 

     //symptom 2 
     if ($_POST[symptom2] == $row[symptom2]) { 
      print " "; 
     } 
     else { 
      mysql_query("UPDATE $db SET symptom2_sev = '0'") OR die(mysql_error()); 
     } 

     //symptom 3 
     if ($_POST[symptom3] == $row[symptom3]) { 
      print " "; 
     } 
     else { 
      mysql_query("UPDATE $db SET symptom3_sev = '0'") OR die(mysql_error()); 
     } 
     //and so on to 20 

     //symptom 20 
     if ($_POST[symptom20] == $row[symptom20]) { 
      print " "; 
     } 
     else { 
      mysql_query("UPDATE $db SET symptom20_sev = '0'") OR die(mysql_error()); 
     } 

     //end sql stuff 
    } 

// update the database 
$sql="UPDATE $db SET 
     symptom1='$_POST[symptom1]', symptom2='$_POST[symptom2]', symptom3='$_POST[symptom3]',  symptom4='$_POST[symptom4]', symptom5='$_POST[symptom5]', symptom6='$_POST[symptom6]', symptom7='$_POST[symptom7]', symptom8='$_POST[symptom8]', symptom9='$_POST[symptom9]', symptom10='$_POST[symptom10]', symptom11='$_POST[symptom11]', symptom12='$_POST[symptom12]', symptom13='$_POST[symptom13]', symptom14='$_POST[symptom14]', symptom15='$_POST[symptom15]', symptom16='$_POST[symptom16]', symptom17='$_POST[symptom17]', symptom18='$_POST[symptom18]', symptom19='$_POST[symptom19]', symptom20='$_POST[symptom20]' 
    WHERE id=1" OR die(mysql_error()); 

mysql_select_db('$database'); 
$retval = mysql_query($sql, $conn); 
if(! $retval) 
    { 
     die('Could not update data: ' . mysql_error()); 
    } 
echo "Updated data successfully\n"; 

mysql_close($conn); 

感謝一大堆。對不起,我是這樣一個n00b。或者一個天秤,無論你喜歡給我打電話!

在此先感謝您的幫助。

+2

你的'UPDATE'需要'WHERE'子句。(限制操作哪些行)請參閱:http://dev.mysql.com/doc/refman/5.0/en/update.html – 2014-02-07 19:30:59

+0

如果這是一個新的應用程序,那麼您確實不應該使用大量過時的' mysql_query'接口。 – tadman

+0

除非每個$ _POST都等於每個對應的$行,否則您的條件全部返回false。 –

回答

1

您可以更新一步用下面的查詢所有症狀:

$symptom1 = mysql_real_escape_string($_POST['symptom1']); 
$symptom2 = mysql_real_escape_string($_POST['symptom2']); 
... 
$symptom20 = mysql_real_escape_string($_POST['symptom20']); 

$sql = " 
    UPDATE $db 
    SET symptom1_sev = IF(symptom1 = '$symptom1', 0, symptom1_sev), 
     symptom2_sev = IF(symptom2 = '$symptom2', 0, symptom2_sev), 
     ... 
     symptom20_sev = IF(symptom20 = '$symptom20', 0, symptom20_sev)"; 
+0

感謝您的快速回答。這將停止每個症狀* _sev的設置爲0?抱歉。我在學!我想我越搞砸,我越學! – sandorfalot

+0

謝謝Barmar,我使用上面的代碼,沒有錯誤。到現在爲止還挺好。 – sandorfalot

+0

它完美的作品,榮譽! – sandorfalot

0

我有一個數據庫,我更新了,當我改變一個症狀, 我希望它重置所有的症狀嚴重程度行中的值設置爲0, ,但是當我更新該症狀時,其將所有行設置爲0, 而不是該行。

你的代碼調用UPDATE沒有WHERE子句。 UPDATE而不是WHERE會每次更新整個表格中的每一行

我不使用WHERE,因爲我想要更改所有的ID,不僅僅是一個,而且它正在生成它們。 我有20個症狀,僅在數據庫中更新ID 1。 對不起,如果代碼很爛,我很新。

所以你要在一個更新20分?精細。您仍需要WHERE子句,只需在UPDATE語句中添加更多列即可。 (或考慮讓你的數據庫模式更有用)

PS - 如果這仍然聽起來不對,請考慮與我們共享您的數據庫模式(相關表的表名和列名/類型)。

每其中一個查詢是錯誤的,將改變每一行:隨時隨地

//symptom 1 
    if ($_POST[symptom1] == $row[symptom1]) { 
     print " "; 
    } 
    else { 
     mysql_query("UPDATE $db SET symptom1_sev = '0'") OR die(mysql_error()); 
    } 

最後,如果清除其他行嚴重性你想要的東西,那麼你永遠也不會實際設置的嚴重性,甚至爲當前行。 (所以爲什麼它不總是0?)

例如SET symptom1_sev = '$_POST[symptom1]'只是從來沒有發生。

+0

好的,謝謝。對不起,我總是混合行和列,總是有。我想要做什麼,如果症狀1發生了變化,我想清除所有症狀1_sev的條目,並將它們設置爲0,因爲它具有不同的症狀。但是,如果症狀2沒有改變,我不希望任何症狀2的變化,因爲有些條目需要保留。 但是,我想爲症狀1_sev的所有id條目設置爲0,並且我需要使用通配符來完成此操作,就像在其他表單上一樣,每次使用表單時都要添加到症狀1_sev中。 這有道理嗎?謝謝你。 – sandorfalot

+0

對不起,我是這樣的一個旋鈕,我只是在玩耍。我很新,在這裏我找到了很多很好的答案。我以爲我擁有它。我只是在試驗,我自學了一些基礎知識從大學的SQL服務器.. 4年前..我有一個計算機工程師的教育,我不是一個編碼器。如果上面的信息沒有幫助,我會發布更多關於數據庫的信息,並且我願意改變它。謝謝。 (用戶輸入並且可以編輯症狀,並且在另一種形式上,他們可以增加他們對於圖表的嚴重程度) – sandorfalot

+0

@ user3058860 aha!嚴重程度在不同的頁面上。這解釋了它。對不起,如果我是簡潔的,我只是想弄清楚各行和列以及表格代表什麼。不知道這一點,很難給你提供有用的建議。是一種「每種疾病」?桌子上只有1排嗎?是「每個病人」的排?只是會發生什麼變化,會使我們從症狀表的一行移動到另一行? (並且你是否考慮過使用關係來允許多個症狀用不同的行代替不同的硬編號列)? – 2014-02-10 19:29:54