Checkboxen ausgeben und teilweise gecheckt setzen

TheSun851

Mitglied
Moin Moin miteinander,

Ich möchte aus der Datenbank alle Artikel mit Namen und Artikelnummer anzeigen lassen und die als gecheckt setzten die der angegebene Benutzer beim Login dann auch sehen kann. Also nicht jeder Benutzer soll alle Artikel sehen können aber um das ganze zu verwalten sollten schon alle artikel zu sehen sein.

Diese änderungen sollen später über ein Update / Insert INTO in der Datenbank gespeichert werden. Aber das ist jetzt nicht mein Problem.

Mein Problem ist das mir mein code zwar alle Artikel anzeigt aber entweder alle als Gecheckt setzt oder keinen oder Das er mir immer nur den ersten Eintag ausgibt und das vielleicht mehrmals.

Jetzt frga ich mich natürlich wo mein Denkfehler ist.

$row2 liefert die Werte aus der Abfrage der Artikel.
( ID | ArtikelName | ArtikelNummer )
$row1[9] liefert die ArtikelID von der Tabelle wo die ArtikelID mit den BenutzerID's gespeichert sind.

PHP:
$n = 0;
       while($row2=mysqli_fetch_array($erg2)){
               if($row1[8] = '1' && $row1[9] = $row2[0]){
                   echo "<td>";
                   echo "<input type=\"checkbox\" name=\"ArtNr[]\" checked=\"checked\" value=\"$row2[0]\">&nbsp; $row2[1] - $row2[2]</input>";
                   echo "</td>";
                   $n++;
                   if($n == 3){
                   echo "</tr><tr>";
                   $n=0;
                   }
               }else{
                   echo "<td>";
                   echo "<input type=\"checkbox\" name=\"ArtNr[]\" value=\"$row2[0]\">&nbsp; $row2[1] - $row2[2]</input>";
                   echo "</td>";
                   $n++;
                   if($n == 3){
                       echo "</tr><tr>";
                       $n=0;
                   }
               }          
           }

Vielen dank im Vorraus.
Liebe Grüße
Sunny
 
Hi

Vergleiche in if sind mit == nicht =

Sonst ist deine Frage nicht ganz einfach zu verstehen. Bitte mehr Code, und eine Beschreibung welche Tabellen mit welchen Spalten es in der DB gibt.
 
hi,
wenn ich mit == arbeite hab ich halt keine checkbox gechecked.

Der vollständige code von der Seite lautet aktuell:
PHP:
<!DOCTYPE html>
<?php
   session_start();
   include("pa.inc.php");
?>
<html>
<head>
   <title>Benutzer Verwalten</title>
   <link type="text/css" rel="stylesheet" href="pa.css">
