打开php文档时不断收到php错误通知

打开php文档时不断收到php错误通知,php,mysql,Php,Mysql,我有一个php表单,但每次打开它所在的php文档时,我都会收到以下php注意事项错误: 注意:未定义索引:第37行/web/stud/u0867587/MOBILEPHP/exam_interface.php中的sessionid 注意:第38行未定义索引:moduleid in/web/stud/u0867587/MOBILEPHP/exam_interface.php 注意:第39行的/web/stud/u0867587/MOBILEPHP/exam_interface.php中未定义索引:

我有一个php表单,但每次打开它所在的php文档时,我都会收到以下php注意事项错误:

注意:未定义索引:第37行/web/stud/u0867587/MOBILEPHP/exam_interface.php中的sessionid

注意:第38行未定义索引:moduleid in/web/stud/u0867587/MOBILEPHP/exam_interface.php

注意:第39行的/web/stud/u0867587/MOBILEPHP/exam_interface.php中未定义索引:teacherid

注意:第40行的/web/stud/u0867587/MOBILEPHP/exam_interface.php中未定义索引:studentid

注意:第41行的/web/stud/u0867587/MOBILEPHP/exam_interface.php中未定义的索引:grade

当我单击submit按钮时,通知会消失,但是我需要做什么才能在打开php文档时,在未定义的索引上没有通知错误

以下是编码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<title>Exam Interface</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>

<form action="exam_interface.php" method="post" name="sessionform">        <!-- This will post the form to its own page"-->
<p>Session ID: <input type="text" name="sessionid" /></p>      <!-- Enter Session Id here-->
<p>Module Number: <input type="text" name="moduleid" /></p>      <!-- Enter Module Id here-->
<p>Teacher Username: <input type="text" name="teacherid" /></p>      <!-- Enter Teacher here-->
<p>Student Username: <input type="text" name="studentid" /></p>      <!-- Enter User Id here-->
<p>Grade: <input type="text" name="grade" /></p>      <!-- Enter Grade here-->
<p>Order Results By: <select name="order">
<option name="noorder">Don't Order Results</option>
<option name="ordersessionid">Session ID</option>
<option name="ordermoduleid">Module Number</option>
<option name="orderteacherid">Teacher Username</option>
<option name="orderstudentid">Student Username</option>
<option name="ordergrade">Grade</option>
</select>
<p><input type="submit" value="Submit" /></p>
</form>

<?php

$username="u0867587";
$password="xxxxxxx";
$database="mobile_app";

mysql_connect('localhost',$username,$password);

@mysql_select_db($database) or die("Unable to select database");

$sessionid = $_POST['sessionid'];
$moduleid = $_POST['moduleid'];
$teacherid = $_POST['teacherid'];
$studentid = $_POST['studentid'];
$grade = $_POST['grade'];

$result = mysql_query("SELECT * FROM Module m INNER JOIN Session s ON m.ModuleId = s.ModuleId JOIN Grade_Report gr ON s.SessionId = gr.SessionId JOIN Student st ON gr.StudentId = st.StudentId WHERE ('$sessionid' = '' OR gr.SessionId = '$sessionid') AND ('$moduleid' = '' OR m.ModuleId = '$moduleid') AND ('$teacherid' = '' OR s.TeacherId = '$teacherid') AND ('$studentid' = '' OR gr.StudentId = '$studentid') AND ('$grade' = '' OR gr.Grade = '$grade')");

$num=mysql_numrows($result);    

echo "<table border='1'>
<tr>
<th>Student Id</th>
<th>Forename</th>
<th>Session Id</th>
<th>Grade</th>
<th>Mark</th>
<th>Module</th>
<th>Teacher</th>
</tr>";

while ($row = mysql_fetch_array($result)){

 echo "<tr>";
  echo "<td>" . $row['StudentId'] . "</td>";
  echo "<td>" . $row['Forename'] . "</td>";
  echo "<td>" . $row['SessionId'] . "</td>";
  echo "<td>" . $row['Grade'] . "</td>";
  echo "<td>" . $row['Mark'] . "</td>";
  echo "<td>" . $row['ModuleName'] . "</td>";
  echo "<td>" . $row['TeacherId'] . "</td>";
  echo "</tr>";
}

