html-PHPを使用してAccessデータベースからデータをプルするPHP警告:odbc_fetch_array():4は、91行目のEditRecord.phpの有効なODBC結果リソースではありません
ユーザーがPHPを使用してMSAccessデータベースの行を表示、削除、編集できるように連携する一連のWebページを作成しようとしています。
Membership.phpは、Accessデータベース内のメンバーの名前のリストを表示します。それらの名前はハイパーリンクでもあり、クリックすると、ユーザーを別のページEditRecord.phpに移動します。このページでは、Membership.phpで名前がクリックされたメンバーに関するすべての情報がテキストボックスに表示され、レコードを完全に削除するか、単に更新するかを選択できます。特定のフィールド。
Membership.phpとEditRecord.phpが下に表示されます。エラーコードはEditRecord.phpのソースの91行目ですが、プライバシーのためにこの投稿からいくつかの部分を切り取っています。代わりに、行は次のようにマークされています:
//--------これはエラー行です
答え :
コード
[Membership.php]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="Accounts.css">
<style type="text/javascript" src="Validate.js"></style>
<style type="text/javascript" scr="Redirect.js"></style>
<style type="text/javascript" src="Utilities.js"></style>
<title>Member Information Input</title>
</head>
<body>
<div id="content">
<?php
//Establish data connection using external file
require("connection.php");
//Issue SQL SELECT Statement
$sql = "SELECT * FROM Membership";
//Stores any results that match the search term.
$rs = odbc_exec($conn, $sql);
//Set counter for search results to zero
$results = 0;
//Iterates through search results and prints information on records that match
while($row = odbc_fetch_array($rs))
{
$results += 1;
echo '<p><a href="EditMember.php?ID=' . $row['ID'] . '" id="popup">' . $row['FirstName'] . " " . $row['LastName'] . "</a></p>";
}
?>
</div>
</body>
</html>
[EditRecord.php]
<?php
//Retrieve ID value - if the page is loading for the first time, use $_GET[]. If the
//delete or edit button has been clicked, use $_POST[]
if (isset($_GET['ID'])) {
$userID = $_GET['ID'];
}
else {
$userID=$_POST['ID'];
}
//Establish data connection
require("connection.php");
//If the Delete Button is clicked
if (isset($_POST['DelBtn'])) {
//Issue SQL Statement to Delete Selected Record
$sqlDelete = "DELETE FROM Membership WHERE ID = $userID";
//Execute the SQL Delete Query
$rsDelete = odbc_exec($conn,$sqlDelete);
if(odbc_num_rows($rsDelete) == 1) {
echo "Record successfully deleted!";
}
}
//If the Edit Button is clicked
else if (isset($_POST['EditBtn'])) {
//Collect form field values in scalar variables
$FirstName = $_POST['FirstName'];
$LastName = $_POST['LastName'];
$Address = $_POST['Address'];
$City = $_POST['City'];
$State = $_POST['State'];
$Email = $_POST['Email'];
$Gender = $_POST['Gender'];
$Comments = $_POST['Comments'];
//Issue SQL Statement to Update Selected Record
$sqlUpdate = "UPDATE Membership SET FirstName = '$FirstName', LastName = '$LastName', Address = '$Address', City = '$City', State = '$State'" .
"Email='$Email', Gender = '$Gender', Comments = '$Comments' WHERE ID = $userID";
//Execute the SQL UPDATE Query
$rsEdit = odbc_exec($conn,$sqlUpdate);
if(odbc_num_rows($rsEdit) == 1) {
echo "Record successfully updated!";
}
}
//Issue SQL SELECT Statement to Select Record to Edit or Delete
$sql = "SELECT * FROM Membership WHERE ID = $userID";
//Execute the SQL Query
$rs = odbc_exec($conn, $sql);
odbc_close($conn);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="Accounts.css">
<style type="text/javascript" src="Validate.js"></style>
<style type="text/javascript" src="Utilities.js"></style>
<title>Member Information Input</title>
</head>
<body>
<div id="content">
<form method="post" action="EditMember.php" name="EditForm">
<?php
// Loop through and display the recordset returned by SELECT statement. Display the record values in HTML Text Boxes
**//--------This is the error line
データベースには4つではなく、5つのレコードがあるため、これも奇妙だと思います。それはゼロから数え始めるからですか?
洞察やアドバイスをいただければ幸いです。
答え :
姓:
アドレス:
市:
状態:
メール:
性別:
コメント:
<?php } ?> &nbsp;&nbsp;&nbsp;&nbsp; 答えへのリンク
答え :
解決策:
問題はodbc_close()
を呼び出しており、ループがodbc_fetch_array()<を呼び出す前に接続を閉じていることです。 /code>。すべての行をフェッチするまで、接続を開いたままにしておく必要があります。
また、エラーメッセージの「4」は、行数などを指していません。これは、 odbc_exec()
呼び出しによって作成されたリソースの結果識別子の単なる数値表現です。
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。