carl7n
Goto Top

Php Function für Statusabfrage aus MySQL

Hi,

ich bringe mir gerade anhand verschiedener Webtutorials selbst PHP und MySQL bei. Das klappt grundsätzlich schon ganz gut. Allerdings komme ich gerade nicht darauf, wie ich folgende Situation am besten lösen kann:

Eine PHP Datei liest bestimmte Werte aus einer MySQL Datenbank aus, generiert automatisch eine Tabelle und zeigt dort die entsprechenden Werte an. Der Code sieht so aus:

 (...)
 while ($row = mysql_fetch_array($query))
  {
    echo "<tr>";  
    echo "<td>".$row[id]."</td>";  
    echo "<td>".$row[room]."</td>";  
    echo "<td>".$row[task]."</td>";  
    echo "<td>".$row[who]."</td>";  
    echo "<td>".$row[status]."</td>";  
    echo "<td>".$row[deadline]."</td>";  
    echo "<td><a href='#'>link 1</a></td>"; (((diese Zeile dient nur Testzwecken und wird später entfernt)))  
  }

Die Zeile

echo "<td>".$row[status]."</td>";   

soll insofern abgeändert werden, dass statt des Statuswertes (entweder "0" oder "1") eine dem Wert entsprechende Graphik inkl. Link angezeigt wird.

Momentan sieht die Ausgabe folgendermaßen aus
3d63e3cf3808b3af84a5c00e5eedd6d8

