使用 PHP 创建主从页面

发布于 2024-10-25 20:04:32 字数 143 浏览 3 评论 0原文

我想使用 PHP 创建一个主从页面。我不想从 MYSQL 数据库获取数据,而是想从关联数组获取数据。这可能吗?

首先从 mysql 数据库表中获取数据,并将其存储在关联数组中进行某些处理。现在我想仅根据关联数组内的数据创建一个主详细信息页面。有人有想法吗?

I want to create a master-detail page using PHP. Rather than getting data from a MYSQL database, I want to get the data from an associative array. Is this possible?

The data will first be obtained from the mysql database table and stored inside an associative array for some processing. Now I want to create a master detail page based on the data inside the associative array alone. Anyone with Ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

悟红尘 2024-11-01 20:04:32

由于 PHP 的本质,这是不可能的。
PHP 脚本运行了几分之一秒,然后终止。其中包括变量、关联数组和其他东西。

这就是为什么数据库旨在成为不同 HTTP 调用之间的数据存储。

因此,不要假装自己是个聪明人,让事情按照自然的方式进行:

  • 一个页面查询数据库中的数据列表,带有指向详细信息页面的类型链接,通过 HTTP GET 查询字符串传递唯一记录 ID
  • 一个查询数据库的详细信息页面有关详细信息,基于传递的 id。

这是此类应用程序的一个非常基本的示例,使用模板,给您一个想法:

<?  
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 ?>

这是管理页面的示例,让您添加和编辑记录。
但是,该页面仅显示数据几乎相同。

It's just impossible, due to PHP nature.
PHP script being run for a fraction of second and then dies. With all it's variables and associative arrays and other stuff.

That's why a database intended to be data storage between distinct HTTP calls.

Thus, don't pretend to be a smartmass, let the things go natural way:

  • one page that queries database for the list of data, with typerlinks to detail page, passing unique record id via HTTP GET query string
  • one details page that queries database for the details, based on passed id.

here is a very basic example of such application, using templates, to give you an idea:

<?  
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'; 
}  
?>

details page template called 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>

and main page template called list.php

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

this is example of admin page, letting you add and edit records.
however, the page tat just shows the data will be pretty much the same.

橪书 2024-11-01 20:04:32

例如,如果您要显示摘要数据列表,并且想要动态显示特定记录的详细信息,则可以使用 javascript(jQuery 是一个很好的库,可以使处理 javascript 变得更容易)。

根据您在摘要页面上显示的记录数量,您可以

  1. 从数据库中提取所有数据(主数据和详细信息),使用 PHP 输出,然后使用 javascript 隐藏详细信息
  2. 仅从数据库中提取主数据,输出它使用 PHP,然后在用户请求时对详细数据执行 AJAX 请求。

在这两种情况下,您都不会将所有数据保留在内存中。

If you are, for example, displaying a list of summary data and you want to dynamically show the details for a particular record, you can use javascript (jQuery is a nice library that makes dealing with javascript easier).

Depending on the number of records you display on your summary page, you can either

  1. pull all the data (master and detail) from the database, output it with PHP and then hide the detail with javascript
  2. pull only the master data from the database, output it with PHP, and then do an AJAX request for the detail data when the user asks for it.

In neither case will you maintain all your data in memory.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文