Skriptvereinfachung möglich ?!

AlexD1979

Erfahrenes Mitglied
Hi!
Ich glaube, das was ich da programmiert habe ist echt umständlich und generiert eine Menge Quelltext bei der Ausführung. Aber wie kann man das Skript an der Stelle durch Schleifen vereinfachen?

Grundfunktion ist, das ich per Checkboxen auswähle, welche Spalten ich bei einer Datenbankabfrage in eine Liste angezeigt bekommen möchte. Nur habe ich das bis jetzt umständlich gelöst. Ich frage jedesmal ab, ob der Haken gesetzt ist, der Wert also automatisch dem Spaltennamen entspricht und per If nun entschieden wird, ob diese td - Spalte angezeigt werden soll

Geht das auch irgendwie einfacher ?

PHP:
<form action="liste.php" method="post">
<h1>Bitte die Auswahl treffen!</h1>
<table border="0" width="80%">
<tr>
<td align="right"><input type="checkbox" value="date" name="select_date"></td><td>Date</td>
<td align="right"><input type="checkbox" value="state" name="select_state" ></td><td>State</td>
<td align="right"><input type="checkbox" value="site" name="select_site" checked></td><td>Site</td>
<td align="right"><input type="checkbox" value="bg" name="select_bg" ></td><td>Business Group</td>
<td align="right"><input type="checkbox" value="division" name="select_division" ></td><td>Division</td>
<td align="right"><input type="checkbox" value="room" name="select_room" checked></td><td>Room</td>
</tr>
<tr>

<td align="right"><input type="checkbox" value="serial" name="select_serial" checked></td><td>Serial</td>
<td align="right"><input type="checkbox" value="mac" name="select_mac" checked></td><td>Mac</td>
<td align="right"><input type="checkbox" value="cpuid" name="select_cpuid" ></td><td>CPU-ID</td>
<td align="right"><input type="checkbox" value="host" name="select_host" checked></td><td>Host</td>
<td align="right"><input type="checkbox" value="manuf" name="select_manuf" checked></td><td>Manufactor</td>
<td align="right"><input type="checkbox" value="model" name="select_model" checked></td><td>Model</td>
</tr>
<tr>
<td align="right"><input type="checkbox" value="cpu" name="select_cpu" checked></td><td>CPU</td>
<td align="right"><input type="checkbox" value="os" name="select_os" ></td><td>OS</td>
<td align="right"><input type="checkbox" value="ram" name="select_ram" checked></td><td>Ram</td>
<td align="right"><input type="checkbox" value="hdd" name="select_hdd" checked></td><td>HDD</td>
<td align="right"><input type="checkbox" value="graphics" name="select_graphics" ></td><td>Graphics</td>
<td align="right"><input type="checkbox" value="remarks" name="select_remarks" checked></td><td>Remarks</td>
</tr>

<tr><td colspan="12"><input type="submit" name="suchen" value="suchen"></td></tr>
</table>

</form>