Die function muss dann ja ungefähr so aussehen:

 if (HIER WEISS ICH NICHT, WIE ICH DEN STATUS PRO ZEILE AUS BEDINGUNG EINGEBEN SOLL(a lá "Wenn Status == 0 tue folgendes"))  
 {
 echo "<a href='LINK ZUM ÄNDERN DAS WERTES VON 'X' AUF 'Y' INNERHALB DER ENTSPRECHENDEN STATUSZEILE'><img src='status_open.png'></a>";  
 }
 else if (AUCH HIER FEHLT MIR DER WERT; "Wenn Status == 1 tue folgendes")  
 {
 echo "<a href='LINK(...)'><img src='status_ok.png'></a>";  
 }
 else 
 {
 echo "Dieser Text sollte niemals angezeigt werden, da Status ausschließlich 0 oder 1 sein kann.";>  

Es geht darum, dass ganz einfach eine Übersicht erstellt werden soll, welche Aufgaben erledigt sind bzw. welche noch offen sind. Nach erledigen der Aufgaben soll man direkt in der Übersicht anklicken können, dass man die Aufgabe erledigt hat.

Alternativ, anstatt den Status in einer eigenen Reihe anzuzeigen, könnte man auch die Farbeinstellungen und Links der gesamten Zeilen ändern (z.B. wenn Status = 0 stelle die gesamte Zeile in roter Schrift da und füge den entsprechenden Link hinzu; nach anklicken des Links ändere den Status und stelle die gesamte Zeile in grüner Schrift da, entferne den Link).

Ich hoffe, dass ich das halbwegs verständlich ausgedrückt habe. Da ich aus verschiedenen Quellen autodidaktisch lerne, kann es sein, dass bestimmte, grundlegende Dinge einfach an mir vorbeigegangen sind o.O

Noch eine Anmerkung zu dem obersten Codeschnipsel: langfristig soll die Tabelle, die ich jetzt noch jeweils anhand der MySQL Werte "von Hand" erstelle (jeweils eine Zeile mit echo für jeden Tabellenwert) über ein Array selbstständig erstellt werden. Dies probiere ich gerade parallel aus, habe aber auch die Lösung noch nicht ganz raus.

Danke & beste Grüße

Content-ID: 278982

Url: https://administrator.de/contentid/278982

Ausgedruckt am: 22.11.2024 um 12:11 Uhr

122990
122990 01.08.2015 aktualisiert um 13:20:59 Uhr
Goto Top
$state_img = ($row['status'] == 1) ? '/images/status_ok.png' : '/images/status_error.png';  
echo "<td><img src=\"" . $state_img . "\"></td>";  
Die Links baust du dir dann mit URL-Parametern und der jeweiligen ID zusammen. Die ID wertest du dann in einem Skript aus. bsp:
http://domain.de/edit.php?id=1&action=reset
und führst auf die jewelige ID ein SQL-Update aus.

Gruß grexit
marinux
marinux 01.08.2015 aktualisiert um 13:24:21 Uhr
Goto Top
Zitat von @122990:

> $state_img = ($row['status'] == 1) ? '/images/status_ok.png' : '/images/status_error.png'  
> echo "<td><img src=\"" . $state_img . "\"></td>";  
> 
Die Links baust du dir dann mit URL-Parametern und der jeweiligen ID zusammen. Die ID wertest du dann in einem Skript aus. bsp:
http://domain.de/edit.php?id=1&action=reset
und führst auf die jewelige ID ein SQL-Update aus.

Gruß grexit

Geht noch einfacher:


$state_img = $row['status'] ? '/images/status_ok.png' : '/images/status_error.png'  
echo "<td><img src=\"" . $state_img . "\"></td>"

oder ein Bild status0.png und status1.pmg anlegen und dann

echo "<td><img src=\"status" . $row['status'] . ".png\"></td>";  

Gruß
carl7n
carl7n 01.08.2015, aktualisiert am 31.03.2023 um 11:32:05 Uhr
Goto Top
Vielen Dank für Eure Hilfe!!

Die Lösung mit status0.png und status1.png gefällt mir am Besten. Das habe ich so umgesetzt, funktioniert problemlos face-smile
Diesen Weg kann ich auch am Besten nachvollziehen.

Die Lösungen mit state_img verstehe ich insofern nicht, weil ich nicht weiß, was das Fragezeichen und der Doppelpunkt in der ersten Zeile bedeuten. Da komme ich aber hoffentlich auch noch dahinter ^^

Wie würdet Ihr automatisch anhand eines Arrays die Tabelle erstellen?

 $myValues = array ("id", "room", "task", "who", "status", "deadline")  

und

 foreach ($myValues as $tabr)
 {
 echo $tabr." ";  

Würde mir schon mal alle Werte des Arrays einzeln anzeigen. Das muss ich jetzt aber auch irgendwie mit

 while ($row = mysql_fetch_array($query))
  {
    echo "<tr>";  
    echo "<td>".$row[id]."</td>";  
    echo "<td>".$row[room]."</td>";  
    echo "<td>".$row[task]."</td>";  
    echo "<td>".$row[who]."</td>";  
    echo "<td><img src=\"status" . $row['status'] . ".png\"></td>";  
    echo "<td>".$row[deadline]."</td>";  
  }
verbinden.

Idealerweise würde ich diese Zeilen

 $query = mysql_query("SELECT id, room, task, who, status, deadline FROM `regular`");  

und
<table border="1">  
  <th>ID</th>
  <th>room</th>
  <th>task</th>
  <th>who</th>
  <th>status</th>
  <th>deadline</th>
 </tr>

ebenfalls anhand des Arrays generieren lassen. Dann müsste ich für jedes Auslesen nur ein passendes Array erstellen und könnte den Rest als Funktionen laufen lassen. Macht das Eurer Meinung nach Sinn?
Es geht darum, dass ich das Auslesen (und später Editieren) der Werte der MySQL Datenbanken so automatisiert wie möglich handhaben möchte.
carl7n
carl7n 01.08.2015 aktualisiert um 20:01:28 Uhr
Goto Top
Ist es okay, wenn wir den weiteren Verlauf hier fortführen? Ich habe mein Script noch einmal angepasst:

 
 <?php
 // Fehledermeldungen ausgeben (später ausklammern)
 include("files/error.php");  
 
 // Verbindung mit der Datenbank
 include("files/connect.php");  
 
 // Array der einzelnen Werte
 $myValues = array("id","room","task","who","status","deadline");  
 // Aus welcher Tabelle lesen wir
 $tabCurr = "regular";  

 // Länge des Arrays definieren
 $arrayLen = count($myValues);
 
 $arrayShorten = array_slice($myValues, 0, -1);
 $stringShorten = implode(", ",$arrayShorten);  
 
 // Variabel für Query
 $queryNew = $stringShorten.", ".end($myValues);  
 
 // Query festlegen
 $query = mysql_query("SELECT ".$queryNew." FROM `".$tabCurr."`");  

 // Tabelle generieren
 // HEADER ANFANG
 echo "<table border='1'";  
 echo "<tr>";  
 foreach ($myValues as $myTabVal)
 {
 echo "<th>".$myTabVal."</th>";  
 }
 // HEADER ENDE
 echo "<tr>";  

Bis hier funktioniert es auch soweit. Die Query wird anhand des Arrays erstellt. Da ich Kommata zwischen die einzelnen Elemente einfügen musste, war hier ein wenig Code erforderlich (inkl. kürzen des Arrays, da zum Schluss ja kein Komma stehen darf).
Der Header der Tabelle wird ebenfalls durch das Array generiert. Nun muss ich die Tabelle nicht mehr per Hand erstellen.

Header
|id|room|task|who|status|deadline|

Jetzt müssen nur noch die Inhalte in die Tabelle geschrieben werden. Das habe ich anhand der bereits oben geposteten while Schleife probiert und diese entsprechend modifiziert, allerdings nie die richtigen Werte gefunden (bei ID wurde mir
3
3
5
1
angezeigt, statt
1
2
3
4
5) Zumindest sollten ja alle IDs vorkommen, dafür keine doppelten.

Zudem erschließt sich mir nicht, wie ich
 
 echo "<td><img src=\"status" . $row['status'] . ".png\"></td>";  
in die Tabelle einbauen kann, wenn sie automatisch generiert wird. Ist das möglich?

Thx =)
122990
Lösung 122990 01.08.2015, aktualisiert am 03.08.2015 um 13:17:21 Uhr
Goto Top
$sql = "SELECT ID,Room,Task,who,status,deadline from regular ORDER BY ID"  
$result = mysql_query($sql)

echo "<table border=1>\n";  
$cnt = 1;
while ($row = mysql_fetch_assoc($result)) {
   if($cnt == 1){
      echo "<tr>\n";  
      foreach($row as $key => $value){
          echo "<th>" . $key . "</th>\n";  
      }
      echo "</tr>\n";  
    }
    echo "<tr>\n";  
    foreach($row as $key => $value){
          if($key == "status"){  
                echo "<td><img src=\"status" . $value . ".png\" /></td>\n";  
          }else{
                echo "<td>" . $value . "</td>\n";  
          }
    }
    echo "</tr>\n";  
    $cnt++
}
echo "</table>\n";  
Btw. solltest du dringend von der vollkommen veralteten MySQL Bibliothek auf eine modernere wie PDO umsteigen. Denn die Bibliothek ist schon lange als "Deprecated" gekennzeichnet, wird also in kommenden PHP Versionen irgendwann verschwinden !

Die PHP-Dokuseiten sind deine erste Anlaufstelle ...http://php.net/docs.php
Nur auf Tutorials, würde ich mein Wissen nicht aufbauen wollen.

Gruß grexit

p.s. Nutze bitte Codetags für deinen Quellcode.
carl7n
carl7n 03.08.2015 um 13:17:18 Uhr
Goto Top
Vielen Dank für Deine Hilfe! face-smile

Nachdem ich das Script komplett neu erstellt hatte, um PDO zu unterstützen (was nicht funktioniert hat, weil ich durch PDO einfach nicht durchsteige), habe ich nun noch eine neue Version erstellt, die sich per mysqli verbindet. Ich komme einfach mir der Syntax von mysqli besser klar.

Auf php.net und w3schools.com bin ich regelmäßig unterwegs.