</head>
<body>
<?php   
if(pruefePrivilegien() == "1"){

   $id=mysqli_connect("localhost", "root", "");
   $res = mysqli_select_db($id, "pruefautomatisierunga");
   $sql1 = "SELECT * from benutzer INNER JOIN benutzerArtikelPrivilegien ON benutzer.ID=BenutzerID WHERE BenutzerID=$_GET[BenutzerID] GROUP BY ArtikelID, PrivilegID";
   $sql2 = "SELECT * from artikel WHERE ArtikelArtID LIKE 1";
   $sql3 = "SELECT * from artikel WHERE ArtikelArtID LIKE 2";

   $erg1 = mysqli_query($id, $sql1);
   $erg2 = mysqli_query($id, $sql2);
   $erg3 = mysqli_query($id, $sql3);
   
   if($row1=mysqli_fetch_array($erg1)){

   echo "<form action=\"verwaltungA.php\" method=\"POST\">\n";
       echo "BenutzerID: <input style=\"width: 250px\" type=\"text\" name=\"BenutzerID\" readonly value=\"$row1[0]\"><br>";
       echo "Benutzername: <input style=\"width: 250px\"type=\"text\" name=\"AccountName\" value=\"$row1[1]\"><br>";
       echo "Vorname: <input style=\"width: 250px\"type=\"text\" name=\"Vorname\" value=\"$row1[2]\"><br>";
       echo "Nachname:<input style=\"width: 250px\"type=\"text\" name=\"Nachname\"value=\"$row1[3]\"><br>";
       echo "Passwort: <input style=\"width: 250px\"type=\"text\" name=\"password\" value=\"$row1[4]\"><br>";

       echo "<p>Welche Rechte sollen ge&auml;ndert werden?</p>";

       echo "<table align=\"center\">";
           echo "<tr>";
               echo "<td>";
               if($row1[8] = '3'){
                   echo "<input type=\"checkbox\" name=\"registr\" checked=\"checked\" >&nbsp;Benutzer Registrieren</input><br><br>";
               }else{
                   echo "<input type=\"checkbox\" name=\"registr\">&nbsp;Benutzer Registrieren</input><br>";
               }
               echo "</td>";
               echo "<td>&nbsp;</td>";
               echo "<td>";
               if($row[8] = '4'){
                   echo "<input type=\"checkbox\" name=\"verwalten\" checked=\"checked\" >&nbsp;Benutzer Rechte Verwalten</input><br><br>";   
               }else{
                   echo "<input type=\"checkbox\" name=\"verwalten\">&nbsp;Benutzer Rechte Verwalten</input><br><br>";
               }
               echo "</td>";
           echo "</tr>";

           echo "<tr>";
               echo "<td> &nbsp;</td>";
               echo "<td>&nbsp;</td>";
               echo "<td> &nbsp;</td>";
           echo "</tr>";
       echo "</table>";

       echo "<table  border=\"1\" align=\"left\">";
           echo "<tr>";
               echo "<td>&nbsp;</td>";
               echo "<td>";
               if($row1[8] = '1'){
                   echo "<input type=\"checkbox\" name=\"ft\" checked=\"checked\" >&nbsp;Funktionstest</input><br><br>";
               }else{
                   echo "<input type=\"checkbox\" name=\"ft\">&nbsp;Funktionstest</input><br>";
               }
               echo "</td>";
               echo "<td>&nbsp;</td>";
           echo "</tr>";
           echo "<tr>";

           $n = 0;
      
           while($row2=mysqli_fetch_array($erg2)){
               if($row1[8] = '1' && $row1[9] = $row2[0]){
                   echo "<td>";
                   echo "<input type=\"checkbox\" name=\"ArtNr[]\" checked=\"checked\" value=\"$row2[0]\">&nbsp; $row2[1] - $row2[2]</input>";
                   echo "</td>";
               }else{
                   echo "<td>";
                   echo "<input type=\"checkbox\" name=\"ArtNr[]\" value=\"$row2[0]\">&nbsp; $row2[1] - $row2[2]</input>";
                   echo "</td>";
               }
                   
               $n++;
               if($n == 3){
                   echo "</tr><tr>";
               $n=0;   }   
           }
       
           echo "</tr>";
       echo "</table>";

       echo "<table  border=\"1\" align=\"right\">";
           echo "<tr>";
               echo "<td>&nbsp;</td>";
               echo "<td>";
               if($row[8] = '2'){
                   echo "<input type=\"checkbox\" name=\"kp\" checked=\"checked\" >&nbsp;Kundenpr&uuml;fung</input><br><br>";
               }else{
                   echo "<input type=\"checkbox\" name=\"kp\">&nbsp;Kundenpr&uuml;fung</input><br>";
               }   
               echo "</td>";
               echo "<td>&nbsp;</td>";
           echo "</tr>";
           echo "<tr>";

           $m = 0;
       
           while($row3=mysqli_fetch_array($erg3)){   
           
               echo "<td>";
               echo "<input type=\"checkbox\" name=\"ArtNr[]\" value=\"$row3[0]\">&nbsp; $row3[1] - $row3[2]</input>";
               echo "</td>";
               $m++;
               if($m == 3){
                   echo "</tr><tr>";
                   $m=0;
               }
           }   
           
           echo "</tr>";
       echo "</table>";
?>

       <table align="center">
           <tr>
               <td> &nbsp;</td>
               <td>&nbsp;</td>
               <td> &nbsp;</td>
           </tr>
           <tr>
               <td>&nbsp;</td>
               <td>
<?php            if($row1[5] == '1'){
                   echo "<input type=\"checkbox\" name=\"aktiv\" checked=\"checked\" >&nbsp;Benutzerkonto Aktiv</input><br><br>";   
               }else{
                   echo "<input type=\"checkbox\" name=\"aktiv\">&nbsp;Benutzerkonto Aktiv</input><br><br>";
               }
?>               </td>
               <td>&nbsp;</td>
           </tr>
       </table>
   
       <input style="width:250px" type="submit" name="aenerungsEingabe" value="Benutzerdaten &auml;ndern" onClick="window.location.href='verwaltungA.php'">
       <input style="width:250px" type="button" value="zur&uuml;ck zur Verwaltuns&uuml;bersicht" onClick="window.location.href='verwaltungA.php'">
<?php
   echo "</form>";
    } else {
           echo "Es ist ein Fehler aufgetreten. Bitte wenden Sie sich an einen Verantwortlichen";
           echo "<input style=\"width:250px\" type=\"button\" value=\"zur&uuml;ck zur Verwaltuns&uuml;bersicht\" onClick=\"window.location.href='verwaltungA.php'\"> ";
        }
}else{
   echo "Zurgiff verweigert";
   echo "<br><input style=\"width:250px\" type=\"button\" value=\"zur&uuml;ck zur Auswahl\" onClick=\"window.location.href='auswahl.php'\">";
}
?>
</body>
</html>