echo "</table>";

mysql_close();


 ?>

</body>
</html>

考试界面
会话ID:

模块编号:

教师用户名:

学生用户名:

等级:

按以下方式订购结果: 不要命令结果 会话ID 模块号 教师用户名 学生用户名 等级


这是因为表单尚未发布,而这些值为空。替换为以下内容:

$sessionid = isset($_POST['sessionid']) ? $_POST['sessionid'] : "";
$moduleid = isset($_POST['moduleid']) ? $_POST['moduleid'] : "";
$teacherid = isset($_POST['teacherid']) ? $_POST['teacherid'] : "";
$studentid = isset($_POST['studentid']) ? $_POST['studentid'] : "";
$grade = isset($_POST['grade']) ? $_POST['grade'] : NULL;
在用于数据库查询之前,必须对其进行消毒,以保护您的应用程序免受SQL注入攻击

$sessionid = mysql_real_escape_string($sessionid);
$moduleid = mysql_real_escape_string($moduleid);
$teacherid = mysql_real_escape_string($teacherid);
$studentid = mysql_real_escape_string($studentid);
$grade = mysql_real_escape_string($grade);
强烈建议从数据库调用中删除
@
,因为它会隐藏这些调用可能导致的错误消息。相反,使用
ini\u集(“显示错误”,0)以避免在生产代码的屏幕上显示错误

// Remove the @
@mysql_select_db(...)

这是因为表单尚未发布,而这些值为空。替换为以下内容:

$sessionid = isset($_POST['sessionid']) ? $_POST['sessionid'] : "";
$moduleid = isset($_POST['moduleid']) ? $_POST['moduleid'] : "";
$teacherid = isset($_POST['teacherid']) ? $_POST['teacherid'] : "";
$studentid = isset($_POST['studentid']) ? $_POST['studentid'] : "";
$grade = isset($_POST['grade']) ? $_POST['grade'] : NULL;
在用于数据库查询之前,必须对其进行消毒,以保护您的应用程序免受SQL注入攻击

$sessionid = mysql_real_escape_string($sessionid);
$moduleid = mysql_real_escape_string($moduleid);
$teacherid = mysql_real_escape_string($teacherid);
$studentid = mysql_real_escape_string($studentid);
$grade = mysql_real_escape_string($grade);
强烈建议从数据库调用中删除
@
,因为它会隐藏这些调用可能导致的错误消息。相反,使用
ini\u集(“显示错误”,0)以避免在生产代码的屏幕上显示错误

// Remove the @
@mysql_select_db(...)
更换这些线路:

$sessionid = $_POST['sessionid'];
$moduleid = $_POST['moduleid'];
$teacherid = $_POST['teacherid'];
$studentid = $_POST['studentid'];
$grade = $_POST['grade'];
与:

另外,我建议您删除粘贴在这里的源代码中的密码

更换这些线路:

$sessionid = $_POST['sessionid'];
$moduleid = $_POST['moduleid'];
$teacherid = $_POST['teacherid'];
$studentid = $_POST['studentid'];
$grade = $_POST['grade'];
与:


另外,我建议您删除粘贴在这里的源代码中的密码

