PHP搜索然后插入
对于PHP,我是一个相对的新手,在做了一些搜索之后,我似乎找不到问题的答案 我所拥有的是非常基本的两张表格“person”和“case”。我能够插入并搜索一个人(尽管我花了一些时间才让它工作起来!)。现在,当涉及到“案例”时,我需要首先搜索一个人,我希望搜索结果保留在表单中,然后用户将剩余的案例信息添加到表单中,然后提交。我曾尝试将两种代码组合在一起,但仍然没有成功 即使我能找到一种方式来保持输出的填充形式,这对我来说也是一个很大的进步。我将输出保留为打印,以便搜索结果显示在页面上。任何帮助都将不胜感激。当前搜索和插入代码如下所示:PHP搜索然后插入,php,mysql,arrays,search,insert,Php,Mysql,Arrays,Search,Insert,对于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>
首先,尽管应用了preg_replace(),但您的SQL代码可能仍然容易受到SQL注入的攻击。最好对输入使用参数化查询,并使用PHP filter\u输入函数进行净化。(与手工制作的输入消毒剂相比,这种消毒剂失效的可能性要小得多。)
我看不到你的INSERT语句。你在使用MySQL,所以你可以考虑先做一个插入忽略,然后是SELECT../P>
但即使是这一建议也未能触及一个比最初看起来更复杂的问题的表面。如果你有两个同名的客户(名字相同,但人不同),你会怎么做?您将如何处理潜在的名称拼写错误以及由此产生的重复记录?每个人能有很多病例吗?
这些都是系统问题,也是用户界面人机工程学问题。只有仔细的用户界面设计和系统设计才能有效地克服这些问题!
如果您正在处理一个可能有数千条记录的数据库,则需要仔细考虑这些问题。如果你“只”与数百人打交道;那么这可能不是问题
请告诉我们更多…嗨,欢迎来到Stack Overflow。谢谢你发布代码,这是一个很大的帮助。然而,从您的问题中不太清楚这段代码现在在做什么。你能试着澄清一下你目前观察到的行为,以及你想要的行为吗?谢谢你的回答。当然,我有两个独立的代码,一个用于插入,一个用于搜索。所需的功能,我希望它能够搜索一个客户端,一旦搜索完成,它将填充其他文本框。例如,搜索姓氏将填充其他框,如姓名、邮政编码、出生日期等,我不确定我将如何做到这一点。然后,我会将搜索结果与用户在案例字段中输入的其他信息结合起来。@noa因此,首先,您有一个存储客户信息的客户表和一个存储案例信息的案例表。提交案例时,您必须首先查找客户机,找到他们的详细信息,然后键入案例详细信息并保存。我目前在那里有一个echo,它将搜索返回的所有条件列为一个列表,相反,我希望它能够插入表单的文本框中,这样文本框的姓氏就可以用用户的姓氏填充,出生日期与搜索结果出生日期等,我希望这是有意义的。希望有人更熟悉PHP可以帮助。你说的很有道理。谢谢你的回答,很多我没有考虑过的好问题。我正在考虑让用户通过姓氏和ID进行搜索,或者将结果打印到表中,然后用户可以根据生成的表修改用户。该系统只处理少量客户端。不过,客户可能有很多案例。我认为我需要对此进行更多的研究,但如果可能的话,我愿意接受任何建议,仍然非常愿意接受SQL/PHP。再次感谢你,克里斯。如果你的系统“只”设计用于处理少量客户;然后,可以从超链接列表/表格中选择此人(可以按名字或姓氏过滤/排序);然后有一个单独的个人详细信息页面;其中显示个人详细信息的编辑表单、案例列表/表格以及用于输入任何新案例详细信息的表单。基于您的PHP代码,我认为这种类型的解决方案绝对适合您!是的,这是一个非常小的系统。你的建议似乎是最合乎逻辑的方法。因此,在页面上列出整个客户表,在每个客户旁边都有一个姓氏过滤器和一个链接,上面写着“选择”。然后,这将打开一个不同的页面,其中包含一个用于添加案例的表单,案例顶部将显示“客户ID”,该字段将使用上一屏幕中的“选择”按钮显示。然后,用户将用案例详细信息填写表单的其余部分。使用客户端ID将客户端链接到案例。我是太天真还是太野心勃勃了?不,既不太天真也不太野心勃勃。我看差不多了!