2015-12-19 154 views
0

對數據庫中的每一行進行單獨更新時,我想更新數據庫,但每次腳本運行時,最後一行的值都更新爲整個表。只有這些值必須相應地進行更改。使用<input type = number>

$conn=mysql_connect('localhost','root',''); 
$db=mysql_select_db('shaggy'); 

$q = "SELECT * FROM `automata`"; 
$re=mysql_query($q)or die(mysql_error()); 
$num=mysql_num_rows($re); 

從那裏的行數提取

$i=0; 
while($num>$i) 
{ 
$bupin=mysql_result($re,$i,'bupin'); 
$name=mysql_result($re,$i,'name'); 
$q1=mysql_result($re,$i,'q1'); 
$q2=mysql_result($re,$i,'q2'); 
$mst1=mysql_result($re,$i,'mst1'); 
$mst2=mysql_result($re,$i,'mst2'); 
$est=mysql_result($re,$i,'est'); 

      echo "<tr> 
     <td> <b>$bupin</b> </td> 
     <td><b> $name </b></td> 

     <td><input type='number' min='00' max='30' value='$q1' name='f1' ></td> 

     <td><input type='number' min='00' max='30' value='$q2' name='f2' ></td> 

     <td><input type='number' min='00' max='50' value='$mst1' name='f3' ></td> 

     <td><input type='number' min='00' max='50' value='$mst2' name='f4' ></td> 

     <td><input type='number' min='00' max='100' value='$est' name='f5' ></td> 
      </tr>"; 

$i++; 
} 

這個腳本正在顯示從數據庫表中的所有值和數量的選項的幫助下,SQL連接也可以是用戶想要改變。但是在更改值並提交它時,所有表都被分配了最後一行更新的值,並且不會使用它們各自的值進行更新。 的更新用的代碼如下:

$conn=mysql_connect('localhost','root',''); 
$db=mysql_select_db('shaggy'); 

$q = "SELECT * FROM `automata`"; 
$re=mysql_query($q)or die(mysql_error()); 
$num=mysql_num_rows($re); 

$i=0; 
while($num>$i) 
{ 
    $a=$_POST['f1']; 
    $b=$_POST['f2']; 
$c=$_POST['f3']; 
$d=$_POST['f4']; 
$e=$_POST['f5']; 
$nbupin=mysql_result($re,$i,'bupin'); 
$nname=mysql_result($re,$i,'name'); 
mysql_query("UPDATE automata SET q1=$a, q2=$b, mst1=$c, mst2=$d, est=$e WHERE bupin='$nbupin'"); 
$i++; 
} 
echo "Success"; 
+0

因爲你是在一個循環中建立你的'單曲,最後一個將會覆蓋所有其他的值。你應該用一個配對的鍵作爲一個數組來完成,然後當你在後端執行循環時使用該鍵。 – Sean

+0

哪裏是主鍵?你怎麼知道哪一行更新?順便說一句,'mysql'已被棄用,開始使用'mysqli'或'PDO'。另外我建議使用數組作爲後期,索引作爲主鍵。 – Jigar

回答

3

做到這一點,最簡單的方法就是讓你的<input> s轉換陣列,與$bupin爲關鍵。

$i=0; 
while($num>$i) 
{ 
    $bupin=mysql_result($re,$i,'bupin'); 
    $name=mysql_result($re,$i,'name'); 
    $q1=mysql_result($re,$i,'q1'); 
    $q2=mysql_result($re,$i,'q2'); 
    $mst1=mysql_result($re,$i,'mst1'); 
    $mst2=mysql_result($re,$i,'mst2'); 
    $est=mysql_result($re,$i,'est'); 

      echo "<tr> 
     <td> <b>$bupin</b> </td> 
     <td><b> $name </b></td> 

     <td><input type='number' min='00' max='30' value='$q1' name='f1[$bupin]' ></td> 

     <td><input type='number' min='00' max='30' value='$q2' name='f2[$bupin]' ></td> 

     <td><input type='number' min='00' max='50' value='$mst1' name='f3[$bupin]' ></td> 

     <td><input type='number' min='00' max='50' value='$mst2' name='f4[$bupin]' ></td> 

     <td><input type='number' min='00' max='100' value='$est' name='f5[$bupin]' ></td> 
      </tr>"; 

$i++; 
} 

現在,在表單提交上,您可以在循環中使用該$bupin來更新表格。

$conn=mysql_connect('localhost','root',''); 
$db=mysql_select_db('shaggy'); 

foreach($_POST['f1'] as $bupin => $value) 
{ 
    $a=$_POST['f1'][$bupin]; 
    $b=$_POST['f2'][$bupin]; 
    $c=$_POST['f3'][$bupin]; 
    $d=$_POST['f4'][$bupin]; 
    $e=$_POST['f5'][$bupin]; 

    mysql_query("UPDATE automata SET q1=$a, q2=$b, mst1=$c, mst2=$d, est=$e WHERE bupin='$bupin'"); 
} 
echo "Success"; 

注意,你也應該更新您的mysql_代碼要麼mysqli_PDO,也瞭解SQL注入 - 見How can I prevent SQL-injection in PHP?