【问题标题】:Store checkbox values in PHP Sessions在 PHP 会话中存储复选框值
【发布时间】:2016-06-03 00:21:58
【问题描述】:

我必须编写一个包含登录信息的互联网站点。我已经这样做了,而且效果很好。登录后,我为 4 个不同类别(自然、人物、对象、符号)设置了 4 个 HTML 按钮。如果您单击 4 个按钮之一,则会出现一个带有 Whatsapp 表情符号的表格,并在它们旁边有一个复选框。 WhatsApp 表情符号的图像是本地存储的。这些表情符号的路径位于 SQL 数据库中。图片的编号也存储在数据库中。图片的编号也是复选框的名称。这意味着表情符号 1 具有复选框 1,表情符号 2 具有复选框 2,依此类推。如果您单击另一个类别,则图片编号从最后一个类别的最后一个 Emoji 的最后一个编号继续。

这一切都很好。现在来解决我的问题。

例如:如果您选中“自然”类别中的复选框,然后单击另一个类别,然后单击返回“自然”,则不再选中已选中的复选框。

我的想法:在会话中保存复选框。我知道它是如何工作的,但在这种情况下它绝对不起作用,因为我有 4 个不同的类别,并且我无法在 Session 中保存选中的复选框。

我为每个类别都有另一个脚本!按钮指向这个脚本!

这是一张图片(对不起,是德语)PICTURE

objekte.php

<?php
session_start();
?>

CSS - 东西

    <h1>Kategorie bitte w&auml;hlen!</h1>

<form action='<?php echo $_SERVER['PHP_SELF']; ?>' method='_GET'>
<?php
    $vorname = $_SESSION['firstname'];
    $nachname = $_SESSION['lastname'];
    echo "<p id='loggedAs'>Eingeloggt als: " .$vorname. " ".$nachname." "; 
?>
<?php
    echo "<button type='submit' name='ausloggen'>Ausloggen</button>";
?>  
</form>
</p>


