如何隐藏查询字符串从url在php


How to hide query strings from url in php?

我正在尝试创建一个消息系统,当接收者正在阅读消息时,有一个回复消息的链接,如下所示:

<a href=mail.php?action=compose&toid='".urlencode($viewrow['sender'])."'&subject='RE:+".urlencode($viewrow['subject'])."'&message=".urlencode($viewrow['message']).">Reply</a>

发送者,主题和消息正在从mysql中检索。

用户看到如下内容:

http://www.somesite.com/author/mail.php?action=compose&toid='8'&subject='RE:+test+subject'&message=test+message

我需要知道的是,如果有一种方法来隐藏主题和回复url的消息,所以用户将只看到地址栏:

http://www.somesite.com/author/mail.php?action=compose&toid='8'

这是如何从数据库中检索主题,消息和id。

//view message
if (isset($_GET['action']) && $_GET['action'] == inbox) { 
        if(isset($_GET['viewid'])) { 
            $viewid = $_GET['viewid'];
    /*      $viewsql = "select * from mail where reciever='".$userid."' and mail_id=".$viewid; */
            $viewsql = "select * from mail, authors where (mail.sender = authors.id) and (mail.reciever = '".$userid."') and (mail.reciever_deleted ='0') and mail.mail_id = ".$viewid;
            $viewquery = mysql_query($viewsql,$connection) or die(mysql_error());
            $viewrow = mysql_fetch_assoc($viewquery);
            if ($viewrow['reciever'] == $userid) { //check if user is the reciever
            } else { 
                header('Location: mail.php?action=inbox');
                exit; 
            } 
            echo "<h3>Lendo mensagem particular da Caixa de Entrada</h3>";
            echo "<table align='"center'" width='"75%'" class='"sortable'">
                    <tr>
                        <td colspan='2' style='"text-align:center;font-weight:normal;'">Mensagem particular enviada por ".$viewrow['displayname']." em ".date('d/m/y',strtotime($viewrow['created_at'])).".</td>
                    </tr>
                    <tr>
                        <td colspan='2'>
                            <img style='"float:left;padding: 5px 15px 5px 2px;width: 65px;'" src='"".$viewrow['gravatar']."'" alt='"".$viewrow['displayname']."'" title='"".$viewrow['displayname']."'" />
                            <div style='"padding: 8px 5px 2px;'"><span style='"font-size:1.6em;'">&#8594; </span><b>".$viewrow['subject']."</b></div>
                            <div style='"padding: 8px 30px 8px 85px;'">".nl2br($viewrow['message'])."<br /></div>
                            <span style='"float:right;'">
                                <a href=mail.php?action=compose&toid='".urlencode($viewrow['sender'])."'&subject='RE:+".urlencode($viewrow['subject'])."'&message=".urlencode($viewrow['message']).">Responder</a> | <a href=javascript:confirmDelete('mail.php?action=inbox&deleteid=".$viewid."')>Apagar</a>
                            </span>
                        </td>
                    </tr>
                </table>";
            // mark as read by reciever
            $query="update mail set mail_status='read' where reciever = '$userid' and mail_id = '$viewid'"; 
            mysql_query($query,$connection) or die(mysql_error());
        }                   
    }elseif (isset($_GET['action']) && $_GET['action'] == outbox) { ...

我知道我需要使用post,但是如何使用呢?

我试过了,但是没有成功。

对不起我的愚蠢…

<a>不能使用POST向页面发送信息。
但你可以用JavaScript或表单来实现

您不能隐藏查询字符串,但可以通过POST发送数据,这在地址栏中是不可见的。为此,您需要使用表格提交您的数据;虽然Pietroalbini是正确的,您不能使用a元素,但您可以设置button的样式,使其看起来与微不足道的困难相同:

<style>
button {
    background:none;
    border: 0;
    border-bottom:1px solid blue;
    color: blue;
    padding:0;        
}
</style>
<form action="script.php" method="post">
     <input type="text" name="Test"/>
     <button type="submit">Submit</button>
</form>