PHP SEARCH然后INSERT

时间:2015-02-07 23:09:38

标签: php mysql arrays search insert

对于PHP而言,我是一个相对新手,经过一些搜索,我似乎无法找到我的问题的答案。

我拥有的是非常基本的,两张桌子'人'和'案例'。我能够插入并搜索一个人(虽然我花了一些时间让它工作!)。现在谈到“案例”我需要首先搜索一个人,我希望搜索结果保持填充在表单中,然后用户将其余的案例信息添加到表单然后提交它。我已经尝试将我的两个代码组合在一起,但我仍然没有成功。

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

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

一切顺利, 克里斯

1 个答案:

答案 0 :(得分:0)

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

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

但是,即使这个建议也没有抓住比第一次出现更复杂的主题表面。如果你有两个同名的客户(名字相同,但人不同),你打算做什么?你如何处理潜在的错误拼写名称,以及由此产生的重复记录?每个人可以有很多病例吗? 这些都是系统问题,也是用户界面人体工程学问题。只有仔细的用户界面设计和系统设计才能有效地克服这些问题! 如果您正在处理可能包含数千条记录的数据库,则需要仔细考虑这些问题。如果你“只”与数百人打交道;那么这可能不是问题!

请告诉我们更多......