2

これがこれを置くのに適した領域であることを願っています。現在、私は楽しみのために小さなプロジェクトに取り組んでいると同時に、PHP を独学で学ぼうとしています。既存の SQL データベースに新しいデータを入力し、そのデータを検索し、そのデータを更新できるようにする、Web サイトに関連付けられた小さな「監査」ページを作成しました。これで、追加と検索は問題なく機能します。唯一の問題は、「更新」機能が機能しないことです...エラーは発生せず(実際には成功したと述べています)、テーブル内の情報を「実際に」更新しないことを除いて、すべて正常に機能します。

過去 2 ~ 3 日間、StackOverflow、Tutorial Guides、Forums を読み、自分でコードの一部をいじってみましたが、どれも「リモート」の回答すら提供していません。

関連する 2 つのページがあります。「update.php」ページと、フォームで「送信」を押した後にスクリプトを実行する「update_ac.php」ページです。コードは次のとおりです。

update.php

<?php
$host="localhost"; // Host name 
$username="member2"; // Mysql username 
$password="********"; // Mysql password 
$db_name="audits"; // Database name 
$tbl_name="data"; // Table name

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

// get value of id that sent from address bar
$id=$_GET['id'];

// Retrieve data from database 
$sql="SELECT * FROM $tbl_name WHERE id='$id'";
$result=mysql_query($sql);

$rows=mysql_fetch_array($result);
?>

<table width="400" border="0" cellspacing="1" cellpadding="0">
<tr>
<form name="form1" method="post" action="update_ac.php">
<td>
<table width="100%" border="0" cellspacing="1" cellpadding="0">
<tr>
<td>&nbsp;</td>
<td colspan="3"><strong>Update data in mysql</strong> </td>
</tr>
<tr>
<td align="center">&nbsp;</td>
<td align="center">&nbsp;</td>
<td align="center">&nbsp;</td>
<td align="center">&nbsp;</td>
<td align="center">&nbsp;</td>
<td align="center">&nbsp;</td> 
</tr>
<tr>
<td align="center">&nbsp;</td>
<td align="center"><strong>Barcode</strong></td>
<td align="center"><strong>Product</strong></td>
<td align="center"><strong>Category</strong></td>
<td align="center"><strong>Assigned</strong></td>
<td align="center"><strong>Notes</strong></td> 
</tr>
<tr>
<td>&nbsp;</td>
<td align="center">
<input name="barcode" type="text" id="barcode" value="<? echo $rows['barcode']; ?>">
</td>
<td align="center">
<input name="product" type="text" id="product" value="<? echo $rows['product']; ?>" size="15">
</td>
<td align="center">
<select name="category" id="category" value="<? echo $rows['category']; ?>">
<option value="Hardware">Hardware</option>
<option value="Software">Software</option>
<option value="Furniture">Furniture</option>
</select>
</td>  
<td align="center">
<select name="assigned" id="assigned" value="<? echo $rows['assigned']; ?>">
<option value="name1">Name 1</option>
<option value="name1">Name 2</option>
<option value="name1">Name 3</option>
<option value="name1">Name 4</option>
</select>
</td>
<td align="center">
<input name="notes" type="text" id="notes" value="<? echo $rows['notes']; ?>" size="15">
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>
<input name="id" type="hidden" id="id" value="<? echo $rows['id']; ?>">
</td>
<td align="center">
<input type="submit" name="Submit" value="Submit">
</td>
<td>&nbsp;</td>
</tr>
</table>
</td>
</form>
</tr>
</table>

<?php
// close connection 
mysql_close();
?>

update_ac.php

<?php
$host="localhost"; // Host name 
$username="member2"; // Mysql username 
$password="********"; // Mysql password 
$db_name="audits"; // Database name 
$tbl_name="data"; // Table name 

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

// update data in mysql database 
$sql="UPDATE $tbl_name SET barcode='$barcode', product='$product', category='$category', assigned='$assigned', notes='$notes' WHERE id='$id'";
$result=mysql_query($sql);

// if successfully updated. 
if($result){
echo "Successful";
echo "<BR>";
echo "<a href='assets.php'>View Changes</a>";
echo "<BR>";
echo "<a href='login-home.php'>Home</a>";
}

else {
echo "ERROR";
}

?> 

今、私はこれを古いサイトから引き出し、自分のニーズに合わせて「変更」しましたが、役に立ちませんでした。チュートリアル (データベースを含む) の完全なコピー/貼り付けも行いましたが、それでも機能しませんでした。これは、コードのどこかに問題があることを示しているようです。前もって感謝します。

4

2 に答える 2

1

これらの変数を設定する 2 番目のスクリプトには何も表示されません。フォームの値は自動的に変数に渡されません。$_POST 配列変数から値を取得する必要があります。そのため、最初のページのフォームに「post」メソッドが含まれています。次のようにします。

if (isset($_POST['barcode']) && $_POST['barcode'] != "") {
    $barcode = $_POST['barcode'];
} else {
    echo "'barcode' input is not set.";
}

if ステートメントは実際には必要ありませんが、トラブルシューティングや一般的なエラー防止には便利です。フィールドが設定されていて、空でないことを確認するだけです。

(配列について説明しますが、$rows 変数を使用したループに基づいて配列を既に把握しているようです。ヘルプが必要な場合はお知らせください。簡単な説明とチュートリアルへのリンクを提供します。 .)

于 2013-03-18T02:42:05.743 に答える