Die tabellen sind:

benutzer => ID AccountName Vorname Nachname Passwort kontoAktiv

artikel =>ID ArtikelName ArtikelNr PrüfID ArtikelArtID
mit den werten =>
1- A -1000 - 1 -1
2 - B -2000 - 2 -1
3 - C -3000 - 3 - 1
4 - D - 4000 - 4- 1
5 - E -5000 - 5 - 1
6 - F -6000 - 1 - 2
7 - G -7000 - 2 - 2
8 - H - 8000 - 3 - 2
9 - I - 9000 - 4 - 2
10 - J - 1010 - 5- 2

benutzerArtikelPrivilegien =>ID BenutzerID PrivilegID ArtikelID
mit den werten =>
1 - 1 - 3- NULL
2- 1 - 4 NULL
3 - 1 - 1- 1
4 - 1- 1- 2
5 - 1- 1- 3

Mein Ziel ist es jetzt das Alle Artikel mit der ArtikelArtID '1' angezeigt werden aber nur die Gecheckt sind die in der Tabelle benutzerArtikelPrivilegien vorhanden sind.

Also im Aktuellen beispiel sollen Die Artikel A bis E angezeigt werden aber nur A, B und C sollen Gecheckt sein.
Auch in hinblick darauf das man ja auch mehr als nur 5 oder 10 Artikel hat.

Ich hoffe ich konnte meine frage bzw mein Anliegen jetzt besser darstellen.

Grüße
Sunny
 
Also. ein paar allgemeine Sachen:
a) Noch immer = vs. ==
b) $sql1: Variablen von PHP so direkt einfügen ist ein Sicherheitsproblem (SQL-Injection. Lösungen gibts genug hier und anderswo)
c) Mit Unicode wäre &uuml; usw. nicht mehr nötig. (UTF8 im Editor für die Codedatei einstellen, außerdem ein entsprechendes <meta>-Tag, und ggf. die DB-Spalten und -Verbindung umstellen :google:)
d) Statt $row1[nummer] wäre $row1['spaltenname'] auch möglich, mehr lesbar, und auch noch ok wenn die Abfrage später geändert wird.
e) Kein Fehler, aber die ganzen \" könnten einfache " sein wenn der String selber mit ' statt " begrenzt wird. (Dafür darf es dann keine ' ohne \ geben. Weitere Unterschiede sind auch dass PHP-Variablen und Sachen wie \n nicht verarbeitet werden, also bei solchen Strings gehts nicht)

Und zum Denkfehler ... die ganze Strukturierung von SQL-Abfragen und Schleifen passt nicht so wirklich. Wenn du überall == verwendest wird plötzlich gar nichts mehr funktionieren (naja, tut es jetzt ja auch nicht).

Zuerst hast du eine Abfrage über benutzer x benutzerArtikelPrivilegien und schaust dir aber nur die erste Ergebniszeile davon an (weil sonst der ganze Benutzer mehrmals abgearbeitet wird... aber du verlierst dabei evt. Privilegien, wenn der Benutzer mehr als 1 hat). Sinnvoller wäre zuerst nur eine Abfrage für Benutzername usw., ohne Privilegien, damit die Benutezrdaten ausgegeben werden können.

