isset和$ _GET混乱

时间:2014-12-05 13:05:11

标签: php

我已经创建了一个私人消息系统但我在$ _GET时遇到了烦人的问题。

首先,这里是" sendmail.php"的完整代码。用于表单发送邮件的页面

<?php
include("header.php");
include("connect.php");

$mailid = $_GET['username'];
$replyname = $_GET['user'];

?>

<form action="send.php" method="post" name="sendpm">
<table>
<tr>
  <td>
     <font color='orange'>To</font>
  </td>
  <?php IF ($mailid != ''){ ?>
  <td>
     <input type="text" name="touser" id="touser" value="<?php echo $mailid;?>"/>
  </td>
  <?php }elseif($replyname != ''){ ?>
  <td>
     <input type="text" name="touser" id="touser" value="<?php echo $replyname;?>"/>
  </td>
  <?php }else{ ?>
  <td>
     <input type="text" name="touser" id="touser" value="<?php echo $replyname;?>"/>
  </td>
  <?php } ?>
</tr>
<tr>
  <td>
     <font color='orange'>Subject</font>
  </td>
  <td>
     <input type="text" name="subject" id="subject" />
  </td>
</tr>   
<tr>
  <td>
     <font color='orange'>Message</font>
  </td>
  <td>
     <textarea name="message" cols="60" rows="10" id="message"></textarea>
  </td>
</tr>
<tr>
  <td colspan="2">
     <input type="submit" value="Send PM" />
  </td>
</tr>
</table>
</form>

<?php
include("footer.php");
?>

好的,你可以在这里看到

$mailid = $_GET['username'];
$replyname = $_GET['user'];

我可以根据它的来源获得两种不同的结果。 &#34; mailid&#34;如果您是从个人资料中导演的话。 &#34;回复姓名&#34;如果你点击了#34;回复&#34;收到你收到的信息。

现在,如果我尝试从头开始发送邮件,我会被告知&#34;用户名&#34;和&#34;用户&#34;未定义(因为我没有来自包含它们的链接)。如果我来自一个链接,那么另一个将是未定义的,反之亦然。

我可以解决&#39;这可以通过添加isset但由于某种原因,继续显示&#34; 1&#34;而不是应该显示的用户名(如果我遵循没有isset的链接,则显示IS。)

这非常烦人,而且我已经尝试解决它多年了!

我刚刚意识到isset交易的真假。所以&#34; 1&#34;意味着它是真的,所以我把它改成了

IF(isset($_GET['username'])){
$mailid = $_GET['username'];
}

IF(isset($_GET['user'])){
$replyname = $_GET['user'];
}

我认为这样会好,但仍显示1?

5 个答案:

答案 0 :(得分:0)

尝试 -

$mailid = isset($_GET['username']) ? $_GET['username'] : false;
$replyname = isset($_GET['user']) ? $_GET['user'] : false;

isset返回boolean

答案 1 :(得分:0)

如果您还检查!empty($ var)或尝试使用filter_input()

,也许它可以正常工作
$mailid = filter_input(INPUT_GET, 'username');

答案 2 :(得分:0)

我自己修好了(用了2个小时就把它解决了,发布到这里然后马上看看......)

IF(isset($_GET['username'])){
$mailid = $_GET['username'];
}

IF(isset($_GET['user'])){
$replyname = $_GET['user'];
}

这是因为isset只会检查它是否真实。

所以它基本上说&#34;如果用户名是真的,变量就变成用户名&#34;

答案 3 :(得分:0)

我在您的代码中看不到isset,因此您不清楚如何使用它。

通常你会这样(我更喜欢empty而不是isset):

$mailIdOrName = "";

if (!empty($_GET['username'])) {
    $mailIdOrName = $_GET['username'];
} elseif (!empty($_GET['user'])) {
    $mailIdOrName = $_GET['user'];
}

/* Later you will not need if-elseif-else */

<input type="text" name="touser" id="touser" value="<?php echo $mailIdOrName;?>"/>

答案 4 :(得分:0)

我想知道你是如何使用isset的。如果您正在尝试这样的事情

$mailid = isset($_GET['username']);
$replyname = isset($_GET['user']);

然后它将返回布尔值。

试试这个。

<?php
include("header.php");
include("connect.php");
?>
<form action="send.php" method="post" name="sendpm">
<table>
<tr>
  <td>
     <font color='orange'>To</font>
  </td>
  <td>
     <input type="text" name="touser" id="touser" value="<?php echo isset($_GET['username'])?$_GET['username']:$_GET['user']; ?>"/>
  </td>
</tr>
<tr>
  <td>
     <font color='orange'>Subject</font>
  </td>
  <td>
     <input type="text" name="subject" id="subject" />
  </td>
</tr>   
<tr>
  <td>
     <font color='orange'>Message</font>
  </td>
  <td>
     <textarea name="message" cols="60" rows="10" id="message"></textarea>
  </td>
</tr>
<tr>
  <td colspan="2">
     <input type="submit" value="Send PM" />
  </td>
</tr>
</table>
</form>

并且不要忘记过滤您的输入。