0

我已经为此工作了大约 20 个小时的研究和试验/错误,没有看到任何解决方案我想我会在这里尝试,看看是否有人最终能指出我正确的方向并给我一些可靠的建议。

这是设置。我有一个包含 HTML 表单的页面 (customer_search.php),我希望用户能够通过 $last_name 搜索数据库,并将结果显示在同一页面的表格上。

第一:这可能吗?在过去的几天里我读了这么多,我怀疑自己,但后来我认为它可以在不使用 Java 和使用纯 PHP/HTML 的情况下完成。

我也使用 MVC 模型。

这是主页 (customer_search.php)

<?php include '../view/header.php';


?>

<div id="main">
        <h1>Customer Search</h1>


            <div id="content">
  <form action="" method="post" id="aligned"

        <label>&nbsp Last Name</label>
        <input type="text" name="last_name"/>
        <br />
        <label>&nbsp;<label>
        <input type="submit" value="Search" />


            </div>
        <div id="content">
      <h2>Results</h2>

        <table>
        <tr>
            <th>Name</th>
            <th>Email Address</th>
            <th>City</th>
            <th>&nbsp;</th>
        </tr>
        <tr>
            <td><?php echo $_POST['firstName'] .' '. $_POST['last_name']; ?></td>
            <td><?php echo $_POST['email']; ?></td>
            <td><?php echo $_POST['city']; ?></td>
            <td><form action="customer_display.php" method="post">
                <input type="hidden" name="action" value="get_customer" />
                <input type="hidden" name="customer_id"
                       value="<?php echo $_POST['customer_ID']; ?>" />
                <input type="submit" value="Select" />

            </form>
            </td>

        </tr>
        </table>
      <br />
 </div>

</div>    
<?php include '../view/footer.php'; ?>

这是 MODEL 文件夹中的 customer_db.php,其中包含我想使用的函数 get_customers_by_last_name($last_name)

<?php
function get_customers() {
global $db;
$query = 'SELECT * FROM customers
            ORDER BY lastName';
$customers = $db->query($query);
    return $customers;
}

function get_customers_by_last_name($last_name) {
global $db;
$query = "SELECT * FROM customers
        WHERE lastName = '$last_name'
        ORDER BY lastName";
$customers = $db->query($query);
return $customers;
 }

我为代码过载道歉,但这是我在这里的第一篇文章,我已经尝试了我能想到的一切。我只想在 html 表单上按姓氏搜索数据库,然后将结果显示在表格上(在同一页面上),我不在乎页面是否必须刷新。我知道 PHP 是服务器端而不是客户端,所以它需要刷新。我似乎无法将结果实际显示在表格中,如果我可以在那里获得结果,下一步是选择将其传递到下一页 customer_display.php 的客户,但我会跨越那个那里的桥。感谢您的帮助,我真的在乞求一些帮助/教训。我很绝望!!!!:(

4

4 回答 4

2

我过去曾使用 JQuery 和 jTable 成功地做同样的事情。

这使用 AJAX 调用,允许您在不重新加载页面的情况下调用 PHP 脚本。

你可以在这里找到你需要知道的一切:http ://www.jtable.org/

于 2012-12-11T04:52:06.627 回答
2

嗨,你做了功课,页面必须刷新是正确的。除非您打算使用带有 javascrcipt 的 Ajax 调用(例如jQuery

要按照您的要求进行操作,您必须将 PHP 放在开头。

您将其放在一份If()声明中,该声明仅在表格已发布时才有效。

这是我将使用您的代码执行的操作:

<?php
if(isset($_POST['last_name'])){
include_once 'customer_db.php';
$customers = get_customers_by_last_name($_POST['last_name']);
 }
 include '../view/header.php';


?>

<div id="main">
        <h1>Customer Search</h1>


 <div id="Search">
  <form action="" method="post" id="aligned"

        <label>&nbsp Last Name</label>
        <input type="text" name="last_name"/>
        <br />
        <label>&nbsp;<label>
        <input type="submit" value="Search" />
  </form>

</div>
<?php if(isset($customers)){ ?>
 <div id="Results">
      <h2>Results</h2>

        <table>
        <tr>
            <th>Name</th>
            <th>Email Address</th>
            <th>City</th>
            <th>&nbsp;</th>
        </tr>
        <tr>
            <?php while ($a_customer = mysql_fetch_assoc($customer)) { ?>

            <td><?php echo $a_customer['firstName'] .' '. $a_customer['last_name']; ?></td>
            <td><?php echo $a_customer['email']; ?></td>
            <td><?php echo $a_customer['city']; ?></td>
            <td><form action="customer_display.php" method="post">
                <input type="hidden" name="action" value="get_customer" />
                <input type="hidden" name="customer_id"
                       value="<?php $a_customer['customer_ID']; ?>" />
                <input type="submit" value="Select" />

            <?php } ?>
            </td>

        </tr>
        </table>
      <br />
 </div>
<?php }?>

</div>    
<?php include '../view/footer.php'; ?>

一些重要的建议:

  1. 使用Mysqli(或PDO)库而不是 Msql 用于 php
  2. 您不应该信任搜索表单上的用户输入数据,您可以使用janitor.class来清理帖子。
  3. 当您有更多时间时,请查看有关 PHP 安全性的这些链接:邪恶用户PHP 安全性PHP 安全编码
  4. 哦!并且不要给同一页面中的两个元素赋予相同的id 值,id的目的是给每个元素一个唯一的标识符。
于 2012-12-11T05:22:19.077 回答
0

这就是 AJAX 的用途……与服务器进行异步通信(即不在页面加载时)。您最好的选择可能是使用 JQuery 或其他 JS 框架,这将使 AJAX 调用变得轻而易举$.ajax();::

就像是:

$.ajax({
  type: "POST",
  url: '/directory/to/php_script_that_outputs_the_table_html.php',
  data: { name: "Smith"},
  success: function(data) {
    $('.class_of_div_to_recieve_code').html(data);
  }
});
于 2012-12-11T04:50:55.187 回答
0

使用 AJAX 调用 PHP 对象,该对象实例化您的模型并以 JSON 字符串的形式返回结果。收到结果后,使用 JavaScript 循环遍历 JSON 并输出您的表。

我推荐 jQuery,它有自己的 .ajax() 函数,并且很容易用你的结果集来操作 DOM。去阅读jQuery 文档

于 2012-12-11T04:55:59.873 回答