2016-12-16 37 views
0

只是爲了創建一些上下文:我是一個PHP新手。我正在爲電子商務網站創建一個帳戶系統,其中一個「帳戶」可以與一個或多個「地址」相關聯。我希望用戶能夠添加,更新和刪除地址,並且由於我無法弄清楚如何通過while循環傳遞特定變量,所以我正努力應對後兩種功能。將特定變量從while循環傳遞到另一個PHP文件

這裏就是我的意思是:

while ($row = mysqli_fetch_array($result)) { 

         //address data variables 
         $addrId = $row['id']; 
         $accId = $row['account_id']; 
         $addrName = $row['full_name']; 
         $addr1 = $row['address1']; 
         $addr2 = $row['address2']; 
         $townCity = $row['towncity']; 
         $countyState = $row['countystate']; 
         $postZip = $row['postzip']; 
         $country = $row['country']; 
         $phone = $row['phone']; 

         //$count++; 
         //$_SESSION['address']=array(); 
         $_SESSION['address'] = $addrId;     
         ?> 

         <div class="addrWrapper"> 
          <div class ="large-3 columns callout row"> 
           <?php 
           echo $addrId."</br>"; 
           echo $accId."</br>"; 
           echo $addrName."</br>"; 
           echo $addr1."</br>"; 
           echo $addr2."</br>"; 
           echo $townCity."</br>"; 
           echo $countyState."</br>"; 
           echo $postZip."</br>"; 
           echo $country."</br>"; 
           echo $phone."</br>"; 


           //echo $count; 
           ?> 
           <div class ="large-3 columns"> 
            <a href="PHP/backend/account/addressDelete.php" class="button">Delete</a> 
           </div> 

以上是前端,在現實中我不會顯示所有這些信息給用戶,它只是用於測試。

<?php 
    session_start(); 
    //require_once('config.php'); 

    $dbserver   = "localhost"; 
    $dbusername   = "root"; 
    $dbpassword   = ""; 
    $db     = "TheNameHere"; 

    $conn = new mysqli($dbserver, $dbusername, $dbpassword, $db); 

    //Check connection 
    if ($conn->connect_error){ 
     die("connection failed".$conn->connect_error); 
    } 


    $address = $_SESSION['address']; 

    //$query1=mysqli_query($conn,"DELETE FROM useraddress WHERE id = $addrId"); 

    echo $address; 
    //header("Location: ../../../index.php?page=address"); 
     die(); 
?> 

這是將被用於刪除被調試地址的腳本。基本上,當單擊其中一個地址旁邊的「刪除」按鈕時,它總是會傳遞最大'id'的地址變量(顯然,因爲有一個會話,並且每次循環播放時都會更新,總會產生在'$地址'是列表中的最終地址)。

我一直在回顧這一兩天,現在我已經嘗試了很多不同的解決方案,並且我得出結論,我可能必須以非常不同的方式構造我是如何做到的。

任何指針將不勝感激。

PS。由於安全考慮,我不想通過URL傳遞地址'id',因此需要將該變量的傳遞隱藏給用戶。

+0

你是否試過'$ _SESSION ['address'] [$ addrId] = $ accId'或者相似的文件? – Peon

+0

我的建議是將Id trough html傳遞給一個將刪除該地址的php後端頁面。這表示更好地檢查權限並執行邏輯刪除,而不是物理上的刪除。這樣你就可以想到用複選框刪除多選刪除:) – Goikiu

+0

$ _SESSION ['address'] = $ addrId;您的循環中的 將在每次循環結束時覆蓋它,因此它將始終是數組/結果中的最後一個元素。 – Farkie

回答

1

使用會話是錯誤的答案,你每次循環要覆蓋會話值,最好的解決辦法是使用的查詢字符串,所以刪除鏈接應該是這樣的

<a href="PHP/backend/account/addressDelete.php?id={$addrId}" class="button">Delete</a> 

然後在其他你使用

$addressId = $_GET['id']; 
+0

這不會使地址ID在URL欄中顯示嗎?我不想那樣,謝謝雖然:) – DiZM

+0

哦,我的壞,第一次沒有看到你的問題!你在HTML中找到addrId的地方嗎?請注意,如果用戶在其瀏覽器中查看html頁面的來源,用戶仍然可以看到它。 –

+0

不用擔心:)。 當網站上線時,'$ addrId'和'$ accId'將不可見。據我所知,你不能在瀏覽器中查看PHP代碼..?如果你在說我回應所有值的位置,那只是爲了測試 – DiZM

相關問題