Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于文本输入和下拉选项的PHP查询-是否忽略空白?_Php_Mysql - Fatal编程技术网

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

基于文本输入和下拉选项的PHP查询-是否忽略空白?,php,mysql,Php,Mysql,我有一个包含两个表的数据库,两个表都包含邮政编码,即“SY25 6WB”我建立了一个查询,将查询数据库中输入文本框中的邮政编码,如果邮政编码在数据库中,它会执行一些jquery-一切正常 我的目标是,首先根据邮政编码运行查询,然后如果没有找到,如果下拉列表中填充了某个值,则在下一个表中搜索邮政编码。我也在寻找一种忽略空白的方法,因此,如果用户输入“SY256WB”或“SY256WB”,将得到相同的结果 我已将代码粘贴到下面 表格: 假设数据库中的邮政编码格式正确(即包含空格),则需要对用户输入进

我有一个包含两个表的数据库,两个表都包含邮政编码,即“SY25 6WB”我建立了一个查询,将查询数据库中输入文本框中的邮政编码,如果邮政编码在数据库中,它会执行一些jquery-一切正常

我的目标是,首先根据邮政编码运行查询,然后如果没有找到,如果下拉列表中填充了某个值,则在下一个表中搜索邮政编码。我也在寻找一种忽略空白的方法,因此,如果用户输入“SY256WB”或“SY256WB”,将得到相同的结果

我已将代码粘贴到下面

表格:


假设数据库中的邮政编码格式正确(即包含空格),则需要对用户输入进行一些验证(无论如何,这是一个好主意)

这里有一些验证示例:

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

// 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)使用正则表达式搜索表:

// 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\uuz
函数已被弃用。查看此问题:

您可以使用str\u replacepreg\u replace功能删除空格(“”)的每次出现。我希望您使用str_replace功能。在这里,我给你举了一些例子来帮助你。希望这能解决你的疑问

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

*/

/*输出将是-
案例一:
旧字符串:SY25 6WB
新字符串:SY256WB
案例二:
旧字符串:SY25 6WB
新字符串:SY256WB
案例三:
旧字符串:SY256WB
新字符串:SY256WB
案例四:
旧字符串:SY256WB
新字符串:SY256WB
*/

使用
str_replace
preg_replace
删除空格,除非您也想删除连续空格,否则您需要一些regexthank来获取信息!今晚我读了很多关于PDO的书,但是我很难完全理解它,因为我对PHP/MYSQL非常陌生,所以我到目前为止所遵循的所有示例/学习过程似乎都被低估了——我将继续我的研究并报告。如果你有任何地方,我可以找到在mysql上使用PDO的好例子,他们会很感激的。我似乎已经对PDO(我希望!)了如指掌,很快就会进入验证阶段。我将在这里发布我的更新代码,以供参考,以及任何其他有类似问题的观众,如果你能让我知道我使用了最佳实践等,因为这对meLooks good来说都是全新的。如果您将更新后的PDO更改与上面创建
$formatted
邮政编码的逻辑相结合,您将获得一个赢家:-)
// 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!
}
// 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);
<?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

*/