在PHP会话中存储复选框值

时间:2016-06-01 18:32:56

标签: php session checkbox

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

一切正常。现在问题。

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

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

我为每个类别添加了另一个脚本!按钮导致这个脚本!

以下是图片的样子(对不起,它是德语)PICTURE

objekte.php

<?php
session_start();
?>

CSS - Stuff

    <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”中得到任何东西来存储会话中的复选框值。

2 个答案:

答案 0 :(得分:0)

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

德语: Es ist keine gute Idee das Problem mit Sessionszulösen。 SessionsistfürdieZeit gedacht,in der man aktuell Online ist und ist solange auch nur aktiv。 Sprich wenn man sich ausloggt ist die Session weg。 EswäredesserdasganzeüberdieSQL Tabelle zu speichern,dort ist es etwas kompakter,sprich mankannüberalldaraufzugreifen。

答案 1 :(得分:0)

如果您只想在页面持续时间内保留复选框的状态,我认为您最好的选择是从一开始就查询所有图片,根据其类别将它们放入页面上的隐藏表格中,并且按钮使用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中存储和检索复选框的状态,具体取决于您需要多长时间保持复选框的状态。但是,如果存储太多,这可能会影响浏览器的性能。