【问题标题】:PHP SEARCH and then INSERTPHP 搜索然后插入
【发布时间】:2015-04-07 22:35:45
【问题描述】:

我是 PHP 方面的新手,在进行了一些搜索后,我似乎无法找到我的问题的答案。

我所拥有的是非常基本的,两张表'person' 和'case'。我可以插入和搜索一个人(尽管我花了一些时间才让它工作!)。现在,当涉及到“案例”时,我需要首先搜索一个人,我希望搜索结果保留在表单中,然后用户将其余案例信息添加到表单中,然后提交。我已经尝试将我的两个代码组合在一起,但我仍然没有成功。

即使我能找到一种方式让输出保持填充形式,这对我来说也是向前迈出的一大步。我将输出保留为打印,以便搜索结果显示在页面上。任何帮助将不胜感激。当前的搜索和插入代码如下:

    <?php

    include 'connection.php';
    $output ='';
    //collect

    if (isset($_POST['search'])) {
        $searchq = $_POST['search'];
        $searchq = preg_replace("#[^0-9a-z]#i","",$searchq);

        $query = mysql_query("SELECT * FROM person WHERE forename LIKE '%$searchq%' OR surname LIKE '%$searchq%'") or die("Could not search");
        $count = mysql_num_rows($query);
        if ($count == 0) {
            $output = 'There was no search results';
        }else{
            while($row = mysql_fetch_array($query)) {
                $firstname = $row['forename'];
                $lastname = $row['surname'];

                $output .= '<div>'.$firstname.' '.$lastname.'</div>';
        }
    }
    }
    ?>

    <form action="basicsearch.php" method="post">
        <input type="text" name="search" placeholder="Search for Persons..." onkeydown="searchq()1" />
        <input type="submit" value=">>"/>

    </form>

    <?php print("$output");?>



<?php
$forename = $surname = $dateofbirth = $postcode = $addresslineone = $addresslinetwo = $towncity = $contactnumber="";
$forenameErr = $surnameErr = $dateofbirthErr = $postcodeErr = $addresslineoneErr = $addresslinetwoErr = $towncityErr = $contactnumberErr = "";

if ($_SERVER['REQUEST_METHOD']== "POST") {
    $valid = true; 

    if (empty($_POST["forename"])) {
        $forenameErr = "*First name is required";
        $valid = false;
    }
    else {
        $forename = test_input($_POST["forename"]);
    }

    if (empty($_POST["surname"])) {
        $surnameErr = "*Last name is required";
        $valid = false;
    }
    else {
        $surname = test_input($_POST["surname"]);
    }

    //only testing forename/surname at the moment

    if($valid){
        include  'datasubmitted.php';  
        exit;
    }
}

function test_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}
?>

<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>" method="post">
    <div class="label">*First Name:
        <div class="txtbox">
            <input name="forename" type="text" id="txt" placeholder="Enter Your First Name." value="<?php echo $surname; ?>"/>
            <span class="error"><p></p><?php echo  $forenameErr; ?></span>
        </div>
    </div>
    <div class="label">Last Name:
        <div class="txtbox">
            <input name="surname" type="text" id="txt" placeholder="Enter Your Last Name." value="<?php echo $surname; ?>"/>
            <span class="error"><p></p><?php echo $surnameErr; ?>
        </div>
    </div>
<input type="submit" value="Submit" name="Submit" />
</form> 

<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>" method="post">
    <div class="label">*First Name:
        <div class="txtbox">
            <input name="forename" type="text" id="txt" placeholder="Enter Your First Name." value="<?php echo $surname; ?>"/>
            <span class="error"><p></p><?php echo  $forenameErr; ?></span>
        </div>
    </div>
    <div class="label">Last Name:
        <div class="txtbox">
            <input name="surname" type="text" id="txt" placeholder="Enter Your Last Name." value="<?php echo $surname; ?>"/>
            <span class="error"><p></p><?php echo $surnameErr; ?>
        </div>
    </div>
