0

我对 PHP 非常陌生,在 MySQL 和 HTML 和 ASP 方面的基础水平也差不多。简而言之,我有一个 MySQL 数据库,我已经构建了一个 SQL 查询,可以在 MySQL 中返回我想要的结果。

我正在尝试学习做的是构建一个网页,它将:

  • 将所有已知的“organizations.name”从数据库中拉到下拉列表中以选择一个。(显示在我想将变量作为 VARIABLENAME 的查询中)
  • 有一个下拉菜单,可选择 30 天、60 天、180 天等(在我的查询中显示需要作为 VARIABLEDAYS 去哪里)

基本上,我试图做一些看起来像这样的东西http://i.imgur.com/dwwGl.jpg

并且在输出上也有相关的外观(我正在努力让格式的消息部分转储到其他字段下方,而不是旁边)。

这是我的 MySQL 查询。

    SELECT tickets.ref AS `Ticket Number`
      , concat_ws(' ', people.first_name, people.last_name) AS `User Name`
      , DATE_FORMAT(tickets.date_created, get_format(DATE, 'EUR')) AS `Date/Time`
      , left(tickets.subject, 80) AS Subject
      , sec_to_time(tickets.total_to_first_reply) AS `Time 1st Response`
      , sec_to_time(tickets.total_user_waiting) AS `Total Wait`
      , mycleanup (left(tickets_messages.message, 250)) AS Message
    FROM
      tickets
    INNER JOIN organizations
      ON tickets.organization_id = organizations.id
    INNER JOIN people
      ON tickets.person_id = people.id AND people.organization_id = organizations.id
    INNER JOIN tickets_messages
      ON tickets_messages.ticket_id = tickets.id AND tickets_messages.person_id = people.id
    WHERE
      tickets.date_created > date_sub(now(), INTERVAL VARIABLEDAYS DAY)
      AND organizations.name = VARIABLENAME
    GROUP BY
      tickets.ref
    ORDER BY
     `Date/Time`

正如我所说,这个有点混合,因为我需要帮助:

  • 如何将我的查询更改为 PHP 语句,以及制作 VARIABLEDAYS 和 VARIABLENAME,从 Web 表单中提取的内容。
  • 如何制作初始 Web 表单,具体而言,使其将数据拉入 VARIABLENAME 下拉框,使其成为下拉列表。
  • 如何让我的 PHP 表单正确连接到 MySQL 数据库(到目前为止,我已经尝试过包含设计包的所有内容,可以连接以制作表单。但在服务器上时不做任何事情。我已经将连接更改为 LOCALHOST 和我知道 PHP 在服务器上运行良好)

因此,任何想要尝试帮助我解决这些问题的人,或者推荐一些我可以用来轻松生成这些内容的东西,而不必在每一点上都上一门课程……将不胜感激。

谢谢

将要

4

2 回答 2

1

先生,这里的期望有点沉重。我能给你的最好的答案是一个基本的例子,并指向php.net手册。

你说你是基础级别的mysql?好的,那么运行查询来提取数据就没有问题了。您只需要知道如何使用 PHP 与数据库进行通信,对吗?调查PDO

话虽如此,对这个问题的简洁准确的答案是,你不能让某人在一组中解释全部内容。你应该从一些教程开始,或者检查一些现有的代码来了解它是如何工作的。Stack Overflow 是一个很好的细节资源,但不一定适用于这样的问题,除非碰巧有人非常无聊,在问题被投票结束之前有很多时间写一个巨大的教程。

编辑

显然,您在此处输入正确的数据库凭据...

<?php
$db = new PDO('mysql:dbname=your-database-name;host=localhost', $username, $password);
$sql = $db->execute("SELECT `name` FROM `organizations` ORDER BY `name` ASC");
?>
<form id="user_form" action="" method="get">
    <fieldset>
        <select name="name">
        <?php <?php while ($row = $sql->fetch(PDO::FETCH_OBJ)): ?>
            <option value="<?php echo $row->name; ?>"><?php echo $row->name; ?></option>
        <?php endwhile; ?>
        </select>
        <select name="days">
            <option value="30">30</option>
            <option value="60">60</option>
            <option value="90">90</option>
        </select>
        <input type="submit" name="submit" value="submit">
    </fieldset>
</form>

<?php 
if(isset($_GET['days']) && isset($_GET['name'])):
    $days = $_GET['days'];
        $name = $_GET['name'];

        $sql = $db->prepare('SELECT tickets.ref AS `ticket_number`
          , concat_ws(' ', people.first_name, people.last_name) AS `username`
          , DATE_FORMAT(tickets.date_created, get_format(DATE, 'EUR')) AS `datetime`
          , left(tickets.subject, 80) AS `subject`
          , sec_to_time(tickets.total_to_first_reply) AS `first_response`
          , sec_to_time(tickets.total_user_waiting) AS `total_wait`
          , mycleanup (left(tickets_messages.message, 250)) AS `message`
        FROM
          tickets
        INNER JOIN organizations
          ON tickets.organization_id = organizations.id
        INNER JOIN people
          ON tickets.person_id = people.id AND people.organization_id = organizations.id
        INNER JOIN tickets_messages
          ON tickets_messages.ticket_id = tickets.id AND tickets_messages.person_id = people.id
        WHERE
          tickets.date_created > date_sub(now(), INTERVAL :days DAY)
          AND organizations.name = :name
        GROUP BY
          tickets.ref
        ORDER BY
         `Date/Time`');

    $sql->bindParam('days', $days);
    $sql->bindParam('name', $name);
    $sql->execute();
    /*
    It looks like your data could be considered tabular, so we can make a table and drop the results in place...
    */
    ?>
    <table cellpadding="0" cellspacing="0">
        <tbody>
            <tr>
                <th>Ticket Number</th>
                <th>User Name</th>
                <th>Date/Time</th>
                <th>Subject</th>
                <th>Time 1st Response</th>
                <th>Total Wait</th>
                <th>Message</th>
            </tr>
            <?php while ($row = $sql->fetch(PDO::FETCH_OBJ)): ?>
            <tr>
                <td><?php echo $row->ticket_number; ?></td>
                <td><?php echo $row->username; ?></td>
                <td><?php echo $row->datetime; ?></td>
                <td><?php echo $row->subject; ?></td>
                <td><?php echo $row->first_response; ?></td>
                <td><?php echo $row->total_wait; ?></td>
                <td><?php echo $row->message; ?></td>
            </tr>
            <?php endwhile; ?>
        </tbody>
     </table>
<?php endif; ?>

当然,所有这些都未经测试,最终是免费的帮助之手,所以我的保证是有限的。它应该为您指明程序补丁的可接受方向。请注意,我更改了您的查询结果名称,因为 - 尽管我实际上并不知道这一点 - 我认为在对象名称中使用空格或字符不是一个好主意。(例如:SELECT name ASUser Name意味着您以 $row->User Name 的身份访问该对象...看到那里的问题了吗?)另外,您应该按 id 选择组织,而不是 name。由于我不知道该表的结构,因此我只使用您指出的名称。如果要切换到 id,请将组织选择更改为也包括 id 并在组织选择菜单的值部分中回显 id。

除此之外,我想我已经完成了。我需要考虑在某个时候真正拥有自己的生活。

还是祝你好运。

于 2012-10-06T00:42:42.800 回答
0

为此,请学习以下内容:

一旦你学会了用 mysql_query() 来做这件事,出于安全原因,我建议你也学习如何在 PDO 中做这件事。

于 2012-10-06T00:53:30.910 回答