2011-12-30 14 views
2

ユーザーがデータを更新できるようにhtmlフォームを作成しました。しかし、入力データ(配列値)はPHPのSUBMITに渡されないので、SUBMITをクリックしてもテーブルは更新されません。スクリプトのSUBMIT部分に入り、SETを特定の数字またはテキストに変更すると、テーブルが更新されます。つまり、html入力データ配列からの値が適切にスクリプトのSUBMIT部分に渡されていないことを意味します。どんな助けもありがたい。HTML入力フォームの値がPHPに渡されないsubmit

<?php 
//Mysql connection and initial select query placed above 
?> 

<table width="400" border="0" cellspacing="1" cellpadding="0"> 
<form name="Contacts" method="post" action=""> 
<tr> 
<td> 
<table width="400" 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"><?php $id[]=$rows['id']; ?><?php echo $rows['id']; ?></td> 
<td align="center"><input name="name[]" type="text" id="name" value="<?php echo $rows['name']; ?>"></td> 
<td align="center"><input name="lastname[]" type="text" id="lastname" value="<?php echo $rows['lastname']; ?>"></td> 
<td align="center"><input name="email[]" type="text" id="email" value="<?php 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(isset($_POST['Submit'])){ 
$id=$_POST['id']; 
$name=$_POST['name']; 
for($i=0;$i<$num;$i++){ 
$sql1="UPDATE contacts SET name= ".$name[$i]." WHERE id= ".$id[$i].""; 
$result1=mysql_query($sql1); 
} 
} 

if($result1){ 
header("location:updated.php"); 
} 
mysql_close(); 
?> 

ありがとうございます!

+0

ループを使用してHTMLを作成していて、入力に「id」があります。 whileループが2回以上実行されると、IDは重複します – Mikhail

答えて

1

SQL文の$name[$i]の前後に一重引用符がありません。 idが必ずしも数値でない場合は、$id[$i]を一重引用符で囲む必要があります。

$sql1="UPDATE contacts SET name= '".$name[$i]."' WHERE id= ".$id[$i].""; 
//------------------------------^^^-----------^^^ 

あなたmysql_query()呼び出しでチェックするいくつかのエラーは、これがより明確になるだろう。下記参照。

そして、これらをSQLインジェクションに対してフィルタリングしてから、クエリに渡す必要があります。

for($i=0;$i<$num;$i++) { 
    // Call mysql_real_escape_string() to sanitize these... 
    $id[$i] = mysql_real_escape_string($id[$i]); 
    $name[$i] = mysql_real_escape_string($name[$i]); 

    $sql1="UPDATE contacts SET name= '".$name[$i]."' WHERE id= ".$id[$i].""; 

    $result1 = mysql_query($sql1); 
    // Error checking: 
    if (!$result1) { 
    echo mysql_error(); 
    } 
} 
+0

問題が修正されました。ご協力いただきありがとうございます。私は、後でそれを必要とするかもしれない人のために、今日後で最後のスクリプトを投稿します。 –

0

私の間違い。私は十分なフォームを見ていない。ここに配列を割り当てています。 PHPはここ

をデバッグ - するのは簡単です:

 $id=$_POST['id']; 
    $name=$_POST['name']; 

これらの行は、あなたの変数の内容をチェックアウトするのvar_dump($のID)またはますprint_r($ ID)を使用した後。

+0

問題が修正されました。ご協力いただきありがとうございます。私は、後でそれを必要とするかもしれない人のために、今日後で最後のスクリプトを投稿します。 –

0

お返事ありがとうございました。推奨される変更を実装した後、PHP 5.2を使用した最終的な作業スクリプトは以下のようになります(必要な場合は誰でも)。

<?php 
    Mysql connection, initial query and then close Mysql connection 
    ?> 

<table width="500" border="0" cellspacing="1" cellpadding="0"> 
<form name="Contacts" 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"><?php $id[]=$rows['id']; ?><?php echo $rows['id']; ?></td> 
<td align="center"><input name="name[]" type="text" id="name" value="<?php echo $rows['name']; ?>"></td> 
<td align="center"><input name="lastname[]" type="text" id="lastname" value="<?php echo $rows['lastname']; ?>"></td> 
<td align="center"><input name="email[]" type="text" id="email" value="<?php echo $rows['email']; ?>"></td> 
</tr> 
<?php 
} 
?> 
<tr> 
<td height="75" colspan="4" align="center"><input type="submit" name="Submit" value=" save for later "></td> 
</tr> 
</table> 
</td> 
</tr> 
</form> 
</table> 

<?php 
// Check if button name "Submit" is active, do this 
if(isset($_POST['Submit'])){ 
mysql_connect($dbhost,$username,$password); 
@mysql_select_db($database) or die("Unable to select database"); 

$name=$_POST['name']; 

for($i=0;$i<$num;$i++) { 

// sanitize... 
    $id[$i] = mysql_real_escape_string($id[$i]); 
    $name[$i] = mysql_real_escape_string($name[$i]); 

    $sql1="UPDATE test_mysql SET name= '".$name[$i]."' WHERE id= ".$id[$i].""; 

    $result1 = mysql_query($sql1); 
    // Error checking: 
    if (!$result1) { 
    echo mysql_error(); 
    } 
} 
if($result1){ 
header("location:updated.php"); 
} 
} 

mysql_close(); 
?> 
関連する問題