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
    作为第二个语句,而不使用
    {}