Php 使用通配符在页面加载和表单提交时显示数据库结果
我在尝试在页面加载和表单提交时显示数据库结果时遇到问题。当页面加载时,它会一直给我空白页面,但当我提交表单时,我会得到结果Php 使用通配符在页面加载和表单提交时显示数据库结果,php,regex,Php,Regex,我在尝试在页面加载和表单提交时显示数据库结果时遇到问题。当页面加载时,它会一直给我空白页面,但当我提交表单时,我会得到结果 <?php $alpha = mysql_real_escape_string($_POST['alpha']); $p ="^[".$alpha."]"; if (!isset($p)&&empty($p)){$p = "^[a-z]";} $select = "SELECT u.pname,u.category
<?php
$alpha = mysql_real_escape_string($_POST['alpha']);
$p ="^[".$alpha."]";
if (!isset($p)&&empty($p)){$p = "^[a-z]";}
$select = "SELECT u.pname,u.categoryid,p.amountpaid,p.teller,p.handler,
p.scollection,p.project,p.levies,p.status,q.quarter,q.year,
p.invoice,q.ordinary_cf,q.special_cf,q.cate_id
FROM users u
INNER JOIN tbl_paymentalert p
ON u.categoryid = p.catid
INNER JOIN tbl_quartersummary q
ON p.catid= q.cate_id
WHERE q.quarter = :quarter AND q.year = :year AND pname REGEXP :p
ORDER BY u.pname limit :eu,:limit
";
$q=$conn->prepare($select);
$q->bindValue(':quarter', $quarter, PDO::PARAM_STR);
$q->bindValue(':year', $year, PDO::PARAM_STR);
$q->bindValue(':p', $p, PDO::PARAM_STR);
$q->bindValue(':eu', $eu, PDO::PARAM_INT);
$q->bindValue(':limit', $limit, PDO::PARAM_INT);
$q->execute();
?>
好的。。。所以您将从
$\u POST
获取值
// if you're using mysqli_ or pdo and using a prepared query or data binding
// mysql_real_escape_string is not necessary...
$alpha = mysql_real_escape_string($_POST['alpha']);
// even if $alpha was empty, $p will always be set and will
// never be empty because of the following statement.
// if alpha is empty, $p will be "^[]"
$p ="^[".$alpha."]";
// this code will never happen... so your default won't be set.
if (!isset($p) && empty($p) )
{
$p = "^[a-z]";
}
做一些像
// if `$_POST` is set, use that value, if not use 'a-z'
$alpha = (isset($_POST['alpha'])) ? $_POST['alpha'] : 'a-z';
$p = "^[".$alpha."]";
然后
$q->execute(array($quarter,$year,$p,$e,$limit));
确保设置了这些变量,或者您已经处理了未设置这些变量时发生的情况。这可能会导致您在没有任何解释的情况下无法获得任何结果
(最后一次编辑,我发誓,除非OP要求澄清或什么)尝试pdo做得不错,通常人们会害怕它,而忽略警告。说真的,干得好 那太糟糕了,兄弟。对不起,我刚才读了什么?这里有太多的错误。它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果您选择PDO。您可能想使用。编辑了我的代码和问题。在
$\u POST['alpha']
,$year
,$quarter
中有什么东西不起作用吗?还有,如果你可以继续,把这个问题写进一个准备好的语句中。是的。$\u POST['alpha'],$year,$quarter都有内容,谢谢你的一大堆郁闷。企鹅,它是有效的。我只是觉得我应该包括mysql\u real\u escape\u字符串以增加安全性。这是一个新手想法。@francis:在不需要的时候添加mysql\u real\u escape\u字符串
,有时会导致意外的结果。它基本上是转义字符串,当与准备好的语句一起使用时,您可能会得到一些数据中未预料到的正斜杠。