[英]External PHP file not get variable from PHP link
为我的网站构建一个消息传递系统,我被困了好几天。 我有这个PHP
链接
<a href='user_msg.php?hash=$hash'>$name</a>
当您单击链接时,它将带您到一个页面,您可以在该页面中向与您连接的用户发送消息(此连接由$hash
绑定)
在用于发送消息的页面中,我将$hash
隐藏并隐藏了input value="$hash"
并使用以下scripts
将消息发送到数据库中带有$hash
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 Request
和php
脚本可以将消息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);
但是获取不起作用。 我怀疑出于某种原因,它没有得到$hash
。 请对此有解决方案,还是我尝试一些不可能的事情。
任何帮助,将不胜感激。 如果需要更多信息,请询问。 提前致谢
也许$hash = (int)$_GET['hash'];
将是$hash = (int)$_POST['hash'];
而且您不止一个$ _GET ...
在您的Ajax请求您使用POST
,所以你将需要获得与哈希POST
还有: if (isset($_POST['hash']) && !empty($_POST['hash'])) { $hash = (int)$_POST['hash'];
在PHP中使用''
表示您正在编写的实际字符串。
如果要在字符串中使用PHP变量,则应使用""
,因此请尝试将<a href='user_msg.php?hash=$hash'>$name</a>
更改为<a href="user_msg.php?hash=$hash">$name</a>
检查此以获得更多信息: http : //php.net/manual/zh/language.types.string.php
然后,如何在输入中隐藏哈希?
您可以使用<input value="$_GET['hash']" ... />
在发送的脚本中,是否输入if? 尝试添加语句以查看SQL是否返回任何错误。
希望这可以帮助。
问题的答案是为$hash
创建一个PHP SESSION
( $_SESSION['hash'] = $hash
),并通过session_start()
在整个站点上使用此session
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.