0

私は人々に請求書を発行する会社を持っています。次に、この請求書を「TicketNumber」と「date」でアップロードします

私がやりたいことは論理的にはかなり単純ですが、私の心はMySQLに取り掛かることができず、やりたいことのチュートリアルを見つけることができません.

「検索チケット番号」を取得して「proceed.php」に送信する、検索のように機能するフォームを作成しました。

チケット番号が私のデータベースにあり、送信されたチケット番号の日付が、送信した日時から現在の時刻までの 72 時間未満の場合は、リンク A に移動し、72 時間を超える場合はリンク B に移動します。検索で何も見つからない場合は、リンク C に移動します。

複雑な場合は、誰かが私のためにそれを書いてくれるとは思っていませんが、チュートリアルに誘導して、やりたいことや、何を探すべきかを教えてくれるかもしれません. しかし、私が何をすべきかを理解できるようにスクリプトを作成していただけると、非常にありがたいです。

今、これは私のprocedure.phpファイルにあるものです:

<?
$username="data";
$password="data1";
$database="data";

$TicketNumber=$_POST['TicketNumber'];

mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");

$query="SELECT * FROM plate";
$result=mysql_query($query);

$num=mysql_numrows($result);

mysql_close();
?>
4

4 に答える 4

0

クエリ文字列で $_POST の値を直接使用する場合は注意してください (「注意してください」とは、それがあなたの仕事であるかのように避けることを意味します。「この概念.

クエリを作成するための私の好ましい方法は、準備されたステートメントを使用することです。現在のところ、それが最も安全な方法です。SQL と対話するためのより最新の方法を調べることをお勧めします (mysql_ 関数は最近ではMySQLiを支持してかなり時代遅れになっています)。このあたりの多くの人々は、PHP Data Objects (PDO)を好みます。少なくとも、ユーザー提供の文字列を「エスケープ」する必要があります。

$username="data";
$password="data1";
$database="data";

$mysqli = new mysqli("localhost", $username, $password, $database);


// Do this if it's a string:    
// $ticketNumber = $mysqli->real_escape_string($_POST['TicketNumber']);
// since it should be an int, we can do better: 
$ticketNumber = intval($_POST['TicketNumber']);

$results = $mysqli->query("SELECT * FROM plate WHERE ticket_number = $ticketNumber");
if( ! $results->num_rows) {
  header("Location: /scriptC.php");
  die();
}
$ticket = $results->fetch_assoc();
$ticketTime = strtotime($ticket['date']);
$requestTime = strtotime($_POST['date']);

if(($requestTime - $ticketTime) < 72*60*60) {
  header("Location: /scriptA.php");
  die();
} 
header("Location: /scriptB.php");
die();



$mysqli->close();
于 2012-07-12T02:53:51.383 に答える
0

あなたはこれを行うことができます:

while($row = mysql_fetch_array($result))
  {
   if($row['ticketId'] == n)
       /* do the following */
  }

したがって、チェックされた ID が検索対象の ID と一致する場合は、それを使用して何かを行います。また、break ステートメントでループが見つかった場合は、ループから抜け出すことを忘れないでください。

于 2012-07-12T02:24:56.277 に答える
0
$query = "SELECT date, TicketNumber FROM invoices WHERE TicketNumber=";
$query = $query.$TicketNumber;
$result = mysql_query($query);
if(mysql_num_rows($result) == 0)
{
    // Do link C
}
while ( $row = mysql_fetch_array($result) )
{
    if ( calculate 72 hours against date in this row )
    {
        // Do stuff
    }
    else
    {
        // Do other stuff
    }
}

次に、時間の部分については、これを見つけました: PHPで経過時間を計算する

その後、あなたがしなければならないのは

私はPHPの専門家ではありませんが、役に立てば幸いです。

編集:SOでフォーマットするための分離された連結。編集: また、ユーザー入力のサニタイズがいかに重要であるかを十分に言及することはできません。入力をサニタイズしないと、誰でもデータベースを台無しにしたり、アクセスしてほしくないデータにアクセスしたりする可能性があります。

于 2012-07-12T02:30:10.473 に答える
0

MySQL のDATEDIFF()関数を使用して、チケットが送信された時刻と今日の日付差を計算できます。

<?php
$username="data";
$password="data1";
$database="data";
mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");

// get and 'validate" the ticketNumber
$ticketNumber = (isset($_POST['ticketNumber']) && is_numeric($_POST['ticketNumber'])) ? (int)$_POST['ticketNumber'] : 0;

// build the MySQL query selecting the number of days between today (NOW()) and the ticket's date
$sql = 'SELECT DATEDIFF(date, NOW()) AS daysElapsed FROM invoices WHERE TicketNumber = ' . $ticketNumber;
if (($result = mysql_query($query)) && (mysql_num_rows($result) > 0)) {
    // we only want a single row/ticket, so no need to loop
    $row = mysql_fetch_array($result);
    $location = '/link_b.php';
    if ($row[0] <= 3) {
        // less than 3 days, or 72 hours
        $location = '/link_a.php';
    }
    mysql_close();
    header('Location: ' . $location);
    die();
} else {
    header('Location: /link_c.php');
    die();
}

?>

今日の日付については、NOW()2 つの日付の間の「時間」を求めているため、特に MySQL を使用します。数時間ではなく数日が必要な場合は、必要に応じて機能するように見えますがNOW()、PHPdate('Y-m-d')または MySQL の代わりに使用することができNOW()ます。

于 2012-07-12T02:50:03.463 に答える