0

我有一个需要用 id 列表更新的视图。因此,我将已选择从视图中删除的值存储在会话变量中,然后进入 mySQL 查询,如下所示。然后,当表单被重置时,值也会从数组中重置。

但它不起作用......这就是我所拥有的。

任何帮助,将不胜感激。

if($_POST['flag']=='flag'){

    //collect deleted rows
    $_SESSION['delete-row'][] = $_POST['idval'];

    //Split session array

    $idavls = join(',' , $_session['delete-row'];



    $sqlDelete = "CREATE OR REPLACE VIEW filtetbl AS SELECT * FROM `".$page['db-name']."`.`leads_tbl` WHERE ".$_SESSION['filter-view']." AND `lead_status` = '1' AND `lead_id` NOT IN (".$idvals.") ORDER BY `lead_added`";


    $result = mysql_query($sqlDelete);

    if($result){

        echo true;
        }
        else{

            echo mysql_error();


        }

        }
4

2 回答 2

0

$_session 一开始就与 $_SESSION 不同。

也不要使用 mysql_query 或类似的(因为它不安全)使用PDO

于 2012-06-29T10:21:07.357 回答
0

如果没有更多信息,这很难纠正(并且有几个错误 - 可能是剪切和粘贴),所以我将一一拆开,你可以从那里开始。

1 - $_SESSION['delete-row'][] = $_POST['idval'];

如果'idval'来自多个输入(即),那么它已经是一个数组,你应该有 $_SESSION['delete-row'] = $_POST['idval']; 如果您在输入数组中循环(即尝试附加许多帖子,那么它是正确的)

2 - $idavls = join(',' , $_session['delete-row'];

$_SESSION (你说这是一种类型),你还需要一个括号/bract ar结尾

    • $sqlDelete = "创建或替换视图 filtetbl AS SELECT * FROM ".$page['db-name'].". leads_tblWHERE ".$_SESSION['filter-view']." AND lead_status= '1' AND lead_idNOT IN (".$idvals.") ORDER BY lead_added";

首先,正如allen213 指出的那样,这是非常不安全的。即使您不使用 PDO 来确保变量的安全,请将所有输入转换为 (int),假设 ID 是整数,或者至少将输入包装在 mysql_real_escape_string() 中。

其次,问题中的逻辑不太合理。你说你想从视图中删除 ID,但是你正在做的是重新创建视图,只删除了 $_SESSION['delete-row'] 中的那些 ID - 所以这可能会重新引入以前从视图中删除的 ID。您实际上需要保留 $_SESSION['delete-row'] 并继续添加以确保下次创建视图时,所有 ID 都会被删除。

我希望这会有所帮助。如果没有,可能需要更多代码(即您使用发送数据的表单,影响会话的任何其他内容等。

于 2012-06-29T11:06:54.643 回答