2012-02-14 13 views
1

私はこのコードで、複数のMySQLのレコードを更新しようとしている:php mysql一括レコード更新?

<strong>Update multiple rows in mysql</strong><br> 

<?php 
$host="localhost"; // Host name 
$username=""; // Mysql username 
$password=""; // Mysql password 
$db_name="test"; // Database name 
$tbl_name="test_mysql"; // Table name 

// Connect to server and select databse. 
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

$sql="SELECT * FROM $tbl_name"; 
$result=mysql_query($sql); 

// Count table rows 
$count=mysql_num_rows($result); 
?> 
<table width="500" border="0" cellspacing="1" cellpadding="0"> 
<form name="form1" method="post" action=""> 
<tr> 
<td> 
<table width="500" border="0" cellspacing="1" cellpadding="0"> 


<tr> 
<td align="center"><strong>Id</strong></td> 
<td align="center"><strong>Name</strong></td> 
<td align="center"><strong>Lastname</strong></td> 
<td align="center"><strong>Email</strong></td> 
</tr> 
<?php 
while($rows=mysql_fetch_array($result)){ 
?> 
<tr> 
<td align="center"><? $id[]=$rows['id']; ?><? echo $rows['id']; ?></td> 
<td align="center"><input name="name[]" type="text" id="name" value="<? echo $rows['name']; ?>"></td> 
<td align="center"><input name="lastname[]" type="text" id="lastname" value="<? echo $rows['lastname']; ?>"></td> 
<td align="center"><input name="email[]" type="text" id="email" value="<? echo $rows['email']; ?>"></td> 
</tr> 
<?php 
} 
?> 
<tr> 
<td colspan="4" align="center"><input type="submit" name="Submit" value="Submit"></td> 
</tr> 
</table> 
</td> 
</tr> 
</form> 
</table> 
<?php 
// Check if button name "Submit" is active, do this 
if($Submit){ 
    for($i=0;$i<$count;$i++){ 
    $sql1="UPDATE $tbl_name 
      SET name='$name[$i]', 
       lastname='$lastname[$i]', 
       email='$email[$i]' 
       WHERE id='$id[$i]'"; 
    $result1=mysql_query($sql1); 
    } 
} 

if($result1){ 
header("location:update_multiple.php"); 
?> 

、それは、入力されたテキストボックスにDBからレコードを示しているが、私は新しいものと古いレコードを変更して送信したとき、何も起こりませんページは古い値でリフレッシュされます。

答えて

0

あなたが最初のビュー、およびちょうどその更新情報の後に、あなたが使用して、以前の結果のすべての時間

... 
// Connect to server and select databse. 
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

if($Submit){ 
for($i=0;$i<$count;$i++){ 
$sql1="UPDATE $tbl_name SET name='$name[$i]', lastname='$lastname[$i]', email='$email[$i]' WHERE id='$id[$i]'"; 
$result1=mysql_query($sql1 

); 
} 

$sql="SELECT * FROM $tbl_name"; 
$result=mysql_query($sql); 

// Count table rows 
... 
0

を閲覧ますのでので、選択の前に

移行更新コードを送信した場合、そのフォームを定義する必要が提出if($Submit){は、あなたが使用する必要があります

...フォームが送信されている場合に確定するための正しい方法ではありません。

if($_SERVER['REQUEST_METHOD'] == "POST")

あなたの提出された値を処理します。

注:....の値を表示する前に

をDBを更新し、必ず、約SQL Injection

1

あなたはフォームが$_POST['Submit']を使用して提出されたかどうかを確認する必要があります読んでてくださいする必要があります。 また、更新する各行を追跡するために、非表示の入力フィールドを使用することができます。

<input type="hidden" name="id[]" value="<?php echo $row['id']; ?>" /> 

その後、あなたの投稿を取り扱う際、あなたがこのような何か行う必要があります。

if(isset($_POST['Submit'])) { 
    $ids = $_POST['id']; 
    $names = $_POST['name']; 
    $lastnames = $_POST['lastname']; 
    $emails = $_POST['email']; 
    // 
    foreach($ids as $id) { 
     // update the record based on the id and supplied data 
    } 
} 

そしてもちろんの更新プロセスをデータベースから行を取得する前に実行する必要があります。言い換えれば、上記のコードは、スクリプトの最上部に配置する必要があります。前少なくとも、あなたがupdateコマンドを実行すると、すべてのmysql_query()

$sql="SELECT * FROM $tbl_name"; 
$result=mysql_query($sql); 
0

まず、何も返しません。あなたは以前のクエリによって変更された行数を取得するために、代わりにmysql_affected_rows使用することができ に:

http://php.net/manual/en/function.mysql-affected-rows.php

その後、あなたはまた、結果を表示する前に更新コードを動かすようないくつかのリファクタリング、それ以外header locationディレクティブウォンを行う必要がありますすでに出力をブラウザに送信していればうまく動作しません。

0

あなたは単一のコードで正しい名前を適用しましたか?

$sql1="UPDATE $tbl_name SET name='$name[$i]', lastname='$lastname[$i]', email='$email[$i]' WHERE id='$id[$i]'"; 

$sql1="UPDATE $tbl_name SET name='".$name[$i]."', lastname='".$lastname[$i]."', email='".$email[$i]."' WHERE id=$id[$i]"; 
への問い合わせ上記の変更