【问题标题】:Passing a specific variable from a while loop to another PHP file将特定变量从 while 循环传递到另一个 PHP 文件
【发布时间】:2017-05-02 04:36:44
【问题描述】:

只是为了创建一些上下文:我是 PHP 新手。我正在为一个电子商务网站创建一个帐户系统,其中一个“帐户”可以与 1 个或多个“地址”相关联。我希望用户能够添加、更新和删除地址,但由于我无法弄清楚如何通过 while 循环传递特定变量,因此我正在努力使用后两个函数。

这就是我的意思:

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”的地址的变量(显然,因为有一个会话并且每次循环播放时都会更新,总是导致in '$address' 是列表中的最终地址)。

这几天我一直在重复这个问题,我尝试了很多不同的解决方案,我得出的结论是,我可能不得不以非常不同的方式来构建它我已经完成了。

任何指针将不胜感激。

PS。出于安全考虑,我不想通过 URL 传递地址“id”,变量的传递需要对用户隐藏。

【问题讨论】:

  • 你试过$_SESSION['address'][$addrId] = $accId还是类似的?
  • 我的建议是将 Id 槽 html 传递到 php 后端页面,该页面将删除该地址。也就是说,最好检查权限并执行逻辑删除,而不是物理删除。这样你就可以想到一个带有复选框的多选删除:)
  • $_SESSION['address'] = $addrId;在您的循环中,每次循环时都会覆盖,因此它将始终是数组/结果中的最后一个元素。
  • @Dainis Abols,是的,我尝试弄乱会话数组,但没有比使用标准“会话”更进一步。正如 Farkie 所说,循环每次都会覆盖会话。
  • @Goiku 我会尝试对你提到的事情做一些研究,干杯。

标签: php html loops variables crud


【解决方案1】:

使用 session 是错误的答案,而且每次循环都会覆盖 session 值,最好的解决方案是使用查询字符串,所以删除链接应该是这样的

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

然后在另一个文件中读取地址 ID 使用

$addressId = $_GET['id'];

【讨论】:

  • 这不会使地址 ID 在 URL 栏中可见吗?我不想要那个,不过谢谢:)
  • 哦,我的错,第一次在您的问题中没有看到这一点!您是否发现在 HTML 中的某处有 addrId?请注意,如果用户在浏览器中查看了 html 页面的源代码,他仍然可以看到它。
  • 不用担心 :)。当网站上线时,'$addrId' 和 '$accId' 将不可见。据我所知,您无法在浏览器中查看 PHP 代码..?如果你说的是我在哪里回显所有值,那只是为了测试
  • 您需要使用 HTTP 请求通知服务器您要删除哪个 ID,您可以按照我在回答中所说的方式使用 GET 请求来执行此操作,或者为每一行制作一个带有隐藏字段的表单该 id,但同样会以 HTML 的形式回显,用户可以从任何现代浏览器查看 HTML 源代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 2012-07-14
相关资源
最近更新 更多