0

我有一家公司,我们向人们开具发票。然后我上传这张带有“TicketNumber”和“日期”的发票

我想做的事情在逻辑上相当简单,但我的思绪无法围绕 MySQL 进行,我找不到我想做的教程。

我创建了一个类似于搜索的表单,它需要“搜索票号”并将其提交给“proceed.php”

如果在我的数据库中找到票号,并且提交的票号日期相对于我提交的日期和时间小于当前时间的 72 小时,则转到链接 A,如果其大于 72 小时,则转到链接 B,如果搜索没有找到任何东西转到链接 C,

如果它很复杂,我不希望任何人为我写出来,但也许会指导我想要我想做的教程或告诉我我应该寻找什么。但是,如果您愿意为我编写脚本,以便我可以看到我应该做的事情,那将非常感激。

现在这就是我的proceed.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

你可以这样做:

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

然后对于时间部分,我发现了这个: Calculate elapsed time in 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()专门使用 MySQL,因为您要求两个日期之间的“小时”。如果您需要几天而不是几小时,您可以使用NOW()PHPdate('Y-m-d')或 MySQL 替代方案,尽管它NOW()似乎可以根据您的需要工作。

于 2012-07-12T02:50:03.463 回答
0

小心在查询字符串中直接使用来自 $_POST 的值(并且“小心”,我的意思是避免它就像这是你的工作,因为它是。熟悉(这个概念

我首选的构建查询的方法是使用准备好的语句。这是目前最安全的方法。建议您研究一种更新的与 SQL 对话的方式(mysql_ 函数现在已经过时,有利于MySQLi)。这里的许多人更喜欢PHP 数据对象 (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 回答