遇到‘Display match not found?’提示时,如何排查给定PHP代码的问题?
排查你的PHP表单处理代码问题
先看你给出的代码片段,我发现几个关键问题,这些大概率就是导致你看到“Display match not found?”提示或者其他异常的原因:
1. 表单验证逻辑顺序完全颠倒
你现在的判断顺序是先做正则格式验证,再检查输入是否为空,这完全不符合逻辑:
- 如果用户根本没输入内容,
empty($_POST["name"])会返回true,但因为你先执行正则验证,空字符串会直接触发preg_match的失败判断,输出Only letters allowed,永远走不到空值检查的分支。 - 正确的顺序应该是先检查输入是否为空,再做格式验证。
修复后的验证逻辑示例:
$nameErr = ""; if(isset($_POST["name"])){ // 优先检查空值 if(empty($_POST["name"])){ echo "No letter entered";//检查姓名是否为空 } else { $name = test_input($_POST["name"]); // 空值排除后再做格式验证 if (!preg_match("/^[a-zA-Z ]*$",$name)) { echo "Only letters allowed"; } else { // 后续的数组合并逻辑 $veggies = array("Potato", "Cucumber", "Carrot", "Orange", "Green Beans", "onion"); $fruits = array("Apple", "Banana", "orange", "Pineapple", "Grapes", "Watermelon"); $salad = array_merge ($veggies, $fruits); // ... 你的其他业务代码 } } }
2. 数组元素大小写不统一,直接导致匹配失败
看你定义的数组:$veggies里有"Orange"(首字母大写),而$fruits里有"orange"(全小写)。如果后续你有基于$salad数组做匹配查找的逻辑(比如校验用户输入是否属于沙拉食材),大小写不匹配会直接找不到结果,这很可能就是你看到“Display match not found?”的核心原因。
解决方法有两种:
- 统一数组元素的大小写,比如全部转成小写:
同时把用户输入的$veggies = array_map('strtolower', ["Potato", "Cucumber", "Carrot", "Orange", "Green Beans", "onion"]); $fruits = array_map('strtolower', ["Apple", "Banana", "orange", "Pineapple", "Grapes", "Watermelon"]);$name也转成小写再做匹配:$name = strtolower(test_input($_POST["name"])); - 或者在匹配时使用不区分大小写的函数,比如
preg_grep配合i修饰符:$matches = preg_grep("/^$name$/i", $salad);
3. 未定义的test_input函数
代码里用到了test_input($_POST["name"]),但你没有给出这个函数的定义。如果这是你自定义的过滤函数(比如去除空格、转义特殊字符),请确保它已经被正确定义,否则会直接抛出PHP错误,中断代码执行。
一个典型的test_input实现示例:
function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; }
内容的提问来源于stack exchange,提问作者user9657014
相关产品推荐
相关产品推荐

