2014-12-05 142 views
-1

我創建了一個私人消息傳遞系統,但是我有一個討厭的$ _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']; 

取決於它來自哪裏,我可以得到兩個不同的結果。 「mailid」是如果你從一個配置文件被定向的。 「回覆姓名」是如果你點擊了「回覆」你收到的郵件。

現在,如果我嘗試從頭開始發送郵件,我會被告知「用戶名」和「用戶」未定義(因爲我並非來自包含它們的鏈接)。如果我來自一個鏈接,那麼另一個鏈接將不確定,反之亦然。

我可以通過添加isset來解決這個問題,但由於某種原因,它會一直顯示一個「1」而不是應該顯示的用戶名(如果我按照沒有isset的鏈接顯示IS)。

這非常煩人,我一直在努力解決它很多年!

我剛剛意識到isset交易是真的還是假的。因此,「1」是指它是真實的,所以我把它改成

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

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

我想這將是罰款,但仍顯示1?

+1

你在哪裏迴應他們? – 2014-12-05 13:11:09

+0

只是因爲你不知道如何使用功能並不意味着它不能正常工作 – 2014-12-05 13:32:12

+0

@LoganMurphy任何需要的?一個函數顯然總是能正常工作。 – Ben 2014-12-05 13:33:55

回答

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> 

並且不忘記過濾您的輸入。

+0

看到我的「答案」,我用isset看它是否在那裏。如果你可以幫助更多的檢查了這一點,因爲每個人都忽略它大聲笑http://stackoverflow.com/questions/27314895/weird-if-insert-statements-not-working?noredirect=1#comment43089737_27314895 – Ben 2014-12-05 13:28:30

+0

是的你是正確的。 Isset返回布爾值而不是值。只有一個建議使用三元運算符(?:)這很快,然後「如果其他」。此外,您可以像上面那樣縮短您的代碼。 – 2014-12-05 13:34:50

+0

謝謝,我使用了很多if和elses,這將有助於加載:) – Ben 2014-12-05 13:37:50

0

嘗試用 -

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

isset回報boolean

0

也許它的工作原理,如果你還需要檢查!空($ VAR)或嘗試使用filter_input()

$mailid = filter_input(INPUT_GET, 'username'); 
0

我固定它自己(花了2小時,不能在這裏工作了,後來看看吧直接去.lol)

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

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

這是因爲isset只檢查是否它是真的。

因此,它基本上是說「如果用戶名是真實的,可變成爲用戶名」

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;?>"/>