0

以下は、MYSQL データベースから日付範囲を検索するための私のコードです。日付を検索すると、表の見出し (製品説明、新規または所有者と日付) が表示されますが、データベースからの結果が表示されませんか?

選択した日付範囲の結果を表示するためにコードを編集する方法についてのアイデアはありますか?

<?php
if(!isset($_POST['find']))
{
?>
<form method = "post" action = "<?php echo $_SERVER['PHP_SELF'];?>">
<table width = "450" align = "center">
    <tr>
    <td><b><i>Please enter date in the field below (i.e. 11-09-2012)</i></b></td>
</tr>
<tr>
    <td>
    From&nbsp;:&nbsp;
    <input type = "text" name = "small">
    To&nbsp;:&nbsp;
    <input type = "text" name = "large"></td>
</tr>
<tr>
    <td align = "center">
        <input type = "submit" name = "find" value = "SEARCH">
        <input type = "reset" value = "CLEAR FORM">
        </td>   
    </tr>
</table>
</form>
<?php
}
else
{
$small = trim($_POST['small']);
$large = trim($_POST['large']);

$connection = mysql_pconnect("localhost", "user_name", "password") or die("Connection failed. ".myslq_error());
 mysql_select_db("stock") or die("Unable to select db. ".mysql_error());
//Add 1 to the upper range, $large, else it won't make it inclusive
$query = "SELECT * FROM main_stock WHERE curr_timestamp BETWEEN DATE_FORMAT(curr_timestamp,'%".$small."') AND DATE_FORMAT(curr_timestamp, '%".($large+1)."') ORDER BY curr_timestamp";
$result = mysql_query($query) or die(mysql_error());

echo "<table width = '500' align = 'center'>";
echo "<tr><b>";
    echo "<td>Product Description</td>";
    echo "<td>New or Own?</td>";
    echo "<td>Date</td>";
echo "</b></tr>";
while($record = mysql_fetch_object($result))
{
    echo "<tr>";
        echo "<td>".$record->product_desc."</td>";
        echo "<td>".$record->newown."</td>";
        $year_part_of_date = explode('-', $record->curr_timestamp);
    echo "<td>".$year_part_of_date[0]."</td>";
        //if you want the full date replace the $year_part_of_date[0] with $record->date
    echo "</tr>";
}
echo "</table>";

}

?>
4

2 に答える 2

0

あなたのクエリは有効ではないと思います。

curr_timestampが の形式の MySQL 日時フィールドであると仮定するとYYYY-MM-DD HH:MM:SS、簡単に比較できるように、入力をこの形式に変更する必要があります。$smallandの形式について詳しく説明できれば、$largeそれは役に立ちます。

おそらく、クエリをこの形式にする必要があります

SELECT * FROM main_stock
WHERE curr_timestamp BETWEEN '$small_formatted' AND '$large_formatted'
ORDER BY curr_timestamp ASC

Where$small_formatted$large_formattedare のようなものを使用して適切にフォーマットされた時間date('Y-m-d H:i:s', $input_timestamp)

于 2012-09-12T15:06:02.647 に答える
0
  1. ロジックの順序を入れ替えます。プロセスをelse.
  2. プロシージャル スタイルとオブジェクト スタイルを組み合わせているようです。一つを選ぶ。
  3. すべて ( ) を選択することは避けてくださいSELECT *。常に列リストを指定してください。
  4. 日付が正しくフォーマットされていません。データベースの形式に合わせて入力日付の形式を設定する必要があります ( YYYY-MM-DD)。だと思いcurr_timestampますYYYY-MM-DD
  5. 関数は非推奨mysql_になっているため、関数の使用を停止する必要があります。
  6. 準備済みステートメントを使用して、SQL インジェクションを防ぎます。

これをテストしていませんが、これにより上記の問題が修正されます。

<?php
if(isset($_POST['find']))
{
    $link = mysqli_connect("localhost", "user_name", "password", "stock");

    if (mysqli_connect_error()) {
    die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
    }

    $stmt = mysqli_prepare($link, 'SELECT * FROM main_stock WHERE curr_timestamp ' . 
    "BETWEEN DATE_FORMAT(?, '%m-%d-%Y') " . 
    "AND DATE_FORMAT(?, '%m-%d-%Y') ORDER BY curr_timestamp");

    mysqli_bind_param($stmt, 'ss', $_POST['small'], $_POST['large']) or die(mysqli_error($dbh));

    $result = mysqli_stmt_execute($stmt) or die(mysqli_error($link));

    echo "<table width = '500' align = 'center'>";
    echo "<tr><b>";
    echo "<td>Product Description</td>";
    echo "<td>New or Own?</td>";
    echo "<td>Date</td>";
    echo "</b></tr>";

    while($record = mysqli_fetch_assoc($result)) {
    echo "<tr>";
    echo "<td>" . $record[product_desc] . "</td>";
    echo "<td>" . $record[newown] . "</td>";

        $year_part_of_date = explode('-', $record[curr_timestamp]);

    echo "<td>".$year_part_of_date[0]."</td>";

        //if you want the full date replace the $year_part_of_date[0] with $record->date
    echo "</tr>";
    }

    echo "</table>";

   mysqli_close($link);
}
else
{
?>
<form method = "post" action = "<?php echo $_SERVER['PHP_SELF'];?>">
<table width = "450" align = "center">
    <tr>
    <td><b><i>Please enter date in the field below (i.e. 11-09-2012)</i></b></td>
</tr>
<tr>
    <td>
    From&nbsp;:&nbsp;
    <input type = "text" name = "small">
    To&nbsp;:&nbsp;
    <input type = "text" name = "large"></td>
</tr>
<tr>
    <td align = "center">
        <input type = "submit" name = "find" value = "SEARCH">
        <input type = "reset" value = "CLEAR FORM">
        </td>   
    </tr>
</table>
</form>
<?php
}

?>
于 2012-09-12T15:13:36.683 に答える