<input type="submit" value="Submit" name="Submit" />
</form> 

一切顺利, 克里斯

【问题讨论】:

  • 嗨,欢迎来到 Stack Overflow。感谢您发布代码,这是一个很大的帮助。但是,从您的问题中还不清楚这段代码现在在做什么。您会尝试澄清您正在观察的当前行为以及期望的行为吗?
  • 感谢您的回复。当然,我有两个单独的代码,一个用于插入,一个用于搜索。我希望它能够搜索客户端所需的功能,一旦搜索完成,它将填充其他文本框。因此,例如搜索姓氏会填充其他框,例如名字、邮政编码、出生日期等,我不确定我会如何做到这一点。然后,我会将搜索结果的结果与用户在案例字段中输入的其他信息结合起来。
  • @noa 所以首先你有一个存储客户信息的客户表和一个存储案例信息的案例表。提交案例时,您必须先查找客户的详细信息,然后输入案例详细信息并保存。我目前有一个回声,它将搜索中返回的所有条件列为列表,而不是我希望将其拉入表单的文本框,以便文本框姓氏将填充用户姓氏,出生日期与搜索结果出生日期等。我希望这是有道理的。
  • 希望更熟悉 PHP 的人能提供帮助。你说的很有道理。

标签: php mysql arrays search insert


【解决方案1】:

首先,尽管您应用了 preg_replace(),但您的 SQL 代码仍可能容易受到 SQL 注入攻击。最好对使用 PHP filter_input 函数清理的输入使用参数化查询。 (与手工构建的输入清理程序相比,这种方法失败的可能性要小得多。)

我看不到您的 INSERT 语句。您正在使用 MySQL,因此您可以考虑先执行 INSERT IGNORE,然后执行 SELECT。

但即使是这个建议也未能触及比最初看起来更复杂的主题的表面。如果您有两个同名的客户(同名但不同的人),您会怎么做?您将如何处理潜在的姓名拼写错误以及由此产生的重复记录?一个人可以有很多例吗? 这些都是系统问题,也是用户界面人机工程学问题。只有仔细的用户界面设计和系统设计才能有效克服这些问题! 如果您正在处理可能包含数千条记录的数据库,则需要仔细考虑这些问题。如果您“仅”与数百人打交道;那么这可能不是问题!

请告诉我们更多……

【讨论】:

  • 感谢您的回复,很多好问题我没有考虑过。我正在考虑让用户通过姓氏和 ID 进行搜索,或者将结果打印到表中,然后用户可以从生成的表中修改用户。该系统仅用于处理少量客户。一个客户可以有很多情况。我认为我需要对此进行更多研究,但如果可能的话,我对任何建议持开放态度,仍然非常愿意接受 SQL/PHP。再次感谢克里斯。
  • 如果您的系统“仅”设计用于处理少量客户端;那么从超链接列表/表中选择该人可能是合适的(可能按名字或姓氏过滤/排序);然后有一个单独的人员详细信息页面;您可以在其中显示个人详细信息的编辑表格、案例列表/表格以及用于输入任何新案例详细信息的表格。根据您的 PHP 代码,我认为这种类型的解决方案对您来说绝对是可能的!
  • 是的,这是一个非常小的系统。你的建议似乎是最合乎逻辑的方法。因此,在带有姓氏过滤器的页面上列出整个客户表,并在每个客户旁边显示“选择”的链接。然后,这将打开一个不同的页面,其中包含一个用于添加案例的表单,在案例的顶部会有“客户 ID”,这将是使用前一个屏幕中的“选择”的字段。然后,用户将使用案例详细信息填写表格的其余部分。使用客户 ID 将客户链接到案例。是我太天真还是太野心勃勃了?
  • 不,既不太天真也不太野心。看起来对我来说很合适!
猜你喜欢
  • 2020-06-19
  • 1970-01-01
  • 2018-09-01
  • 1970-01-01
  • 2010-09-15
  • 2010-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多