2017-02-20 104 views
0

为我的网站构建一个消息传递系统,我一直被困在天里。我有这个PHP链接外部PHP文件不能从PHP链接中获取变量

<a href='user_msg.php?hash=$hash'>$name</a>

当你点击链接,它把你带到一个页面,您可以发送消息给你连接到用户(这个连接是由$hash绑定)

在发送消息的页面,我躲到$hash和隐藏input value="$hash",并在数据库与$hash具有以下scripts(他们没有问题,做工精细)

将消息发送到 row
var msg_area = $('.msg_area'); 
    msg_area.scrollTop(msg_area.prop("scrollHeight")); 
     $('#send_rep').submit(function (e) { 
      e.preventDefault(); 
      var $form = $(this), url = $form.attr('action'); 
      var posting = $.post(url, {rep_msg: $('#rep_msg').val(), hash: $('#hash').val()}); 
      posting.done(function (data) { 
       alert('success'); 
      }); 
     }); 

PHP脚本发送

require_once ("db.php"); 
$db = new MyDB(); 
session_start(); 

if (isset($_POST['rep_msg']) && !empty($_POST['rep_msg']) || isset($_POST['hash']) && !empty($_POST['hash'])) 
{ 
$hash = (int)$_GET['hash']; 
$my_id = $_SESSION['log_id']; 
$rep_msg = $_POST['rep_msg']; 
$hash = $_POST['hash']; 


    $rsql = <<<EOF 
INSERT INTO messager (message, group_hash, from_id) VALUES('$rep_msg', '$hash', '$my_id'); 
EOF; 
    $rret = $db->exec($rsql); 

    $ursql = <<<EOF 
SELECT * FROM User WHERE ID = '$my_id'; 
EOF; 


    $urret = $db->query($ursql); 

    while ($urrow = $urret->fetchArray(SQLITE3_ASSOC)) { 
     $from_fname = $urrow['fname']; 
     $from_img = $urrow['image']; 

     header('Location: user_msg.php?hash=' . $hash); 
    } 
} 

以上Ajax Requestphp脚本工作FONE到sedn邮件数据库。

问题不是正从数据库

消息这是我目前使用的script(不工作)

PHP脚本得到消息

require_once ("db.php"); 
$db = new MyDB(); 
session_start(); 

if (isset($_GET['hash']) && !empty($_GET['hash'])) 
{ 
$hash = (int)$_GET['hash']; 
$us_id = $_SESSION['log_id']; 

$mesql =<<<EOF 
SELECT from_id, message FROM messager WHERE group_hash = '$hash'; 
EOF; 
$meret = $db->query($mesql); 
while ($merow = $meret->fetchArray(SQLITE3_ASSOC)) 
{ 
    $from_id = $merow['from_id']; 
    $messages = $merow['message']; 


    $usql =<<<EOF 
SELECT * FROM User WHERE ID = '$from_id'; 
EOF; 
    $uret = $db->query($usql); 

    while ($urow = $uret->fetchArray(SQLITE3_ASSOC)) { 
     $from_fname = $urow['fname']; 
     $from_img = $urow['image']; 


     if ($from_id != $_SESSION['log_id']) { 

      echo " 
<div class='from_bubble'><div class='from_img'><img src='$from_img'></div><div class='from_txt'><p>$messages</p></div></div>"; 
     } else { 
      echo " 
<div class='rep_bubble'><div class='rep_img'><img src='$from_img'></div><div class='rep_txt'><p>$messages</p></div></div>"; 
     } 
    } 
    echo "<input style='display: none' type='text' class='hash' name='hash' value='$hash' id='hash'>"; 
} 
} 

Ajax请求

setInterval(function() { 
    $('.msg_area').load("get_msg.php"); 
}, 2000); 

但get不起作用。我怀疑某些原因,它没有得到$hash。请问是否有解决方案,或者我尝试一些不可能的事情。

任何帮助,将不胜感激。如果需要更多信息,请询问。在此先感谢

回答

0

问题的答案是创造了$hash$_SESSION['hash'] = $hash)一PHP SESSION并与各地session_start()的网站使用此session

0

也许$hash = (int)$_GET['hash'];$hash = (int)$_POST['hash'];
你已经不仅仅是一个$ _GET更多...

+0

没有工作。它没有得到任何东西。该div只是空的。 –

0

在您的Ajax请求您使用POST所以你需要获得与POST作为哈希well:if (isset($_POST['hash']) && !empty($_POST['hash'])) { $hash = (int)$_POST['hash'];

+0

没有工作以及Amarachi。它不会从'数据库'中获取任何'数据' –

+0

您是否启用了error_reporting或任何mysql调试? –

+0

已经解决了这个问题。发布它作为aswer。谢谢@ amarachi –

0

在PHP中使用''表示您正在编写的实际字符串。
如果你想在一个字符串使用PHP变量,你应该使用"",所以尝试改变<a href='user_msg.php?hash=$hash'>$name</a><a href="user_msg.php?hash=$hash">$name</a>

检查的详细信息如下: http://php.net/manual/en/language.types.string.php

那么,你怎么隐藏自己的哈希值在输入?
您可以使用<input value="$_GET['hash']" ... />

在要发送的脚本中,是否输入if?尝试添加语句以查看SQL是否返回任何错误。

希望这会有所帮助。

+0

问题已解决。我'回声'在'php'的链接这是为什么它是''''而不是''“'。 –

+0

好的,解决方案是什么? – Condorcho

+0

将其作为答案发布。非常感谢您的贡献和支持。 –