<form action="natur.php" method="_GET">
<input type='submit' name='NaturVonObjekte' value='Natur'>
</form>
<form action="objekte.php" method="_GET">
<input type='submit' name='ObjekteVonObjekte' value='Objekte'>
</form>
<form action="personen.php" method="_GET">
<input type='submit' name='PersonenVonObjekte' value='Personen'>
</form>
<form action="symbole.php" method="_GET">
<input type='submit' name='SymboleVonObjekte' value='Symbole'>
</form>
<?php
    if(isset($_GET['ObjekteVonNatur']) && isset($_GET['Natur'])){
        echo "Bin hier";
        $natur = $_GET['Natur'];
        $_SESSION['naturbilder'] = $natur;
    }

    echo "<pre>";
    print_r($_SESSION);
    echo "</pre>\n";

    if(isset($_GET['ObjekteVonNatur']) || isset($_GET['ObjekteVonObjekte'])||isset($_GET['ObjekteVonPersonen'])||isset($_GET['ObjekteVonSymbole'])){

        $db_link = @mysqli_connect ("localhost", "root", "", "emojiwahl");

        if (mysqli_connect_errno()){
            printf("Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());
            exit();
        }

        $sql = "SELECT * FROM emoji WHERE EKat = 1";
        $erg = mysqli_query($db_link, $sql);

        if (! $erg){
            die('Ungültige Abfrage: Vorname nicht vorhanden' . mysqli_error("1"));
        }

        echo '<table border="1">';

        if (mysqli_num_rows($erg) != "0"){
            echo "<tr>";
            for($i = 0; $i<7; $i++){
                echo "<th>Grafik</th> <th>Auswahlbox</th>";
            }
            echo "</tr>";
        }

        for($ii = 0; $ii<7;$ii++){
            while($zeile = mysqli_fetch_assoc($erg)){
                echo "<tr>";
                echo "<td><img src='".$zeile["EPfad"]."'></img></td>";
                echo "<td><input type='checkbox' name='".$zeile["ENr"]."' ></td>";
                for($ii = 0; $ii<6; $ii++){
                    if($zeile = mysqli_fetch_assoc($erg)){
                        echo "<td><img src='".$zeile["EPfad"]."' value='".$zeile["ENr"]."'></img></td>";
                        echo "<td><input type='checkbox' value='".$zeile["ENr"]."' name='objekte[]' ></td>";
                }
            }
                echo "</tr>";
            }
        }
    }
    if(isset($_GET['ausloggen'])){
        session_destroy();
        header('Location:Anmeldung.php');
    }   
?>

natur.php

<?php
session_start();
?>

CSS 材料

<form action="natur.php" method="_GET">
<input type='submit' name='NaturVonNatur' value='Natur'>
</form>
<form action="objekte.php" method="get">
<input type='submit' name='ObjekteVonNatur' value='Objekte'>
</form>
<form action="personen.php" method="_GET">
<input type='submit' name='PersonenVonNatur' value='Personen'>
</form>
<form action="symbole.php" method="_GET">
<input type='submit' name='SymboleVonNatur' value='Symbole'>
</form>

<?php

    echo "<pre>";
    print_r($_SESSION);
    echo "</pre>\n";

    if(isset($_GET['NaturVonNatur']) || isset($_GET['NaturVonObjekte'])||isset($_GET['NaturVonPersonen'])||isset($_GET['NaturVonSymbole'])){    
        $db_link = @mysqli_connect ("localhost", "root", "", "emojiwahl");

        if (mysqli_connect_errno()){
            printf("Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());
            exit();
        }

        $sql = "SELECT * FROM emoji WHERE EKat = 0";
        $erg = mysqli_query($db_link, $sql);

        if (! $erg){
            die('Ungültige Abfrage: Vorname nicht vorhanden' . mysqli_error("1"));
        }

        echo '<table border="1">';
        if (mysqli_num_rows($erg) != "0"){
            echo "<tr>";
            for($i = 0; $i<7; $i++){
                echo "<th>Grafik</th> <th>Auswahlbox</th>";
            }
            echo "</tr>";
        }

        for($ii = 0; $ii<7;$ii++){
            while($zeile = mysqli_fetch_assoc($erg)){
                echo "<tr>";
                echo "<td><img src='".$zeile["EPfad"]."'></img></td>";
                echo "<td><input type='checkbox' value='".$zeile["ENr"]."' name='Natur[]'></td>";
                for($ii = 0; $ii<6; $ii++){
                    if($zeile = mysqli_fetch_assoc($erg)){
                        echo "<td><img src='".$zeile["EPfad"]."'></img></td>";
                        echo "<td><input type='checkbox' value='".$zeile["ENr"]."' name='Natur[]'></td>";
                    }
                }
                echo "</tr>";
            }
        }
    }

    if(isset($_GET['ausloggen'])){
        session_destroy();
        header('Location:Anmeldung.php');
    }

?>

其他 3 个类别的代码看起来与此处几乎相同。我无法在会话中存储某些内容。从脚本“natur”中,我在脚本“objekt”中没有得到任何东西来存储会话中的复选框值。

【问题讨论】:

  • 为了让我们帮助您解决这个问题,我们必须查看一些标记和代码。
  • 抱歉,这里是代码@JayBlanchard。
  • 您希望将复选框的状态保留多长时间?比如勾选一些复选框并刷新页面,当你回到页面时是否应该勾选这些复选框?
  • 我想保留我的复选框的这种状态,但用户仍然按下“注销”按钮,因为那时我会破坏会话。 @Mikey

标签: php session checkbox


【解决方案1】:

如果您只想在页面期间保留复选框的状态,我认为您最好的选择是从一开始就查询所有图像,根据它们的类别将它们放入页面上的隐藏表中,并拥有按钮使用 JavaScript 切换(显示/隐藏)表格。当然,如果你有大量的图片,这不是一个好的选择。

这里有一个简单的说明:

var buttons, tables;

function toggleImages() {
    var button = this;
    // show/hide table depending on whether button's name matches the table's ID
    for (i = 0, len = tables.length; i < len; i++) {
        tables[i].style = tables[i].id === button.name ? 'display: table' : 'display: none'; 
    }
}

window.onload = function (e) {
    buttons = document.getElementsByTagName('button');
    // add event listener to all buttons
    for (i = 0, len = buttons.length; i < len; i++) {
        buttons[i].addEventListener('click', toggleImages);
    }
    tables = document.getElementsByTagName('table');
}

// note: easier and safer to do all this with jQuery
<button name="natures">Natur</button>
<button name="objects">Objekte</button>
<button name="persons">Personen</button>

<table id="natures" style="display: none;">
    <tr>
        <th>Picture</th><th>Checkbox</th>
        <th>Picture</th><th>Checkbox</th>
        <th>Picture</th><th>Checkbox</th>
    </tr>
    <tr>
        <td>Image 1</td><td><input type="checkbox" value="1" ></td>
        <td>Image 2</td><td><input type="checkbox" value="2" ></td>
        <td>Image 3</td><td><input type="checkbox" value="3" ></td>
    </tr>
</table>

<table id="objects" style="display: none;">
    <tr>
        <th>Picture</th><th>Checkbox</th>
        <th>Picture</th><th>Checkbox</th>
        <th>Picture</th><th>Checkbox</th>
    </tr>
    <tr>
        <td>Image 7</td><td><input type="checkbox" value="7" ></td>
        <td>Image 8</td><td><input type="checkbox" value="8" ></td>
        <td>Image 9</td><td><input type="checkbox" value="9" ></td>
    </tr>
</table>

<table id="persons" style="display: none;">
    <tr>
        <th>Picture</th><th>Checkbox</th>
        <th>Picture</th><th>Checkbox</th>
        <th>Picture</th><th>Checkbox</th>
    </tr>
    <tr>
        <td>Image 4</td><td><input type="checkbox" value="4" ></td>
        <td>Image 5</td><td><input type="checkbox" value="5" ></td>
        <td>Image 6</td><td><input type="checkbox" value="6" ></td>
    </tr>
</table>

如果您想在离开页面后仍保留复选框的状态,那么您最好的选择可能是像 FileX 所说的那样将值存储在数据库中。

您还可以在localStorage 中存储和检索复选框的状态,具体取决于您需要保持复选框状态的时间。但是,如果存储太多,这可能会影响浏览器的性能。

【讨论】:

  • 我有一个问题...我是网络编程新手,我不明白 jQuery 和 JavaScript 之间的区别。您似乎在网络编程方面很有经验,所以如果您能帮助我,我将非常感激。谢谢:)
  • 首先,JavaScript 是一种编程语言。大多数编程语言都有库,它们是您可以重用的预先编写的函数和对象的集合。对于 JavaScript,jQuery 是一个库。还有很多others
  • 非常感谢! @Mikey
【解决方案2】:

Sessions 不是解决此问题的好方法。 Sessions 用于实际的登录会话,而不是永远。 将值临时保存在表中,并在操作完成后将其删除。

德语: Esist keine gute Idee das Problem mit Sessions zu lösen。 Sessions ist für die Zeit gedacht, in der man aktuell Online ist und ist solange auch nur aktiv。 Sprich wenn man sich ausloggt ist die Session weg。 Es wäre besser das ganze über die SQL Tabelle zu speichern, dort ist es etwas kompakter, sprich man kann überall darauf zugreifen.

【讨论】:

  • 我希望你是德国人:Die Checkboxen sollen auch nur solange gespeichert werden, bis man sich ausloggt。 Deshalb dachte ich es wäre eine gut Option gewesen.
猜你喜欢
  • 1970-01-01
  • 2018-06-08
  • 2019-08-21
  • 2013-03-02
  • 1970-01-01
  • 2012-12-09
  • 1970-01-01
  • 2018-02-28
  • 2018-06-25
相关资源
最近更新 更多