0

PHPを使用してマスター/詳細ページを作成したいと思います。MYSQLデータベースからデータを取得するのではなく、連想配列からデータを取得したいと思います。これは可能ですか?

データは最初にmysqlデータベーステーブルから取得され、いくつかの処理のために連想配列内に格納されます。次に、連想配列内のデータのみに基づいてマスター詳細ページを作成します。アイデアを持っている人はいますか?

4

2 に答える 2

3

PHPの性質上、それは不可能です。
PHP スクリプトがほんの一瞬実行されてから停止ます。すべての変数と連想配列やその他のものがあります。

そのため、データベースは個別の HTTP 呼び出し間のデータ ストレージとして使用されます。

したがって、スマートマスのふりをするのではなく、物事を自然に進めてください。

  • 詳細ページへの typerlinks を使用してデータベースにデータのリストを照会する 1 つのページで、HTTP GET クエリ文字列を介して一意のレコード ID を渡します
  • 渡された ID に基づいてデータベースに詳細を照会する 1 つの詳細ページ。

以下は、アイデアを提供するために、テンプレートを使用したそのようなアプリケーションの非常に基本的な例です。

<?  
mysql_connect(); 
mysql_select_db("new"); 
$table = "test"; 
if($_SERVER['REQUEST_METHOD']=='POST') { //form handler part: 
  $name = mysql_real_escape_string($_POST['name']); 
  if ($id = intval($_POST['id'])) { 
    $query="UPDATE $table SET name='$name' WHERE id=$id"; 
  } else { 
    $query="INSERT INTO $table SET name='$name'"; 
  } 
  mysql_query($query) or trigger_error(mysql_error()." in ".$query); 
  header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);  
  exit;  
}  
if (!isset($_GET['id'])) { //listing part: 
  $LIST=array(); 
  $query="SELECT * FROM $table";  
  $res=mysql_query($query); 
  while($row=mysql_fetch_assoc($res)) $LIST[]=$row; 
  include 'list.php'; 
} else { // form displaying part: 
  if ($id=intval($_GET['id'])) { 
    $query="SELECT * FROM $table WHERE id=$id";  
    $res=mysql_query($query); 
    $row=mysql_fetch_assoc($res); 
    foreach ($row as $k => $v) $row[$k]=htmlspecialchars($v); 
  } else { 
    $row['name']=''; 
    $row['id']=0; 
  } 
  include 'form.php'; 
}  
?>

form.php という詳細ページ テンプレート

<form method="POST">
<input type="text" name="name" value="<?=$row['name']?>"><br>
<input type="hidden" name="id" value="<?=$row['id']?>">
<input type="submit"><br>
<a href="?">Return to the list</a>
</form>

list.phpというメインページテンプレート

<a href="?id=0">Add item</a>
<? foreach ($LIST as $row): ?>
<li><a href="?id=<?=$row['id']?>"><?=$row['name']?></a>
<? endforeach ?>

これは管理ページの例で、レコードを追加および編集できます。
ただし、データを表示するだけのページはほとんど同じです。

于 2011-03-24T16:21:39.087 に答える
0

たとえば、要約データのリストを表示していて、特定のレコードの詳細を動的に表示したい場合は、javascript を使用できます (jQuery は、javascript を簡単に処理できる優れたライブラリです)。

概要ページに表示するレコードの数に応じて、次のいずれかを実行できます。

  1. データベースからすべてのデータ (マスターと詳細) を取得し、PHP で出力してから、javascript で詳細を非表示にします
  2. データベースからマスター データのみを取得し、PHP で出力し、ユーザーが詳細データを要求したときに AJAX 要求を実行します。

どちらの場合も、すべてのデータをメモリに保持することはありません。

于 2011-03-24T16:36:57.897 に答える