我正在创建一个简单的消息传递应用程序,用户可以在其中登录或注册并与我进行通信。他们的用户名和密码存储在.txt(存储所有人)的行中,我们的会话以一个唯一的用户名.txt逐行存储
当用户注册或登录时,我想将它们从表单重定向到显示下面对话的独立文本区域。但是,当重定向用户时,我不确定如何将他们的用户名(usrNm)发送到下一个php文件,以便显示我们的对话内容(该文件是他们的用户名)。我试过include(index.php)无济于事。如何在不传递html的情况下也包含index.php。最好的方法是什么?
我也对使用''
vs ""
的一般规则感到困惑,我相信""
允许变量在内部而''
适用于其他所有内容?我也被告知html <input type="text"
..文本应该在引号中,如果它没有引号的话有什么好处?如果你想开导我,另一个小问题就在第30行。所有建议都非常感谢!
//index.php
<?php
echo "Login or register. ";
//Ensures form exists and instantiates neccesary variables
if (isset($_POST['usrNm'],$_POST['pass'],$_POST['passConf'])) {
$usrNm = $_POST['usrNm'];
$pass = $_POST['pass'];
$passConf = $_POST['passConf'];
$rec = file('userPass.txt');
//Parses username from users txt file
function usrName($indx){
global $rec;
$usrName = substr($rec[$indx], 0, stripos($rec[$indx], ' '));
return $usrName;
}
//Parses password from users txt file
function passWrd($indx){
global $rec;
$passWrd = trim(substr($rec[$indx], stripos($rec[$indx], ' ')));
return $passWrd;
}
//Attempts to log user in
if(!empty($usrNm)&&!empty($pass)&&empty($passConf)) {
for($i=0;$i<count($rec);$i++) {
//Logs user in
if (($usrNm==usrName($i))&&($pass==passWrd($i))) {
//Outputs admin screen
if ($usrNm=='rich') {
for ($x=1; $x<count($rec); $x++) {
//How to evaluate usrName($x) between link tags?
$usrNameLink = usrName($x);
echo "<a href='$com.php'>$usrNameLink</a> ";
}
break;
}
else header('Location: com.php');
}
//Wrong password
elseif (($usrNm==usrName($i))&&($pass!=passWrd($i))) {
echo 'Wrong password.';
break;
}
//Username doesn't exist
elseif (($i==count($rec)-1)&&($usrNm!=usrName($i))) {
echo 'Username doesn\'t exist.';
}
}
}
//Attempts to register user.
elseif (!empty($usrNm)&&!empty($pass)&&!empty($passConf)) {
for($i=0;$i<count($rec);$i++) {
//Username taken
if ($usrNm==usrName($i)) {
echo 'Username taken.';
break;
}
//Registers user: updates user txt file and creates txt file that saves correspondence between the user and me
elseif (($i==count($rec)-1)&&($usrNm!=usrName($i))&&($pass==$passConf)) {
$handle = fopen('userPass.txt', 'a');
$handle2 = fopen("$usrNm.txt", 'a');
fwrite($handle, $usrNm.' '.$pass."\r\n");
fwrite($handle2, 'Richard: Here you can send me messages.');
fclose($handle);
fclose($handle2);
header('Location: com.php');
}
//Passwords don't match
elseif (($i==count($rec)-1)&&($usrNm!=usrName($i))&&($pass!=$passConf)) {
echo 'Passwords don\'t match.';
}
}
}
//User didn't fill in the password field
else{echo 'Fill in the required fields.';}
}
?>
<form action="index.php" method="post">
Username:<input name="usrNm" type="text"></input><br>
Password:<input name="pass" type="password"></input><br>
Confirm Password (only for registration):<input name="passConf" type="password"></input><br>
<input name="submit" type="submit"></input>
</form>
//com.php
<?php
include('index.php');
if (isset($_POST['msg'])) {
if (!empty($_POST['msg'])) {
echo $usrNm;
}
}
?>
Welcome!
<form action="com.php" method="post">
<textarea name="msg" cols="64" rows="4" type="text"></textarea><br>
<input name="send" type="submit"></input>
</form>
答案 0 :(得分:0)
双引号解析变量是正确的,而单引号则不行。关于该段落中的第二个问题,请参阅here了解有关在引号中包装属性值的规则。除了能够在值中包含特殊字符之外,这样做并没有太多好处。我还建议您阅读this。
关于该段中的第三个问题(小问题),我建议如下:
echo "<a href='$com.php'>".usrName($x)."</a>";
如果您想直接在该行中使用该功能。
关于你的第一个问题,我不知道有任何这样的方法来包含文件而不传递html。 This可能是这样的答案,但我的结果并未经过考验,所以我无法告诉你。
答案 1 :(得分:0)
如果您要将用户名发送到下一个php文件,可以像这样传递变量:
echo "<a href='$com.php?usrName=$usrNameLink&someOtherVariable=2'>$usrNameLink</a> ";
和
else header('Location: com.php?usrName=$usrNameLink&someOtherVariable=2');
然后在下一个php页面上使用$_GET['usrName']
来检索它,就像你使用POST变量一样
除此之外,代达罗斯已经完成了所有其他工作!