0

私は PHP の初心者で、MySQL では基本レベル、HTML と ASP ではまあまあです。つまり、MySQL で必要な結果を返す SQL クエリを作成した MySQL データベースがあります。

私が学ぼうとしているのは、次のような Web ページを作成することです。

  • データベースからすべての既知の「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`

私が言うように、これは少し複雑で、助けが必要です:

  • Query を PHP ステートメントに変更する方法と、VARIABLEDAYS および VARIABLENAME を Web フォームから取得する方法。
  • 初期 Web フォームの作成方法、具体的には、データを VARIABLENAME ドロップボックスにプルして、プルダウン リストにする方法。
  • PHPフォームをMySQLデータベースに正しく接続する方法(これまでのところ、デザインパッケージを含めて試したことはすべて、フォームを作成するために接続しても問題ありません..しかし、サーバー上では何もしません..接続をLOCALHOSTに変更し、サーバー上でPHPが正常に動作することは知っています)

したがって、これらのビットのいずれかで私を助けたい、またはそれらを簡単に生成するために使用できるものを推奨したい人は誰でも、すべてのビットでコースを受講する必要はありません..それは大歓迎です.

ありがとう

意思

4

2 に答える 2

1

ここでの期待は少し重いです、サー。私があなたに与えることができる最良の答えは、基本的な例であり、php.netのマニュアルを参照することです。

あなたは基本レベルのmysqlだと言いますか?それでは、クエリを実行してデータを取得することは問題ありません。知っておく必要があるのは、PHP を使用してデータベースと通信する方法ですよね? PDOを調べる

そうは言っても、この質問に対する簡潔かつ正確な答えは、誰かにすべてを 1 つのセットで説明してもらうことはできないということです。いくつかのチュートリアルから始めるか、既存のコードを調べて、すべてがどのように機能するかを理解する必要があります。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 で組織を選択する必要があります。そのテーブルの構造がわからないので、あなたが示すように名前を使用します。id に切り替える場合は、組織の選択を変更して id も含め、組織の選択メニューの値の部分に id をエコーし​​ます。

それはさておき、私はここで終わったと思います。いつか実際に生活することを考える必要があります。

まだ頑張ってください。

于 2012-10-06T00:42:42.800 に答える
0

これを達成するには、次のことを学びます。

  • 基本的な HTML
  • 基本的な PHP
  • mysql_query()を使用して PHP で SQL クエリを反復処理する方法

mysql_query() でそれを行う方法を習得したら、セキュリティ上の理由から、PDO でも同様に行う方法を学ぶことをお勧めします。

于 2012-10-06T00:53:30.910 に答える