第一次打开php文件时,已经为变量分配了$\u POST值。 然而,目前还没有制定这些标准。
在赋值之前尝试一个if(isset($\u POST['name']),以防止出现这种情况。

第一次打开php文件时,您已经为变量赋值了$\u POST值。 然而,目前还没有制定这些标准。 在分配之前尝试使用if(isset($\u POST['name']),以防止出现这种情况。

您需要提供:

$sessionid 
$moduleid 
$teacherid 
$studentid
$grade
变量的默认值如下所示:

$sessionid = 0;
$moduleid = 0;
$teacherid = 0;
$studentid = 0;
$grade = 0;
$sessionid = $_POST['sessionid'];
$moduleid = $_POST['moduleid'];
$teacherid = $_POST['teacherid'];
$studentid = $_POST['studentid'];
$grade = $_POST['grade'];
然后使用它们获取$\u POST数组值,如下所示:

$sessionid = 0;
$moduleid = 0;
$teacherid = 0;
$studentid = 0;
$grade = 0;
$sessionid = $_POST['sessionid'];
$moduleid = $_POST['moduleid'];
$teacherid = $_POST['teacherid'];
$studentid = $_POST['studentid'];
$grade = $_POST['grade'];
因此,最终代码将是:

$sessionid = 0;
$moduleid = 0;
$teacherid = 0;
$studentid = 0;
$grade = 0;
$sessionid = $_POST['sessionid'];
$moduleid = $_POST['moduleid'];
$teacherid = $_POST['teacherid'];
$studentid = $_POST['studentid'];
$grade = $_POST['grade'];
您需要提供以下信息:

$sessionid 
$moduleid 
$teacherid 
$studentid
$grade
变量的默认值如下所示:

$sessionid = 0;
$moduleid = 0;
$teacherid = 0;
$studentid = 0;
$grade = 0;
$sessionid = $_POST['sessionid'];
$moduleid = $_POST['moduleid'];
$teacherid = $_POST['teacherid'];
$studentid = $_POST['studentid'];
$grade = $_POST['grade'];
然后使用它们获取$\u POST数组值,如下所示:

$sessionid = 0;
$moduleid = 0;
$teacherid = 0;
$studentid = 0;
$grade = 0;
$sessionid = $_POST['sessionid'];
$moduleid = $_POST['moduleid'];
$teacherid = $_POST['teacherid'];
$studentid = $_POST['studentid'];
$grade = $_POST['grade'];
因此,最终代码将是:

$sessionid = 0;
$moduleid = 0;
$teacherid = 0;
$studentid = 0;
$grade = 0;
$sessionid = $_POST['sessionid'];
$moduleid = $_POST['moduleid'];
$teacherid = $_POST['teacherid'];
$studentid = $_POST['studentid'];
$grade = $_POST['grade'];

这是因为您正在分配变量,即使它们没有设置

使用
isset()
空()用于
$\u POST[]
变量

if isset($_POST['variable']){
    $variable  = $_POST['variable'];
}

不要让它保持打开状态。

这是因为即使未设置变量,您也在分配变量

使用
isset()
空()用于
$\u POST[]
变量

if isset($_POST['variable']){
    $variable  = $_POST['variable'];
}

不要让它保持打开状态。

第一次打开页面时,代码将尝试查找它期望发布的数据,但由于您尚未提交表单,因此它不在那里。您需要检查$u POST['sessionid'];发布etc,然后将值分配给变量

第一次打开页面时,代码将尝试查找它期望发布的数据,但由于您尚未提交表单,因此它不在那里。您需要检查$u POST['sessionid'];发布etc,然后将值分配给变量

我建议在开始时只使用一个验证

if (!empty($_POST)) {
    // Get variables from $_POST
}

我建议在开始时只使用一个验证

if (!empty($_POST)) {
    // Get variables from $_POST
}

第一个答案有效,但您的答案与第一个答案相同,只是您没有包含第一个答案中的SQL注入。但是您当然也会回答我的问题,所以谢谢您第一个答案有效,但您的答案与第一个答案相同,只是您没有包括第一个答案中的SQL注入。但你当然也会回答我的问题,谢谢you@user992147很高兴提供帮助,欢迎使用Stack Overflow。请通过单击复选标记将答案标记为已接受,并对所有您认为有用的答案进行投票。@user992147乐于帮助,欢迎使用Stack Overflow。请单击复选标记将答案标记为已接受,并对所有您认为有用的答案进行更新。或者您可以编写类似isPost()的函数,如:function isPost(){return!empty($\u POST);},或者您可以编写类似isPost()的函数,如:function isPost(){return!empty($\u POST);}