首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于文本输入和下拉选项的PHP查询-而忽略空白?

问基于文本输入和下拉选项的PHP查询-而忽略空白?
EN

Stack Overflow用户
提问于 2014-06-02 17:55:34
回答 2查看 1.2K关注 0票数 1

我有一个包含两个表的数据库,两个表都包含邮政编码。"SY25 6WB“我构建了一个查询,它将查询数据库中输入的一个文本框中的邮政编码,如果邮政编码在数据库中,它会执行一些jquery操作--所有这些都很好,

我想要做的是,让查询首先基于邮政编码运行,然后如果没有找到,如果下拉列表中填充了某个值,则在下一个表中搜索邮政编码。我也在寻找一种忽略空白的方法,所以如果用户输入"SY256WB“或"SY25 6WB”,它将得到相同的结果。

我已经把代码贴在下面了。

表格:

代码语言:javascript
复制
<form action="" method="post">  
Search: <input type="text" name="term" />  
<select name="options">
  <option value="YES">YES</option>
  <option value="NO">NO</option>
</select>
<p>Enter your full postcode with spaces i.e. SA1 3XL</p>
<br />
<input type="submit" value="Submit" />  
</form>  

PHP

代码语言:javascript
复制
<?php
if (!empty($_REQUEST['term'])) {
$term = mysql_real_escape_string($_REQUEST['term']);    
$benefit = mysql_real_escape_string($_REQUEST['YES']);     
$sql = "SELECT * FROM cscopc WHERE POSTCODE LIKE '".$term."'"; 
$r_query = mysql_query($sql);
if ( mysql_num_rows($r_query) > 0 ) {
    echo 'YES';
}
else if ( mysql_num_rows($r_query) == 0 ) {
    $sqltwo = "SELECT * FROM cscowb WHERE PCODE LIKE '".$term."'"; 
    $nextab = mysql_query($sqltwo);
        if ( mysql_num_rows($nextab) > 0 ) {
        echo 'YES WITH OPTION';
    }
        else { 
    echo 'NO';
     }
}
}
?>

如果有人能给我一些启示,说明我是如何做到这一点的,或者为我指出正确的方向以供参考,那将是非常感谢的!

使用PDO更新新查询:

代码语言:javascript
复制
        try {
            $conn = new PDO('mysql:host=localhost;dbname=cscoapp', $username, $password);
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);    
            } 
        catch(PDOException $e) {
            echo 'ERROR: ' . $e->getMessage();
        }
        $id = $_POST['term'];
        if (!empty($_REQUEST['term'])) {
            $stmt = $conn->prepare('SELECT * FROM cscopc WHERE POSTCODE = :id');
            $stmt->execute(array('id' => $id));
                if ($row = $stmt->fetch(PDO::FETCH_OBJ)) {
                    echo 'YEP';
                }
        else if ($_POST['benefits'] == 'yes') { 
            $stmtwb = $conn->prepare('SELECT * FROM cscowb WHERE POSTCODDE = :id');
            $stmtwb->execute(array('id' => $id));
                if ($row = $stmtwb->fetch(PDO::FETCH_OBJ)) {
                echo 'YEP';
            }

    }
        else {
        echo 'nope';
        }
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-02 18:06:07

假设您的数据库中的邮政编码是正确格式化的(即包含空格),那么您将需要对用户输入进行一些验证(这是个好主意)。

这里有一些验证的例子:United Kingdom (GB) postal code validation without regex

一旦验证了用户输入,就可以轻松地格式化邮政编码,以便在数据库中查找它。下面是一个简单的例子:

代码语言:javascript
复制
// remove all spaces and upper case
$userInput = strtoupper(preg_replace('/\s+/', '', $_REQUEST['term']));

if (isValidPostcode($userInput)) {
    // Basic postcode formatting - add a space before the last 3 characters
    $formatted = substr($userInput, 0, -3) . ' ' . substr($userInput, -3);

    // now look up in db using $formatted
} else {
    // invalid postcode!
}

但是,如果数据库中的数据不是那么干净,那么您需要想出一种方法来(a)提高数据质量,或者(b)使用正则表达式搜索表:

代码语言:javascript
复制
// create a regex for your lookup: turns 'SA13XL' into 'SA1\s*3XL'
$regex = sprintf('%s\s*%s', substr($userInput, 0, -3), substr($userInput, -3));

// now look up using the regex
$statement = $db->prepare('SELECT * FROM cscopc WHERE POSTCODE REGEXP :postcode');
$statement->bindParam(':postcode', $regex);

注意:上面的示例使用了PDO,您应该使用PDO,实际上应该使用,因为不推荐使用mysql_函数。参见这个问题: functions in PHP?

票数 2
EN

Stack Overflow用户

发布于 2014-06-03 04:05:42

您可以使用str_replace或preg_replace函数删除空格(‘')的每次出现。我希望您使用str_replace函数。这里我给大家举了几个例子供大家参考。希望这将解决您的查询。

代码语言:javascript
复制
<?php
$str1="SY25 6WB";
$new=str_replace(' ', '', $str1);
echo "<b>Case I:</b><br>Old String : $str1<br>New String : $new";

$str2="    SY25 6WB   ";
$new=str_replace(' ', '', $str2);
echo "<br><b>Case II:</b><br>Old String : $str2<br>New String : $new";

$str3="SY256WB";
$new=str_replace(' ', '', $str3);
echo "<br><b>Case III:</b><br>Old String : $str3<br>New String : $new";

$str4="   SY256WB    ";
$new=str_replace(' ', '', $str4);
echo "<br><b>Case IV:</b><br>Old String : $str4<br>New String : $new";
?>

/*The output will be -

Case I:
Old String : SY25 6WB
New String : SY256WB
Case II:
Old String : SY25 6WB
New String : SY256WB
Case III:
Old String : SY256WB
New String : SY256WB
Case IV:
Old String : SY256WB
New String : SY256WB

*/
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24000494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档