php
  • html
  • 2014-09-24 48 views 0 likes 
    0

    我的页面中的代码量越来越大。单独来说,我对所有各个部分的工作原理都有一个很好的理解,但我不明白他们是如何运作的。代码的第一位我有一个SQL数据库拉一个名称,然后将其传递到另一个表,由我所选择的名称进行排序该表:了解PHP POST以及如何提交多个命令

    <form method="post" enctype="multipart/form-data"> 
    <table id="" summary="PAGE HEADER" style='width:20%'> 
    <tr> 
        <th> 
        <?php 
        include('./db.php'); 
        $PM = mysqli_query($con, "SELECT DISTINCT PMName FROM report ORDER BY PMName ASC"); 
        ?> 
        <b style="font-family: Candara, Calibri, Segoe, Optima, Arial, sans-serif;">Choose PM: </b> 
        <br> 
        <span class="custom-dropdown custom-dropdown--red">  
        <Select class="custom-dropdown__select custom-dropdown__select--red" name="PMName" onChange="submit(this.form)"<> 
        <?php 
        while ($row = mysqli_fetch_row($PM)) { 
        $selected = array_key_exists('PMName', $_POST) && $_POST['PMName'] == $row[0] ? ' selected' : ''; 
        $sel = ($table === $row[0]) ? "id='sel' selected" : ""; 
        printf(" <option value='%s' %s>%s</option>\n", $row[0], $selected, $row[0]); 
        } 
        ?> 
        </th> 
    </span> 
    </tr> 
    </select>  
    </form> 
    

    ,因为结果是巨大的,我已经建立在某种“上一页,下一页”交易中,用户一次只能显示10个结果。

    <?php 
    if (isset($_POST['next'])) { 
    $postedLimit = (isset($_POST['next']) ? (int) $_POST['next'] : 0); 
    $nextLimit = $postedLimit + 10; 
    session_start(); 
    $_SESSION['page'] = ((int) $nextLimit/10)+1; 
    $result = mysqli_query($con, "SELECT * FROM report WHERE PMName = '$PMSelection' AND REGNSB <> 0.000 ORDER BY RegNSB DESC Limit $nextLimit,$LimitItems"); 
    } 
    ?> 
    
    <table id="box-table-a" stlye="widgth:20%"> 
    <form method="POST" action=""> 
    <div class="container"> 
    <div class="right">Page <?= $_SESSION['page'] ?> of <?= $totalPages ?> 
    <input type="submit" name="next" value="next" onclick="this.value=<?php echo $nextLimit; ?>"> 
    </div></form></div></table> 
    

    我的问题是,当我点击这个“下一步”按钮,该查询运行:

    $result = mysqli_query($con, "SELECT * FROM report WHERE PMName = '$PMSelection' AND REGNSB <> 0.000 ORDER BY RegNSB DESC Limit $nextLimit,$LimitItems"); 
    

    但是,(原谅整件事是如何工作的我不认识...) $ PMSelection现在是空的,并且没有将任何值传递给SQL查询,所以无论我通过哪个名称过滤掉列表,都会消失。我来自VBA的世界,在那里我定义了一些东西,我可以永远使用它...为什么$ PMSelection有一个值,然后没有价值,对我来说是非常困惑....

    我的问题是:

    1. 为什么$ PMSelection,一旦确定和以前使用的,而不是仍然可后来当我尝试使用它?
    2. 我该如何让$ PMSelection在某处/某种程度上被保持,这样我才能在第二个代码中访问它?
    +0

    如果您执行'$ PMSelection ='whatever'',那么您执行该页面,该值将设置为该页面的生命周期。如果转到新页面,如果该值未被重新分配,则不存在。这就是为什么我们在php中有'$ _SESSION'的原因,因为它允许您以全局方式存储对值的引用。 – Ohgodwhy 2014-09-24 19:49:06

    回答

    0

    在第一页,你必须变量$PMSelection漫天投入到您的$_SESSION这样的:

    if (!empty($_POST['PMName'])) { 
        $_SESSION['PMSelection'] = $_POST['PMName']; 
    } 
    

    和第二页,如果是后来被称为,能得到这个值回这样的:

    $PMSelection = $_SESSION['PMSelection']; 
    

    你可以用你所有的数据做到这一点。

    另一种方式

    如果第一页的<form>元素将派遣它的数据就其提交的第二页,那么你会得到$_POST阵列中的所有输入字段数据时,第二页被调用。但是,你必须改变你的<form>标签是这样的:

    <form action="second_page.php" method="post" enctype="multipart/form-data"> 
    

    ,如果有与此数据表单没有输入元素,数据不敏感,你可以做一个隐藏的输入字段,并把你的数据它,就像这样:

    <input type="hidden" name="PMSelection" value="{value}" /><!-- single data --> 
    
    <input type="hidden" name="PMSelection[]" value="{value1}" /><!-- array data --> 
    <input type="hidden" name="PMSelection[]" value="{value2}" /> 
    <input type="hidden" name="PMSelection[]" value="{value2}" /> 
    [...] 
    
    +0

    我想我不清楚 - 没有任何实际的第二页。当用户点击“上一个”或“下一个”时,我在表中执行该命令: $ result = mysqli_query($ con,“SELECT * FROM report WHERE PMName ='$ PMSelection'AND REGNSB <> 0.000 ORDER BY RegNSB DESC Limit $ nextLimit,$ LimitItems“); $ nextLimit和$ LimitItems显示它们的SQL Entires 0-10,然后是10-20,然后是20-30等。但是,当我单击下一个按钮时,值或$ PMSelection将重置.... – lordterrin 2014-09-24 20:13:25

    +0

    @lordterrin我在你的示例代码中看不到它。你第二次在哪里使用变量?另一件事是,我看不到'$ PMSelection'从哪里来...... – algorhythm 2014-09-24 20:16:07

    +0

    @lordterrin另一件事是,你不需要两页来使用'$ _SESSION'。您也可以在一个页面中使用它。在第一次出现'$ PMSelection'时,把它放在会话中,然后再把它拿回来。 – algorhythm 2014-09-24 20:17:06

    0

    使用$_SESSION如果你想一旦你存储在会话值用它在不同的页面,或在你的语言代码的第二位,那么你就可以使用它。

    相关问题