【问题标题】:Outputting searched data to another form将搜索到的数据输出到另一种形式
【发布时间】:2013-03-16 19:12:32
【问题描述】:

我目前正在构建一个获取唯一值并将其用作登录名的系统,即参考号。然后参考号搜索数据库并将所有相应的数据输出到另一个页面,我正在为此苦苦挣扎,我的代码是:

索引.PHP

<input name="search_box"  type="text" class="auto-style1" id="search_box" style="width: 240px; height: 30px" maxlength="12">

<input type="submit" name="search" value="Enter" class="auto-style1" style="width: 63px; height: 30px"></td>
<?php $reasons = array("search_box" => "Please Enter Valid Reference Number", "" => "Error"); if ($_GET["loginFailed"]) echo $reasons[$_GET["reason"]]; ?>

</form>

检查.php

 <?php
include "conn.php";

mysql_connect("localhost","root") or die(header("location:index.php?loginFailed=true&reason=search_box"));
mysql_select_db("DB1") or die(header("location:index.php?loginFailed=true&reason=search_box"));

$reference1 = $_POST['search_box'];

$sql = "SELECT * FROM test_table1 WHERE No =$R1";
$result = mysql_query($sql) or die(mysql_error());
    if ($result)
    $count = mysql_num_rows($result);
    else
    $count = 0;

if($count == 1)
 {
  session_register('search_box');
  header("location:result.php");
  }
else 
{
echo (header("location:index.php?loginFailed=true&reason=search_box"));
 }
 ?> 

输出.php

 <?php
include "conn.php";

$sq2 = "SELECT * FROM test_table1";
if (isset($_POST['search']))
 {
    $search_term = mysql_real_escape_string($_POST['search_box']);

    $sq2 .= "WHERE No =  '{$search_term}'";
}

$query= mysql_query($sq2, $con);

while($row = mysql_fetch_array($query)) { ?>
&nbsp;<font size="4" face="Calibri"><b> Ref Number:   </b> </font><?php echo $row['No']; ?></td>
<p>
&nbsp;<font size="4" face="Calibri"><b> Location:   </b></font><?php echo $row['Country']; ?></td>
<p>

<?php
mysql_close($con);
?> 

如果你们能提供任何帮助,我们将不胜感激,谢谢。

Qwerty。

【问题讨论】:

  • 你应该在 Login_check.php 中转义或重新输入你的 $reference1 到 (int) ,这不是很安全。还说问题出在哪里会加快答案 - 例如。它不应该做什么和不应该做什么:)
  • 有什么问题?期望的行为是什么,当前的行为是什么?

标签: php html sql search


【解决方案1】:

您的问题(您现在可能想知道的问题(因为似乎还有更多潜在的问题和漏洞利用))在Output.php

当您从 Login_check.php 调用该文件时(因为您正在重定向浏览器),您的 $_POST 数组不再包含任何数据。

为了让自己更轻松,为什么不include "Output.php"; 而不是通过headers() 重定向浏览器呢?这样您就不需要再次在Output.php 中重新初始化会话或数据库。

但是,如果您需要此重定向,请在会话初始化后将您的 $_POST['search'] 存储到 $_SESSION['search'],然后在 Output.php 中引用 $_SESSION['search'] 而不是(如您现在所拥有的那样)到 $_POST['search']

希望能有所帮助。

【讨论】:

  • @qwerty255 in Login_check.php 将您的这部分代码更新为:if($count == 1) { session_register('search_box'); iclude 'Output.php'; } else ... 并在 Output.php 中将 include "connection.php"; 替换为 include_once "connection.php"; 您的代码应该比到目前为止的工作多一点.如果您没有很好地解释您要做什么,我怀疑我是否可以再为您提供帮助,因为这对我来说不是很清楚。例如,为什么你的结构是这样的(为什么有这么多文件,为什么重定向,你甚至需要玩会话)。
  • @qwerty255 嗨,我认为你把事情复杂化了。在我看来,您只需要一个 php 文件,它将在顶部和下方打印一些 Enter ID to check: [____] [Submit] 输入,而不是当您“提交”一个 id(指向同一 php 脚本的表单)时,它将显示所需的信息。请注意,这种方法并不安全,任何真正想要并且可以访问该站点的人最终都会点击现有的 ref.No。并查看一些个人详细信息,因此请小心。如果您希望我在这里发布一些您可以自己调整的内容,请告诉我,我可能会在另一个答案中发布。
  • @qwerty255 我相信它足够简单。你能把我写在这里你的表结构的某个地方,这样我就可以给你你的确切代码吗?
  • @qwerty255 你好。要输出更多,您需要不断获取新行(只要有,或者),只要您想要它们。通常是这样完成的:$q=mysql_query("select ..."); while($r=mysql_fetch_assoc($q)) { var_dump($r); } 你当然会使用实际的 sql 查询而不是"select ...",并且会在while 循环中执行比var_dump($r); 更有用的操作
