我正在尝试在搜索我的数据库时在php中传递一个空字段。目前这对我有用,但由于我是mysql
和php
的新手,我希望能为我的项目提供替代或更好的解决方案。
if (isset($_POST['submit'])){
$val1 = trim($_POST['tester']);
if($val1 == NULL){$val1 = "IS NOT NULL";} else {$val1 = "= '$val1'";}
$val2 = trim($_POST['test']);
if($val2 == NULL){$val2 = "IS NOT NULL";} else {$val2 = "= '$val2'";}
}
require ('connect.php');
$query = "SELECT * FROM report WHERE Tester $val1 AND Test $val2";
$testerdb = mysqli_query($db,$query);
答案 0 :(得分:1)
嗯,第一个问题是你没有检查你的$ _POST数据是否确实存在。
我建议您编写某种帮助程序,例如使用以下方法的Request类
public class Machine
{
public Machine() { }
public string Id { get; set; }
public string machineName { set; get; }
public string machineType { set; get; }
public string category { set; get; }
public string make { set; get; }
public string modelNumber { set; get; }
public string information { set; get; }
public string ownersManualLocation { set; get; }
public string safetyChecklistSchedule { set; get; }
public string maintenanceService { set; get; }
public DateTime registrationExpiry { set; get; }
public Machine(string id, string machineName, string machineType)
{
}
}
对于您的示例,如果您使用public static function post($index)
{
return isset($_POST[$index]) ? $_POST[$index] : NULL;
}
public static function get($index)
{
return isset($_GET[$index]) ? $_GET[$index] : NULL;
}
搜索多个字段,我建议您使用数组(AND
),您可以添加字段($wheres = array();
),然后您只需要检查你的数组是否为空。如果没有,请使用$wheres[] = "Tester = $val"
函数将其内爆:implode
)
所以,完整的例子
$where = implode(' AND ', $wheres);
或者你可以google查询构建器
P.S。永远不要忘记逃避您要发送到数据库的数据:)