Dann gibts ein paar Einzelrechte wie Registrieren usw. ... hier macht eine Schleife über alle Datensätze von irgendwas keinen Sinn. Was jetzt aber hilfreich wäre, 3 einzelne Abfragen "hat der Benutzer das Privileg soundso". Wenn eine Ausgabezeile komtm dann checked, sonst nicht. (Und damit drei gleichartige Abfragen, bei denen nur eine Nummer immer anders ist, nicht unnötig langsam sind: Prepared Statements) (Langfristig wäre vielleicht eine dynamische Rechtesache besser... also die Rechtenamen usw. auch in der DB speichern, statt in PHP hardkodieren, und dann alle in der DB gespeicherten Rechte durchschleifen).

Für die Artikel1-Sache, die jetzt kommt: Mit einem passenden Join auf benutzerArtikelPrivilegien bewirken, dass man aus der DB gleich ein 1 oder 0 pro Zeile mitbekommt, ob es gecheckt sein darf. (Was hier jedenfalls keinen Sinn macht, alle Artikel einfach so durchgehen und an den Benutzerdaten erkennen probieren, ob es checked sein soll).

Der Rest ähnlich...
 
Zuletzt bearbeitet:
hi,

ok ich danke dir.
Dann bau ich mal ein bissen um aber die Privilegien sind schon in einer Tabelle extra gespeichert.
In der Tabelle benutzerArtikelPrivilegien sind ja nur die ID's vom Benutzer und den privilegien und Artikel gespeichert.

Grüße
Sunny
 
Moin Moin,

Ich hab jetzt mein Skript aufgeräumt und die Fuktionen ausgelagert.

Jetzt schaut es wie folgt aus:
PHP:
<!DOCTYPE html>
<?php
   session_start();
   include("pa.inc.php");
?>
<html>
<head>
   <meta charset="utf-8">
   <title>Benutzer Verwalten</title>
   <link type="text/css" rel="stylesheet" href="pa.css">
</head>
<body>
<?php  
# Benutzerdaten ausgeben
   holeBenutzerdaten($_GET['BenutzerID']);
# Checkbox Benutzer Registrieren
   echo "<table align='center'><tr>";
       echo "<td>";
       if(BenutzerRegistrieren($_GET['BenutzerID']) == '3'){
           echo "<input type='checkbox' name='registr' checked='checked' >&nbsp;Benutzer Registrieren</input>";
       }else{
           echo "<input type='checkbox' name='registr'>&nbsp;Benutzer Registrieren</input>";
       }
       echo "</td>";
       echo "<td>&nbsp;</td>";
       echo "<td>";
# Checkbox Benutzer Verwalten
       if(BenutzerVerwalten($_GET['BenutzerID']) == '4'){
           echo "<input type='checkbox' name='verwalten' checked='checked' >&nbsp;Benutzer Rechte Verwalten</input>";  
       }else{
           echo "<input type='checkbox' name='verwalten'>&nbsp;Benutzer Rechte Verwalten</input>";
       }
       echo "</td>";
       echo "</tr>";

       echo "<tr>";
           echo "<td> &nbsp;</td>";
           echo "<td>&nbsp;</td>";
           echo "<td> &nbsp;</td>";
       echo "</tr>";
   echo "</table>";  
# Tabelle Funktionstest
   echo "<table  border='1' align='left'>";
       echo "<tr>";
           echo "<td>&nbsp;</td>";
           echo "<td>";
           if(pruefeFT($_GET['BenutzerID']) == '1'){
               echo "<input type='checkbox' name='ft' checked='checked' >&nbsp;Funktionstest</input>";
           }else{
               echo "<input type='checkbox' name='ft'>&nbsp;Funktionstest</input>";
           }
           echo "</td>";
           echo "<td>&nbsp;</td>";
       echo "</tr>";
       echo "<tr>";

       ftArtikel($_GET['BenutzerID']);
              
       echo "</tr>";
   echo "</table>";