【解决方案2】:

所以我假设你有一张桌子donations,你有一些捐赠的donId(参考号),捐赠人的donName,捐赠人来自的国家donCountry和@ 987654325@他们捐了多少钱。 您的文件看起来像这样(我不会为 html 的所有正确标题而烦恼,因此结果不会是 w3c 有效的 html,但它应该可以在您的浏览器中正常工作。

我想我必须说你不应该使用mysql_query 和所有其他mysql_... 函数使用mysqli_*。下面的代码虽然仍在使用旧的这些天已经弃用的 mysql_ 函数,所以将它相应地升级到 mysqli 符合您的利益(这是一项家庭工作;)哈哈)


档案donInfo.php:

<html>
<body>
<form action='donInfo.php' method='post'>
    <label for='donId'>Reference No.:</label>
    <input type='text' size='6' name='donId' id='donId' value='' />
    <input type='submit' name='do' value='  Show me!  ' style='margin-left:2em;'/>
</form>

<?php
    /* table definition: 
    CREATE TABLE donations (
        donId int unsigned not null,
        donCountry varchar(80) not null,
        donName varchar(80) not null,
        donAmount numeric(11,2) not null,
        PRIMARY KEY (donId)
    )
    */
    if (!isset($_POST['do']) || !isset($_POST['donId']) || !$_POST['donId']) 
        exit;

    require_once 'connection.php';

    $don=mysql_fetch_assoc(
        mysql_query('SELECT * '.
            'FROM donations '.
            'WHERE donId="'.mysql_real_escape_string($_POST['donId'],$con).'"',$con));
    if ($don===false || !$don['donId'])
        print '<h3>Donation id #'.$_POST['donId'].' does not exist!</h3>';
    else {
        print '<h3>Information about donation id #'.$_POST['donId'].'</h3>'.
            'State: '.$don['donCountry'].'<br/>'.
            'Donator: '.$don['donName'].'<br/>'.
            'Amount: $ '.number_format($don['donAmount'],2).'<br/>'.
            '<hr/>';

        $sumP=mysql_fetch_assoc(
            mysql_query('SELECT SUM(donAmount) total, COUNT(*) donx '.
                'FROM donations '.
                'WHERE donName="'.mysql_real_escape_string($don['donName'],$con).'" '.
                'GROUP BY donName',$con));
        print '<h4>Donations from '.$don['donName'].':</h4>'.
            'Total Amount: $ '.number_format($sumP['total'],2).'<br/>'.
            'Donated <b>'.number_format($sumP['donx'],0).'</b> times to date.<br/>'.
            '<hr/>';

        $sumC=mysql_fetch_assoc(
            mysql_query('SELECT SUM(donAmount) total, COUNT(DISTINCT donName) donators, COUNT(*) donx '.
                'FROM donations '.
                'WHERE donCountry="'.mysql_real_escape_string($don['donCountry'],$con).'" '.
                'GROUP BY donCountry',$con));
        print '<h4>Donations from '.$don['donCountry'].':</h4>'.
            'Total Amount: $ '.number_format($sumC['total'],2).'<br/>'.
            'Total of <b>'.number_format($sumC['donx']).'</b> donations from <b>'.number_format($sumC['donators'],0).'</b> donators.<br/>'.
            '<hr/>';

        $sumW=mysql_fetch_assoc(
            mysql_query('SELECT SUM(donAmount) total, COUNT(DISTINCT donName) donators, COUNT(DISTINCT donCountry) countries, COUNT(*) donx '.
                'FROM donations '.
                'GROUP BY 1=1',$con));
        print '<h4>Donations Total:</h4>'.
            'Total Amount: $ '.number_format($sumW['total'],2).'<br/>'.
            'Total of <b>'.number_format($sumW['donx']).'</b> donations from <b>'.number_format($sumW['countries'],0).'</b> countries and <b>'.number_format($sumW['donators'],0).'</b> donators.<br/>'.
            '<hr/>';        
    }
?>
</body>
</html>

我已经测试了代码,所以它应该可以正常工作。我正在使用您的 connection.php 脚本(我猜)您正在初始化数据库。

它的作用的简短描述: 要求提供一个 ID,然后在提交时检查它是否存在,如果是,它将打印有关该捐赠 ID 的信息、有关该 ID 的用户的信息、有关该 ID 的国家和总捐赠统计信息。如果捐赠ID不存在,它会在等待输入另一个ID时说:不存在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多