声明为全局变量的PHP变量在函数内不起作用
我正在使用HTTP查询字符串来传递一个id。我将它分配给的变量完全适用于紧随其后的查询。然而,它并不在我在同一个文件中定义的任何函数中工作,尽管我将变量声明为全局函数。声明为全局变量的PHP变量在函数内不起作用
$circleID = $_GET['id'];
$circleID
很适合这个查询:
// Retrieve circle data
$circleDataResult = mysqli_query($connection," SELECT name, description
FROM circle
WHERE circleID = '$circleID' ");
$circleData = mysqli_fetch_array($circleDataResult);
$circleName = $circleData['name'];
$circleDesc = $circleData['description'];
它没有下面的函数内的工作,虽然。 $circleID
似乎在这种情况下是空的:
if(isset($_POST['action']) && !empty($_POST['action'])) {
$action = $_POST['action'];
switch($action) {
case 'removeUser' : removeUser(); break;
case 'makeAdmin' : makeAdmin(); break;
case 'revokeAdmin' : revokeAdmin(); break;
case 'makeOwner' : makeOwner(); break;
}
}
function removeUser(){
global $connection;
global $circleID;
$thisUserID = $_POST['id'];
$removeUserFromCircle = " DELETE
FROM circle_participants
WHERE circleID = '$circleID' AND userID = '$thisUserID' ";
if (mysqli_query($connection, $removeUserFromCircle)) {
echo "You removed " . getName($thisUserID) . " from this circle";
} else {
echo "Error deleting record: " . mysqli_error($connection);
}
}
道歉,如果这是一个很小的问题。我对PHP很陌生,花了相当多的时间来解决这个问题,但我被卡住了。
明白为什么这是行不通的
假设你发送的GET请求一个页面
$a = $_GET['variable'];
echo $a ; // this will echo the variable
exit;
现在你正在再次发布请求到该页面
$a=$_POST['variable'];
echo $a; // will print data if there exist data in the given variable
exit;
现在,既然您想访问发布数据中的先前获取数据,则必须将会话中的数据保存到会话中,因为在接下来的请求中,来自先前请求的所有数据都将为lo ST
所以在页面
session_start()
$circleid = $_GET['id'];
$_SESSION['cirlceid'] = $circleid;
的起点和删除功能
function removeUser(){
global $connection;
$circleID = $_SESSION['circleid']
$thisUserID = $_POST['id'];
$removeUserFromCircle = " DELETE
FROM circle_participants
WHERE circleID = '$circleID' AND userID = '$thisUserID' ";
if (mysqli_query($connection, $removeUserFromCircle)) {
echo "You removed " . getName($thisUserID) . " from this circle";
} else {
echo "Error deleting record: " . mysqli_error($connection);
}
}
我刚试过这个。不幸的是它仍然不起作用。我得到一个'Undefined index:id',然后在错误报告中有一个'Undefined variable:circleid'。但是,第一个查询仍然有效。 'echo $ circleName'给了我正确的名字。 – waldbaum
@waldbaum粘贴精确的代码或使用jmp.sh分享它 – user3411846
这是确切的代码:https://gist.github.com/waldbaum/20010f96bb0e39145b1f9b794f2ac725 – waldbaum
为了总结回答其他任何人遇到的问题:
这似乎是我想通过GET从HTTP查询str中检索的id值正如user3411846指出的那样,POST请求会覆盖/设置值为空。因此,当代码通过AJAX执行时,circleID被设置为null。 使用会话变量与if(isset){}
一起解决了问题!
这是代码位,我改变:的
if(isset($_GET['id'])){
$_SESSION['circleid'] = $_GET['id'];
}
代替:代替
function removeUser(){
...
$circleID = $_SESSION['circleid'];
...
}
:
function removeUser(){
...
global $circleID;
...
}
$circleID = $_GET['id'];
和函数内
你确定你选择了正确的桌子?这是什么形式? –
你应该准备和绑定并使用'$ _GET ['id']'(这是一个超级全局):http://php.net/manual/en/mysqli-stmt.bind-param.php – AbraCadaver
是的,如果我硬编码circleID值,查询起作用。 – waldbaum