2015-02-07 104 views
3

我是一个相对的新手,当涉及到PHP和做了一些搜索后,我似乎无法找到我的问题的答案。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> 

一切顺利, 克里斯

+0

嗨,欢迎来到Stack Overflow。感谢发布代码,这是一个很大的帮助。然而,从你的问题来看,这段代码现在在做什么并不是很清楚。你会尝试澄清你正在观察的当前行为以及期望的行为吗? – paulmelnikow 2015-02-07 23:30:49

+0

谢谢你的回复。当然,我有两个单独的代码,一个用于插入,一个用于搜索。我希望它能够搜索客户端所需的功能,一旦搜索完成,它将填充其他文本框。因此,例如寻找姓氏会填充其他框,如姓氏,邮编,出生日期等,我不确定我会如何做到这一点。然后,我会将搜索结果的结果与用户放入案例字段中的附加信息结合起来。 – Chris32 2015-02-08 03:11:52

+0

@noa因此,首先您有一个存储客户信息的客户表以及一个存储案例信息的案例表。提交案例时,您必须先查找客户,然后输入案例详细信息并保存。我目前有一个回声列表,列出所有从搜索返回的标准列表,而不是我希望通过拉入表单的文本框,所以文本框姓将填充用户姓氏,出生日期与搜索结果出生日期等。我希望这是有道理的。 – Chris32 2015-02-08 18:38:48

回答

0

首先,你的SQL代码可能仍然容易受到SQL注入,尽管你的preg_replace的应用程序()。对使用PHP filter_input函数清理的输入使用参数化查询更好。 (这比手工制造的输入消毒剂更有可能失败。)

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

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

请告诉我们更多...

+0

谢谢你的回复,我没有考虑过很多很好的问题。我正在考虑让用户通过姓和ID进行搜索,或者将结果打印到表中,然后用户可以从生成的表中修改用户。该系统只处理少量的客户。客户可以有很多情况。我认为我需要更多地研究这个问题,但如果可能的话,我愿意接受任何建议,仍然非常接近SQL/PHP。再次感谢,克里斯。 – Chris32 2015-02-09 12:21:18

+1

如果您的系统“仅”旨在处理少量客户端;那么从超链接的列表/表格中选择该人员可能是合适的(可以按名字或姓氏过滤/排序);然后有一个单独的人物细节页面;您可以在其中显示个人详细信息的编辑表格,案例列表/表格以及用于输入任何新案例的详细信息的表格。根据你的PHP代码,我认为这种类型的解决方案应该是你一定可能的! – 2015-02-09 12:33:02

+0

是的,它是一个非常小的系统。你的建议似乎是最合乎逻辑的方法。因此,请在带有姓氏过滤器的页面上列出整个客户表格,并在每个表示“选择”的客户旁边列出一个链接。然后,这将打开一个不同的页面,其中包含一个添加案例的表单,在案例的顶部会显示'客户ID',该字段将来自使用前一个屏幕中的'选择'字段。然后,用户将填写表格的其余部分,并提供案例详细信息。用客户端ID将客户端连接到案例。我是太天真还是雄心勃勃? – Chris32 2015-02-09 14:02:57

相关问题