2017-02-21 3 views
0

Ich habe ein Formular mit Kontrollkästchen, die verwendet werden, um Daten aus MySQL auszuwählen. Ich möchte auch, dass die Kontrollkästchen aktiviert bleiben, wenn der Benutzer dies getan hat. Zusätzlich dazu werden diese Checkboxen aus einer mysql select generiert. Jeder Benutzer verschiedene Kontrollkästchen hat auf der Grundlage ihrer Berechtigungsstufen usw.change checkbox checked via Session-Variable

Also habe ich diesen Code arbeiten:

<form method="post" id="someselect"> 
    <?php 

    function checked() { 
     if (in_array("somestring", $_SESSION['specificvalue'])) { 
      return "checked"; 
     }; 
    } 

    $i = 0; 
    while ($row = $result->fetch_assoc()) { 
     echo "<input id='specificvalue' type='checkbox' " . checked() . " name='specificvalue[]' value='" . $row['specificvalue'] . "'>" . $row['longvalue'] . "<br>"; 
    }; 

    mysqli_close($con); 

    //$_SESSION['specificvalue']=implode("','",$specificvalue); 
    $_SESSION['specificvalue'] = $specificvalue; 
    ?> 
    <input type="submit" value="Submit"> 
    </p> 
</form> 

Es funktioniert, erzeugt spezifische Kontrollkästchen Benutzer und die function checked() arbeitet auch mit dem exeption that statt in_array("somestring", $_SESSION['subunit']), würde ich gerne verwenden in_array($row['subunit'], $_SESSION['subunit']), die einfach nicht funktioniert. Ich bin zu noob, um zu verstehen, warum oder eine bessere Lösung zu finden. Der Punkt davon wäre, eine Checkbox-Liste zu erzeugen und bereits die Kästchen zu überprüfen, die zuvor in der Sitzungsvariablen gespeichert wurden.

Im Moment mit diesem Arbeitscode. Wenn ich die Liste der Kontrollkästchen habe und ich das Kästchen mit specificvalue "somestring" ankreuze, werden alle Kontrollkästchen aktiviert, wenn das Kontrollkästchen Formular generiert wird.

Ich denke, ich wäre in der Lage, jquery dafür zu verwenden, aber Google gibt mir verschiedene Arten von Lösungen, die nicht in meinem verwendet werden können. Ich kann die Checkboxen auch nicht manuell schreiben, weil es insgesamt 70 von ihnen gibt und sie variieren in der Zeit. Ich möchte sie autopopulated erhalten, wenn die mysql Datenbank aktualisiert wird.

+0

Nr. Es gibt eine Menge von Includes, die in dieser Frage nicht enthalten sind. Die Sitzung und alle Variablen funktionieren gut. die einzige Frage ist, wie die checked-Werte korrekt über jede Checkbox-Zeile mit while-Schleife – Gusmar

+0

Sitzung wurde bereits gestartet – Gusmar

+0

fast, anstelle von checked = 'überprüft' ich nur überprüft. Es scheint zu funktionieren, aber nicht genau alle überprüften Kästchen – Gusmar

Antwort

1

Der Grund, warum Sie in_array($row['subunit'], $_SESSION['subunit']) in Ihrer Funktion nicht verwenden können, ist, dass $row['subunit'] nicht im Bereich der Funktion existiert, es ist daraus definiert. Sie können den Wert des Kontrollkästchens übergeben, wenn Sie die Funktion checked() für die bestimmte Zeile aufrufen. So, das wäre:

function checked($value) { 
    if (in_array($value, $_SESSION['specificvalue'])) { 
     return "checked"; 
    } 
} 

Und der Ruf:

while($row = $result->fetch_assoc()) 
{ 
    echo "<input id='specificvalue' type='checkbox' ".checked($row['subunit']). 
    " name='specificvalue[]' value='". $row['specificvalue'] . "'>" . 
    $row['longvalue']."<br>"; 
} 
+0

danke. Ich hatte bereits zwei While-Loops mit, wenn, aber das ist mehr sauber. – Gusmar

1

Wenn Sie es mit $row['subunit'] verwenden möchten, können Sie dies nicht mit dem Funktionsumfang tun, da $ row innerhalb der Funktion checked() nicht zugänglich ist. Dazu müssen Sie den Wert $row['subunit'] in der Funktion als Argument definieren. Wie folgt:

function checked($valueToSearch) 
{ 
    if (in_array($valueToSearch, $_SESSION['specificvalue'])) 
     return "checked"; 
} 

Und Sie müssen es aus der Schleife jedes Mal übergeben, wenn Sie den Scheck anrufen.

while($row = $result->fetch_assoc()) 
{ 
    echo "<input id='specificvalue' type='checkbox' ".checked($row['subunit'])." name='specificvalue[]' value='". $row['specificvalue'] . "'>" .$row['longvalue']."<br>"; 
}; 

Ich hoffe, es würde helfen.

Verwandte Themen