2017-02-24 87 views
-4

我正在使用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很陌生,花了相當多的時間來解決這個問題,但我被卡住了。

+0

你確定你選擇了正確的桌子?這是什麼形式? –

+0

你應該準備和綁定並使用'$ _GET ['id']'(這是一個超級全局):http://php.net/manual/en/mysqli-stmt.bind-param.php – AbraCadaver

+0

是的,如果我硬編碼circleID值,查詢起作用。 – waldbaum

回答

0

明白爲什麼這是行不通的

假設你發送的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); 
} 

}

+0

我剛試過這個。不幸的是它仍然不起作用。我得到一個'Undefined index:id',然後在錯誤報告中有一個'Undefined variable:circleid'。但是,第一個查詢仍然有效。 'echo $ circleName'給了我正確的名字。 – waldbaum

+0

@waldbaum粘貼精確的代碼或使用jmp.sh分享它 – user3411846

+0

這是確切的代碼:https://gist.github.com/waldbaum/20010f96bb0e39145b1f9b794f2ac725 – waldbaum

1

爲了總結回答其他任何人遇到的問題:

這似乎是我想通過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']; 

和函數內