<?php
if(isset($suchen)) {
/* connect.php enthält die Verbindungsinformationen */

include("connect.php");
include("sql_strings.php");
?>
<table border="0" cellspacing="5px" cellpadding="5px">

<?php
$query=mysql_query("SELECT * from test_inventar.inventar order by SITE,INV,TYP");
while($data1=mysql_fetch_array($query))
{
	?>

	<tr bgcolor="#EFEFEF">
	<td><a href="anzeigen.php?id=<? echo $data1[INV];?>"><? echo $data1[INV]; ?></a></td>
	
	<?
	if ($_POST[select_host] == "host")
	{
		?>
		<td>
		<? echo $data1[HOST]; ?>
		</td>
		<?
	}
	?>
	
	
	<td><? echo $data1[TYP]; ?></td>
	
	
	
	<?
	if ($_POST[select_date] == "date")
	{
		?>
		<td>
		<? echo $data1[DATE]; ?>
		</td>
		<?
	}
	?>

... //und so geht das für jede Spalte weiter

Andere Möglichkeit wäre noch, wenn ich die Rückgabewerte der Checkbox felder als Variablen in die Select value1,value2,,... from tablelle xyz einsetzen würde. Dann bräuchte ich doch nur die Tabelle durch eine Schleife generieren lassen, die automatisch die richtigen Spalten einfügt, die in der Ergebnismenge stehen oder?

Kann man eigentlich dann der Tabelle noch sagen, dass bei der Generierung ich abwechselnde Zeilenfarben haben möchte. Also grau und blau im Wechsel?

Gruß von einem PHP-Einsteiger

AlexD
 
Original geschrieben von AlexD1979
Aber wie kann man das Skript an der Stelle durch Schleifen vereinfachen?
Ganz einfach: Du packst einfach alle Checkboxen in ein Array. Das sieht so aus:

Code:
<td align="right"><input type="checkbox" value="date" name="select[]"></td><td>Date</td> 
<td align="right"><input type="checkbox" value="state" name="select[]" ></td><td>State</td> 
<td align="right"><input type="checkbox" value="site" name="select[]" checked></td><td>Site</td> 
<td align="right"><input type="checkbox" value="bg" name="select[]" ></td><td>Business Group</td> 
<td align="right"><input type="checkbox" value="division" name="select[]" ></td><td>Division</td> 
<td align="right"><input type="checkbox" value="room" name="select[]" checked></td><td>Room</td>
Wenn Du das Formular jetzt abschickst, stehen im $_POST['select']-Array alle ausgewählten Elemente drin:

Code:
Array
(
    [0] => date
    [1] => state
    [2] => site
    [3] => room
    [4] => serial
    [5] => mac
    [6] => cpuid
    [7] => host
    [8] => cpu
    [9] => os
    [10] => ram
)
Da Du jetzt ja nur alle ausgewählten Elemente hast, brauchst Du einfach nur das Array durchlaufen und eine Ausgabe machen:

PHP:
/* test array für ausgabe */
$data['site']   = "site";
$data['room']   = "room";
$data['serial'] = "serial";
$data['mac']    = "mac";
$data['cpuid']  = "cpuid";
$data['host']   = "host";

for($i = 0; $i < count($_POST['select']); $i++) {
    if ($data[$_POST['select'][$i]] != "") {
        echo 'Auswahl: '.$data[$_POST['select'][$i]].'<br />';
    }
}
Ausgabe:
Code:
Auswahl: site
Auswahl: room
Auswahl: serial
Auswahl: mac
Auswahl: cpuid
Auswahl: host
Wichtig hierbei ist, dass die Formular-Elemente den gleichen Namen wie die Spalten in der Datenbank haben.

Original geschrieben von AlexD1979
Kann man eigentlich dann der Tabelle noch sagen, dass bei der Generierung ich abwechselnde Zeilenfarben haben möchte. Also grau und blau im Wechsel?
Klar, Da musst Du mal hier im Forum suchen. Die Frage wurde schon öfters gestellt. ;)
 
Original geschrieben von AlexD1979

Kann man eigentlich dann der Tabelle noch sagen, dass bei der Generierung ich abwechselnde Zeilenfarben haben möchte. Also grau und blau im Wechsel?

Code:
$a =0;
$grey = "";
foreach($zeilen as $k =$>)  {
   $a++;
   if($a%2==0) $grey="bgcolor=\"#cccccc\"";
   echo "<tr $grey ....
}
 
Code:
<?php
$i = 0;
foreach($array as $key => $val) {
    print "<tr><td bgcolor=\"#" . ($i++ % 2 == 0 ? "ccc" : "cce") . "\">" . $key . " = " . $val . "</td></tr>";
}
?>
 
Hallo,
Hier noch mal eine kleine Ergänzung zu dem Problem, was ich immer noch habe.
Ich habe alle Vorschläge dieses Beitrags umgesetzt und folgenden Code bis hier:

PHP:
...
<td align="right"><input type="checkbox" value="date" name="select[]"></td><td>Date</td>
<td align="right"><input type="checkbox" value="state" name="select[]" ></td><td>State</td>
<td align="right"><input type="checkbox" value="site" name="select[]" checked></td><td>Site</td>
<td align="right"><input type="checkbox" value="bg" name="select[]" ></td><td>Business Group</td>
<td align="right"><input type="checkbox" value="division" name="select[]" ></td><td>Division</td>
<td align="right"><input type="checkbox" value="room" name="select[]" checked></td><td>Room</td>
...

/ /Tabelle beginnt hier

<table border="0" cellspacing="5px" cellpadding="5px">
<?php

  $query  = mysql_query("SELECT INV,TYP,DATE,STATE,SITE,BG,DIVISION,ROOM,SERIAL,MAC,CPUID,APPLICATION,HOST,MANUF,MODEL,CPU,OS,RAM,HDD,Graphics,REMARKS from test_inventar.inventar ORDER BY INV");

//Query auslösen für Überschriften  
$data=mysql_fetch_array($query);

//Dies funktioniert !
echo "Wert 1:".$_POST['select'][0];
echo "<br>";

echo "Wert 2:".$_POST['select'][1];
echo "<br>";

echo "Wert 3:".$_POST['select'][2];
echo "<br>";

echo "Wert 4:".$_POST['select'][3];
echo "<br>";

echo "Wert 5:".$_POST['select'][4];
echo "<br>";

echo "Wert 6:".$_POST['select'][5];
echo "<br>";

//Dies Funktioniiert nicht  Warum nur Wo liegt der Fehler
 for ($i = 0; $i < count($_POST['select']); $i++) {
	if ($data[$_POST['select'][$i]] != "") {
		echo 'Inhalt: '.$data[$_POST['select'][$i]].'<br />';
		echo $i;
	}
} 	
 
//Hier beginnt der dynamisch generierte Teil der Tabelle mit den Datensätzen
while($data1=mysql_fetch_array($query))
{
	?>
	
	<tr bgcolor="#EFEFEF">
	<td><a href="anzeigen.php?id=<? echo $data1[INV];?>"><? echo $data1[INV]; ?></a></td>
	
	<?
	if ($_POST[select_host] == "host")
	{
		?>
		<td>
		<? echo $data1[HOST]; ?>
		</td>
		<?
	}
	?>
	
	
	<td><? echo $data1[TYP]; ?></td>
	
	
	
	<?
	if ($_POST[select_date] == "date")
	{
		?>
		<td>
		<? echo $data1[DATE]; ?>
		</td>
		<?
	}
	?>
	
	<?
	if ($_POST[select_state] == "state")
	{
		?>
		<td>
		<? echo $data1[STATE]; ?>
		</td>
		<?
	}
	?>
//Das geht jetzt so weiter für jedes Feld, ich weiß, nicht sonderlich elegant
...

Ich bekomme immer als Ausgabe:

Wert 1:site
Wert 2:room
Wert 3:
Wert 4:
Wert 5:

Die Ausgabe ist soweit richtig, da die beiden Felder von anfang an als selected beim Laden der Datei vorselektiert.
Wenn ich andere Elemente meiner Auswahl anklicke, werden diese in die Liste eingefügt.

Warum aber funktioniert dann meine Schleife nicht richtig ?
 
Zuletzt bearbeitet:
Zurück