# Tabelle KundenSpezifische Prüfung
   echo "<table  border='1' align='right'>";
       echo "<tr>";
           echo "<td>&nbsp;</td>";
           echo "<td>";
               if(pruefeKP($_GET['BenutzerID']) == '2'){
                   echo "<input type='checkbox' name='kp' checked='checked' >&nbsp;Kundenpr&uuml;fung</input>";
               }else{
                   echo "<input type='checkbox' name='kp'>&nbsp;Kundenpr&uuml;fung</input>";
               }  
           echo "</td>";
           echo "<td>&nbsp;</td>";
       echo "</tr>";
       echo "<tr>";

       kpArtikel();
          
       echo "</tr>";
   echo "</table>";

# Checkbox Benutzerkonto Aktiv
       echo "<table align='center'>";
       echo "<tr><td><br>";
           if (kontoAktiv($_GET['BenutzerID']) == '1') {
               echo "<input type='checkbox' name='aktiv' checked='checked' >&nbsp;Benutzerkonto Aktiv</input><br><br>";  
           }else{
               echo "<input type='checkbox' name='aktiv'>&nbsp;Benutzerkonto Aktiv</input><br><br>";
           }
       echo "</td></tr></table>";

# Buttons zur Bestätigung der Änderungen oder zum zurückkehern
   echo "<input style='width:250px' type='submit' name='aenerungsEingabe' value='Benutzerdaten ändern' onClick='window.location.href=\"verwaltungA.php\"'><br>";
   echo "<input style='width:250px' type='button' value='zurück zur Verwaltunsübersicht' onClick='window.location.href=\"verwaltungA.php\"'>";

   echo "</form>";
  
?>
</body>
</html>

Die Funktion für kpArtikel(); muss noch schreiben aber das ist nicht so wichtig da sie fast Identisch ist zu ftArtikel($_GET['BenutzerID']);

Und die Fuktion sieht jetzt wie folgt aus:
PHP:
function ftArtikel($BID){
   include "db.inc.php";
   $con=mysqli_connect($sqlServer, $sqlBenutzer, $sqlPasswort, $dbName);
   $sql3 = "SELECT artikel.ID, ArtikelNr, ArtikelName, ArtikelID from Artikel INNER JOIN benutzerArtikelPrivilegien on ArtikelID=artikel.ID WHERE ArtikelArtID LIKE '1' && BenutzerID Like '$BID' && PrivilegID LIKE '1' ";
   $erg3 = mysqli_query($con, $sql3);

   $n = 0;
   while($Artikel=mysqli_fetch_array($erg3)){
        if($Artikel['ArtikelID'] == $Artikel['ID'] ){
               echo "<td>";
               echo "<input type='checkbox' name='ArtNr[]' checked='checked' value='$Artikel[ID]'>&nbsp; $Artikel[ArtikelName] - $Artikel[ArtikelNr]</input>";
               echo "</td>";
           }else{
               echo "<td>";
               echo "<input type='checkbox' name='ArtNr[]' value='$Artikel[ID]''>&nbsp; $Artikel[ArtikelName] - $Artikel[ArtikelNr]</input>";
               echo "</td>";
           }
           $n++;
           if($n == 3){
               echo "</tr><tr>";
               $n=0;
           }
       }
}

Jetzt habe ich es zwar hinbekommen das mir die Funktion alles Checked was der Benutzer sehen darf an Artikel. Aber leider Zeigt er mir nicht mehr alle artikel in der Tabelle an.

Hat jemand eine Idee wie ich es hinbekommen das er mir alle Artikel anzeigt aber nur die gecheked setzt die der Benutzer aus sehen darf?
Ich dreh mich irgendwie im Kreis. Entweder bekomme ich alle artikel angezeigt oder ebend nur die die der Benutzer sehen kann. Ich will halt das man in dieser Verwaltung die Artikel über checkbox freischalten kann oder ebend auch wieder entziehen. Dazu sollten halt alle angezeigt werden.

Grüße
Sunny
 
Moin Moin,
hab meinen Fehler gefunden. Es lag an meiner SQL abfrage. Die hat mir nur die werte ausgegeben die Der benutzer sehen kann und nicht alle. Ich brauchte also keinen INNER JOIN sondern einen LEFT JOIN.

Grüße
Sunny
 
Zurück