2016-12-16 23 views
0

コンテキストを作成するだけです。私はPHPの新人です。私は、「アカウント」に1つ以上の「アドレス」を関連付けることができるeコマースウェブサイトのアカウントシステムを作成しています。ユーザーがアドレスを追加、更新、削除できるようにしたいと思っています。後の2つの関数では、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」を持つアドレスの変数を渡します(明らかに、1つのセッションが存在し、ループが再生されるたびに更新され、 '$ address'はリストの最後のアドレスです)。

私は今、数日間戻ってこれに来て守ってきた、私はさまざまなソリューションの多くを試みたと私は非常に異なった私はおそらくこれを構造化する必要がありますするつもりだという結論に達しましたしました私のやり方

すべてのポインタは非常に高く評価されます。

PS。私は、セキュリティ上の懸念からURLに「id」というアドレスを渡したくないので、この変数を渡すことをユーザーから隠す必要があります。セッションを使用して

+0

$ _SESSION ['address'] [$ addrId] = $ accId'またはそれに類似していますか? – Peon

+0

私の提案は、Idトラフhtmlをそのアドレスを削除するPHPバックエンドページに渡すことです。それはパーミッションをよりよくチェックし、物理的な削除ではなく、論理的な削除を行います。この方法で、チェックボックスで複数選択削除を考えることができます:) – Goikiu

+0

$ _SESSION ['address'] = $ addrId;ループ内の はループするたびに上書きされるので、常に配列/結果の最後の要素になります。 – Farkie

答えて

1

は間違った答えである、とあなたはセッション値にあなたループするたびに上書きされ、最善の解決策は、クエリ文字列を使用しているので、削除リンクは他に続いて、この

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

ようにする必要がありますあなたがアドレスIDを読み取ったファイル

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

URLバーにアドレスIDが表示されますか?私はそれを望んでいない、感謝:) – DiZM

+0

ああ私の悪い、あなたの質問で初めて見ていない!あなたはHTMLのどこかにaddrIdを持っているのですか?彼がブラウザでhtmlページのソースを見た場合、ユーザはそれをまだ見ることができることに注意してください。 –

+0

心配なし:)。 '$ addrId'と '$ accId'はサイトが公開されても表示されません。私が知っている限り、ブラウザでPHPコードを見ることはできません。あなたがすべての値をエコーする場所について話しているのであれば、それはちょうどテストのためです。 – DiZM

関連する問題