Php 无法回显变量
为什么我不能回应那些东西,比如Php 无法回显变量,php,mysql,Php,Mysql,为什么我不能回应那些东西,比如adm\u no,adm\u dt,等等 require_once("lib/connection.php"); $adm_no = $_POST['adm_no']; if (!$adm_no == "intval") echo "You Entered wrong Admission no Recheack Admission no"; exit(); $clas = $_POST['clas']; $query = "SELECT * FROM $clas W
adm\u no
,adm\u dt
,等等
require_once("lib/connection.php");
$adm_no = $_POST['adm_no'];
if (!$adm_no == "intval") echo "You Entered wrong Admission no Recheack Admission no";
exit();
$clas = $_POST['clas'];
$query = "SELECT * FROM $clas WHERE adm_no = $adm_no";
$result = mysql_query($query);
//searchs the query in db.
while ($result1 = mysql_fetch_array($result)) {
$adm_no = $result1['adm_no'];
$adm_dt = $result1['adm_dt'];
$name = $result1['name'];
$dob = $result1['dob'];
$f_name = $result1['f_name'];
$f_office = $result1['f_office'];
$f_o_no = $result1['f_o_no'];
$m_name = $result1['m_name'];
$m_office = $result1['m_office'];
$addr = $result1['addr'];
};
echo "Admission no = ";
$adm_no;
echo " <p>Admission Date </p>";
echo " <p>Name </p>";
echo " <p>Class </p>";
echo " <p>D.O.B </p>";
echo " <p>Father s name </p>";
echo " <p>Office address </p>";
echo " <p>Office No </p>";
echo " <p>Mother s name </p>";
echo " <p>Office Address </p>";
echo " <p>Address </p>";
echo " <p>Phone no </p>";
require_once(“lib/connection.php”);
$adm_no=$_POST['adm_no'];
如果(!$adm_no==“intval”)回显“您输入了错误的入场号,请不要重新确认入场号”;
退出();
$clas=$_POST['clas'];
$query=“从$clas中选择*其中adm\u no=$adm\u no”;
$result=mysql\u query($query);
//在数据库中搜索查询。
而($result1=mysql\u fetch\u数组($result)){
$adm_no=$result1['adm_no'];
$adm_dt=$result1['adm_dt'];
$name=$result1['name'];
$dob=$result1['dob'];
$f_name=$result1['f_name'];
$f_office=$result1['f_office'];
$f_o_no=$result1['f_o_no'];
$m_name=$result1['m_name'];
$m_office=$result1['m_office'];
$addr=$result1['addr'];
};
echo“入场证号码=”;
$adm_no;
回音“入院日期””;
回声“名称””;
回声“类””;
回声“D.O.B”;
呼应父亲的名字;
echo“办公地址””;
echo“办公室编号””;
回声“母亲的名字””;
echo“办公地址””;
回音“地址””;
回显“电话号码””;
您有语法错误
echo "Admission no = " ;$adm_no ;
应该是
echo "Admission no = " ;
echo $adm_no ;
或
下面的函数会打印字符串,然后对变量不做任何处理:
echo "Admission no = " ;$adm_no ;
你可能要去哪里:
echo "Admission no = " . $adm_no;
除此之外,您是否知道打印逻辑仅在
循环迭代所有结果(如果不止一个)后计算一次。也就是说,变量将只保存最后一条记录的值。语句1:echo“Admission no=”代码>
声明2:$adm\u no代码>
你没有回应这些变量
您可能应该有如下内容:
<p>Admission no = <?php echo htmlspecialchars($adm_no); ?></p>
入场编号=
在循环中分配变量的方式没有任何意义:如果SQL查询返回的行数超过1行,那么代码将简单地替换这些值。您可能希望在循环中回显结果
这里有一个语法错误:echo“Admission no=”$行政主任;代码>。。它应该是echo“入场号=.$adm\u no代码>
当你回显结果时,你实际上并没有回显变量:echo“入院日期:$adm_dt”代码>
因为echo接受参数作为逗号分隔的列表,如
echo $one, "two"
也可以使用逗号,但如果需要输出带有换行符的大块文本,最好使用支持变量替换的herdoc语法
echo <<<HEREDOC
Your text with $variables or {$variables} here
with newlines and other nifty plaintext formatting
HEREDOC;
echo这是您的exit()的问题每次执行代码>时,即使输入$adm\u no
正常
改变这个
if (!$adm_no=="intval")
echo "You Entered wrong Admission no Recheack Admission no" ;
exit();
到
正如我在上一个(已删除的)问题中告诉您的,您有一个SQL注入漏洞。
下面是如何修复它
更改此代码:
编码恐怖
$adm_no = $_POST['adm_no'];
if (!$adm_no == "intval")
echo "You Entered wrong Admission no Recheack Admission no";
exit();
$clas = $_POST['clas'];
$query = "SELECT * FROM $clas WHERE adm_no = $adm_no";
echo "Admission no = ".$adm_no;
这段代码没有SQL注入的危险
$adm_no = mysql_real_escape_string($_POST['adm_no']);
if (!$adm_no == "intval") {
echo "You Entered wrong Admission no Recheack Admission no"; exit();
}
$allowed_tables = array('table1', 'table2');
$clas = $_POST['clas'];
if (in_array($clas, $allowed_tables))
{
$query = "SELECT * FROM `$clas` WHERE adm_no = '$adm_no'";
}
我知道,If
只接受整数,但您前面问题中的If被注释掉了,因此它来了又去,所以在将输入注入查询之前,请始终转义输入
请注意,代码中的if
是如何不起作用的,因为您忘记将正文放在之后,然后
放在括号{}
中,从而导致退出()代码>始终要执行
有关SQL注入的更多信息,请参阅:
以及有关为什么mysql-real-escape_string
或PDO不能使用动态表名的信息
请参阅:
以及:
XSS孔
要修复可能的XSS漏洞,请不要执行以下操作
编码恐怖
$adm_no = $_POST['adm_no'];
if (!$adm_no == "intval")
echo "You Entered wrong Admission no Recheack Admission no";
exit();
$clas = $_POST['clas'];
$query = "SELECT * FROM $clas WHERE adm_no = $adm_no";
echo "Admission no = ".$adm_no;
但要这样做:
echo "Admission no = ".htmlspecialchars($adm_no);
在您的例子中,$adm_no似乎只能保存一个整数,但我没有表定义,因此无法确定这一点。最好是出于安全考虑,始终使用htmlspecialchars
退出动态输出
请参阅:这是什么:如果(!$adm\u no==“intval”)?这需要基本调试,而不是问答网站的帮助。这个查询有效吗?mysql\u error()
说了什么?POST变量是否已提交?您会收到什么错误消息?结果是否包含任何内容?执行循环时是否执行?请不要在问题标题中添加许多大写字母,尤其不要使用诸如“it's emergency!”之类的短语:这不会让我们更快地回答您的问题,只会让人恼火。警告:可能使用$clas
进行SQL注入(也可能使用$adm\u no
):始终正确转义用户输入,或者更好地使用参数化查询!而且(感谢下面的David Dorward),在输出HTML时应该使用htmlspecialchars
来防止XSS。@Ravi:看看@Shakti的答案问题是使用exit
作为第二个语句,而不使用{}