PHP登录系统不发送?
Posted
技术标签:
【中文标题】PHP登录系统不发送?【英文标题】:PHP logon system not sending? 【发布时间】:2020-03-24 06:53:32 【问题描述】:我正在制作一个使用用户名和密码登录的网站 并从该登录页面进入一个单独的“个人资料页面”,该页面将显示玩家用户名密码玩家名等......我相当确定有效
我已经和我的教授讨论了一下。但我还是有点卡住了。 他说我的登录没有将数据发送到我的“会话 php 文件”,这就是“配置文件”应该知道从数据库中选择哪个项目(根据用户名检查)
表名是forumtable
我得到的错误是:
未定义变量:第 14 行 C:\wamp64\www\website project\Profile.php 中的用户名
我的配置文件代码中的第 14 行是:
$query = "SELECT rowid, Username, Password, Playername, Alliance,
FROM forumtable WHERE Username ='$Username'";
这会很长,所以请多多包涵:( 我真的被困住了。
登录页面:
$pfx= NULL;
$msg =NULL;
$sitename= "Player ";
if(isset($_POST['logon']))
$userid = trim($_POST['userid']);
$Pword = trim($_POST['password']);
if ($Username == NULL) $msg = "Username is missing";
if ($Password == NULL) $msg = "PASSWORD is missing";
if (($Username == NULL) AND ($Password == NULL)) $msg = "Username & PASSWORD are missing";
if ($msg == NULL)
$query = "SELECT rowid, Username, Password, Playername, Alliance FROM forumtable WHERE
Username='$Username'";
$result = mysqli_query($mysqli, $query);
if (!$result) $msg = "Error accessing Roster Table " . mysql_error($mysqli);
if (mysqli_num_rows($result) > 0)
list($rowid, $Username,$Password) = mysqli_fetch_row($result);
else $msg = "Username is invalid";
if (($msg == NULL) AND ($Password == $password))
$_SESSION['rowid'] = $rowid;
$_SESSION['Username']= $Username;
$_SESSION['Password'] = $Password;
$_SESSION['Playername']= $Playername;
$_SESSION['Alliance'] = $Alliance;
$logon = TRUE;
$location = "location: $pfx" . '.php?p=member';
$msg = "<font color='green'><b>$name Logon Successful</b></font>";
header($location);
exit;
else $msg = "Invalid Password";
// Logon Screen
$td = "width='20%' align='right'";
$tf = "width='80%' align='left'";
if ($msg == NULL) $msg = "Enter Username and Password";
else if ($logon == FALSE) $msg = "<font color='red'>$msg, please try again</font>";
echo "<form action='$pfx" . ".php?p=logon' enctype='multipart/form-data' method='post'>\n
<table width='1016' align='center' bgcolor='white' cellspacing='10' class='text'>\n
<tr><td $td> </td><td $td> </td></tr>
<tr><td $td> </td><td $tf><b>$sitename Logon</b></td></tr>\n
<tr><td $td> </td><td $td> </td></tr>
<tr><td $td>Username</td> <td $tf><input type='text' name='Username' size='60' maxlength='80'
value=''></td></tr>\n
<tr><td $td>Password</td> <td $tf><input type='password' name='Password' size='12'
maxlength='12' value=''></td></tr>\n
<tr><td $td> </td> <td $tf> </td></tr>\n
<a href='Profile.php'>logon</a>
<tr><td $td> </td> <td $tf> </td></tr>\n
<tr><td $td>Message</td> <td $tf><b>$msg<b></td></tr>\n
</table>\n
</form>\n";
配置文件 php 文件:
include 'ps_session.php';
echo "<p><b>heres your profile</b><br>\n";
// Loop through the forumtable Database
$query = "SELECT rowid, Username, Password, Playername, Alliance,
FROM forumtable WHERE Username ='$Username' ";
$result = mysqli_query($mysqli, $query);
if (!$result) echo "Query Failed [$query] - " . mysqli_error($mysqli);
echo "<table cellspacing='5'>";
while(list($rowid, $Username, $Password, $Playername, $Alliance) =
mysqli_fetch_row($result))
if ($logon) $update = "<a href='ps.php?p=update&r=$rowid'><button>Update</button></a>"; else $update = NULL;
echo "<tr>
<td><b><u>your information</u></b><br>
Username: $Username<br>
Password: $Password</br>
Playername: $Playername<br>
Alliance: $Alliance<br>
$update
</td>
</tr>";
echo "</table>";
// End of Alliance
echo "</td></tr></table>";
会话程序
session_start();
if (isset($_SESSION['user']))
$logon = TRUE;
$sname = $_SESSION['name'];
$suser = $_SESSION['user'];
$splayer = $_SESSION['Playername'];
$sally = $_SESSION['Alliance'];
$srole = 'Member';
else
$logon = FALSE;
$sname = $suser = 'Guest';
$srole = 'Public';
【问题讨论】:
这里有很多问题。您的表单使用链接作为提交机制。这会提交一个 get 请求,但您的处理器正在等待 post 请求。您将Username
分配给会话,但尝试读取user
。您直接将用户输入嵌入到查询中 - SQL 注入攻击!
另外,打开错误报告,很多错误很快就会变得非常明显 - ***.com/a/21429652/296555
另一个 - 您的表单正在提交 Username
,但您的脚本正在等待 userid
。
好的,我检查了代码并进行了调整,但我不明白我将如何发送 post 请求而不是 get 我只是更改 if(isset($_POST['logon' ])) $Username = trim($_POST['username']); $Password = trim($_POST['password']);给他们每个人 $_GET?
使用输入按钮而不是链接。查看<input type="submit" value="logon">
【参考方案1】:
您收到错误是因为您没有定义 $Username
变量。在将其传递给该查询之前,您应该以与定义 $Pword
相同的方式定义它。那是:
$Pword = trim($_POST['password']);
$Username = trim($_POST['username']);
【讨论】:
以上是关于PHP登录系统不发送?的主要内容,如果未能解决你的问题,请参考以下文章