Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Mit Checkboxen Selects steuern

Anleitung Entwicklung PHP

Mitglied: Guenni

Guenni (Level 2) - Jetzt verbinden

23.07.2006, aktualisiert 02.01.2013, 16474 Aufrufe, 4 Kommentare

Dieses Tutorial zeigt, wie man Checkboxen gruppiert und die Werte
der Checkboxen via PHP ausliest, um ein Select-Statement zu steuern.

Zugrunde liegt eine kleine Tabelle, die eine Inventarliste über
Computer darstellt. Die Spalten der Tabelle:

Alias
Computer
Prozessor
Mainboard
HD
usw., je nach Geschmack, Info-Bedarf etc..

Je detailreicher diese Tabelle ist, desto breiter und unübersichtlicher wird
sie.

Der Benutzer soll also mittels Checkboxen die für ihn relevanten Info's
selber bestimmen.

Die Spalte Alias kann Info über Standort, Funktion, Benutzer etc. enthalten,
z.B. "Raum 1, Workstation, Hans Schmidt", "Büro Vorstand, Dr. Müller",
"Versand, Druckserver", also aussagekräftige Info.

Die Spalte Computer enthält einfach den Namen des PC's.

Der Rest erklärt sich von selber.

Die anzuzeigenden Componenten Prozessor, Mainboard, HD werden über
Checkboxen ausgewählt, der Computer über eine Auswahlliste. Wahlweise
können auch alle Computer aufgelistet werden.

Da die Tabelle natürlich Änderungen unterliegt, werden die Checkboxen
und die Auswahlliste dynamisch generiert.

Falls die Tabelle also um eine oder mehr Spalte(n) erweitert wird, sprich
Speicher, Grafikkarte, IP-Adresse etc., ist darauf zu achten, diese Spalten
nach den Spalten Alias und Computer anzulegen, da diese zwei
Spalten im Script an den Anfang des Selects gestellt werden.


Verwendete Software:

Linux Debian Sarge
Apache
MySQL
PHP

Checkboxen, das sind die kleinen Quadrate, die bei "Klick" ein
Häkchen darstellen

Checkboxen hat(wahrscheinlich) jeder schonmal eingesetzt:

<input type=checkbox name=checkbox1 usw.....
<input type=checkbox name=checkbox2 usw.....
<input type=checkbox name=checkbox2 usw.....

Die Auswertung erfolgt mit JavaScript in einer Schleife,
in der der Name der Checkbox mit der Zählvariablen kombiniert
und dann ausgelesen wird.

In Verbindung mit PHP eröffnen sich hierbei andere Möglichkeiten:

Bestimmte Bereiche können mit Checkboxen gruppiert werden,
indem man für diese Bereiche eine Checkbox als Array definiert.

HTML-Code:

<input type=checkbox name=pcinfo[] value=prozessor…..
<input type=checkbox name=pcinfo[] value=mainboard…..
<input type=checkbox name=pcinfo[] value=hd…..

Somit hat man ein Array in einem HTML-Formular erstellt, das
mittels PHP einfach ausgelesen werden kann:

$i=0;
if(count($pcinfo)){
while($i<count($pcinfo)){
echo $pcinfo[$i];
$i++;
}
}

Die Funktion count liefert die Anzahl angewählter Elemente.
Der Wert des jeweiligen Elements, der mit value=wert angegeben wird,
wird in dem Array gespeichert und kann mittels einer Schleife weiter
verarbeitet werden.

Das PHP-Script:

<?
Falls eine oder mehr Checkboxen angewählt wurden....
if(count($pcinfo)){
bekommt die Variable $query die ersten 2 Spalten zugewiesen
$query="Alias,Computer";
Da mind. eine Checkbox angewählt wurde, wird der Variablen
weiterhin eine Komma und das erste Element des Arrays angehangen.
$query.=",".$pcinfo[0];
Da Arrays in PHP von Null an gezählt werden, wird die Variable $i
auf 1 gesetzt.
$i=1;
Solange das Funktionsergebnis von count größer ist als $i,
werden der Variablen $query nun nacheinander in der Schleife ein
Komma und das nächste Element des Arrays angehangen.
while($i<count($pcinfo)){
$query.=",".$pcinfo[$i];
$i++;
}
Nun wird die Verbindung zum MySQL-Server aufgebaut.
$conn=mysql_connect("localhost","guenni","guenni");
$db=mysql_select_db("test");
Falls die Checkbox Alle angewählt wurde.....(siehe weiter unten)
if($alle){
werden auch alle Computer aufgelistet.
$sql="select $query from computer";}
Ansonsten….
else{
nur der Computer, der in der Auswahlliste ausgewählt wurde
$sql="select $query from computer where computer='$computer'";
Das Abfragergebnis wird in $result gespeichert. }
$result=mysql_query($sql,$conn);
Es wird die Tabelle eingeleitet.
echo "<table border=\"1\" colspan=\"2\">";
Das Abfrageergebnis wird der Variablen $row als Array übergeben.
$row=mysql_fetch_array($result, MYSQL_ASSOC);
Die Funktion key liefert nun die Namen der Spalten. Diese werden in
einer Schleife nacheinander der Variablen $field zugewiesen und
ausgegeben.
while($field=key($row)){
echo "<th>$field</th>";
next($row);
}
echo "</tr>";
Da oben durch die Anweisung $row=mysql_fetch_array($result, MYSQL_ASSOC);
nicht nur die Spaltennamen sondern auch der erste Datensatz abgefragt wurde,
muß dieser separat ausgegeben werden.
echo "<tr><td>";
echo implode("<td>", $row);
echo "</tr>";
Die restlichen Datensätze werden dann in einer Schleife ausgegeben.
while($row=mysql_fetch_array($result, MYSQL_ASSOC)){
echo "<tr><td>";
echo implode("<td>", $row);
echo "</tr>";
}
echo "</table><hr>";
mysql_close();
}
?>
Ein Stück HTML….
<html>
<head>
<title>Inventarliste Computer</title>
</head>
<body>
<form action="pcauskunft.php" method="post">
und weiter geht's.
Zum Generieren der Checkboxen im Formular wird wieder eine
Verbindung zum MySQL-Server aufgebaut und alle Spalten
werden abgefragt.
<?
$conn=mysql_connect("localhost","guenni","guenni");
$db=mysql_select_db("test");
$sql="select * from computer";
$result=mysql_query($sql,$conn);
$row=mysql_fetch_array($result, MYSQL_ASSOC);
Da die ersten beiden Spalten, Alias und Computer, natürlich nicht als Checkbox
dargestellt werden sollen, muß der Zeiger mit der Funktion next zweimal
weitergeschoben werden.
next($row);
next($row);
Nun erfolgt wieder mit der Funktion key die Ausgabe der Spaltennamen,
aber diesmal nicht als Tabellenkopf sondern als Checkbox.
while($field=key($row)){
echo "<input type=\"checkbox\" name=\"pcinfo[]\" value=$field>$field";
next($row);
}
?>
Nun wird die Auswahlbox generiert
Von welchem PC?

<?
$sql="select alias,computer from computer";
$result=mysql_query($sql,$conn);
echo "<select name=\"computer\">";
while($row=mysql_fetch_array($result,MYSQL_ASSOC)){
Dem Tag option wird als value der Computername übergeben,
sichtbar in der Liste soll aber der Alias sein, weil der (m.M. nach)
aussagekräftiger ist. Man kann so z.B. Standort und PC, oder den
Benutzer mit angeben und weiß dann mehr, als wenn da nur pc1,
server, workstation o.ä. steht.
echo "<option value=$row[computer]>$row[alias]</option>";
}
echo "</select>";
?>
Dann wird noch eine Checkbox als Auswahl eingefügt, ob man die
Materialliste aller PC's sehen will.
Oder alle Computer <input type="checkbox" name="alle">
<hr>
Dann noch ein Submit-Button, Ende Form, Ende Body, Ende Html, Ende Tutorial
<input type="submit" name="cmd" value="Daten abfragen">
</form>
</body>
</html>

Gruß
Günni


Das Skript ohne Kommentare, aktualisiert am 02.01.2013:
01.
<?php 
02.
$conn=mysql_connect("localhost","guenni","guenni"); 
03.
$db=mysql_select_db("test"); 
04.
?> 
05.
<html> 
06.
<head> 
07.
<title>Inventarliste Computer</title> 
08.
</head> 
09.
<body> 
10.
<?php 
11.
if(count($_POST['pcinfo'])){ 
12.
 while(list($key,$val)=each($_POST['pcinfo'])){ 
13.
  $daten[]=$val
14.
15.
 $query="Alias,computer"
16.
 $query.=",".$daten[0]; 
17.
 $i=1; 
18.
 while($i<count($daten)){ 
19.
  $query.=",".$daten[$i]; 
20.
  $i++; 
21.
22.
  
23.
 if($_POST['alle']){ 
24.
  $sql="select $query from computer"
25.
 }else
26.
 			 $sql="select $query from computer where computer='".$_POST['computer']."'"
27.
28.
 $result=mysql_query($sql,$conn); 
29.
 $row=mysql_fetch_array($result, MYSQL_ASSOC); 
30.
 echo "<table border=\"1\">"
31.
  
32.
 while($field=key($row)){ 
33.
  echo "<th>$field</th>"
34.
  next($row); 
35.
36.
  
37.
 echo "</tr>"
38.
 echo "<tr><td>"
39.
 echo implode("<td>", $row); 
40.
 echo "</tr>"
41.
 while($row=mysql_fetch_array($result, MYSQL_ASSOC)){ 
42.
  echo "<tr><td>"
43.
  echo implode("<td>", $row); 
44.
 echo "</tr>"
45.
46.
 
47.
 echo "</table><hr>"
48.
49.
?> 
50.
<form action="pcauskunft.php" method="post"
51.
<?php 
52.
$sql="select * from computer"
53.
$result=mysql_query($sql,$conn); 
54.
$row=mysql_fetch_array($result, MYSQL_ASSOC); 
55.
next($row); 
56.
next($row); 
57.
next($row); 
58.
while($field=key($row)){ 
59.
  echo "<input type=\"checkbox\" name=\"pcinfo[]\" value=$field>$field<br>"
60.
  next($row); 
61.
62.
?> 
63.
Von welchem PC?<br> 
64.
<?php 
65.
$sql="select alias,computer from computer"
66.
$result=mysql_query($sql,$conn); 
67.
echo "<select name=\"computer\">"
68.
while($row=mysql_fetch_array($result,MYSQL_ASSOC)){ 
69.
 echo "<option value=$row[computer]>$row[alias]</option>"
70.
71.
echo "</select>"
72.
?> 
73.
&nbsp;&nbsp; Oder alle Computer <input type="checkbox" name="alle"
74.
<hr> 
75.
<input type="submit" name="cmd" value="Daten abfragen"
76.
</form> 
77.
</body> 
78.
</html> 
79.
 
Mitglied: Efe
24.07.2006 um 07:21 Uhr
Ich glaube besser hätte man es nicht beschreiben können. Finde ich gut, dass Du dir die Zeit dafür genommen hast.
Bitte warten ..
Mitglied: EvilMoe
25.07.2006 um 10:48 Uhr
ich finds auch klasse aber würde die php syntax highlighting einschalten weil das sonst nicht so übersichtlich ist
Bitte warten ..
Mitglied: Strangemeister
07.05.2007 um 14:24 Uhr
Sofern das Script in einem überschaubaren Intranet liegt, ist es ganz gut gelungen.

Im Internet oder großen Intranet würde ich von Copy&Paste auf jeden Fall abraten, da das Script meilenweit offen für SQL-Injections ist. Es wird vom Formular das Array pcinfo[] übergeben und ungefiltert in die SQL-Query übergeben. Somit wäre es remote möglich, sämtliche Datensätze anzeigen zu lassen - und schlimmer - zu löschen.
Bitte warten ..
Mitglied: Guenni
28.05.2007 um 19:26 Uhr
@Strangemeister

Hi,

dieses Tutorial beinhaltet auch gar keine Lösungen zur Sicherheit, wie
du wahrscheinlich gemerkt hast.

Das ist ein Tutorial, und mehr nicht. Quasi ein Einstieg in eine Materie.

Was jemand draus macht, ist seine Sache.

Grüße
Günni
Bitte warten ..
Neue Wissensbeiträge
Mac OS X

MacOS wo ist die Tilde ?

Tipp von Alchimedes vor 53 MinutenMac OS X

Hallo, ich hab eine MacOS qwertz Keyboard auf US Layout umgestellt da die Sonderzeichen besser ereichbar sind. Leider fehlt ...

Datenschutz

Weitere Inforamtionen zum Sicherheitsproblem BeA

Information von Penny.Cilin vor 7 StundenDatenschutz

Im folgenden ein weiterer Bericht über die Sicherheitsprobleme von Bea. Fataler Konstruktionsfehler im besonderen elektronischen Anwaltspostfach Gruss Penny

Windows 10

Systemdienste behalten nach Win10 inplace-Upgrade nicht die ggf. modifizierte Startart bei

Tipp von DerWoWusste vor 9 StundenWindows 103 Kommentare

Stellt Euch vor, Ihr habt ein Win10 System und modifiziert dort die Startart von Systemdiensten. Zum Beispiel wollt Ihr ...

Microsoft Office

Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei

Anleitung von SarekHL vor 12 StundenMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

Batch & Shell
AD-Abfrage in Batchdatei und Ergebnis als Variable verarbeiten
gelöst Frage von Winfried-HHBatch & Shell19 Kommentare

Hallo in die Runde! Ich habe eine Ergänzungsfrage zu einem alten Thread von mir. Ausgangslage ist die Batchdatei, die ...

Microsoft Office
Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei
Anleitung von SarekHLMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Windows 10
Netbook erkennt Soundkarte nicht - keinerlei Info zum Hersteller und Modell vom Netbook und Hardware bekannt
Frage von fyrb38Windows 1017 Kommentare

Guten Tag, meine Schwester reist in einigen Wochen für ein paar Monate ins Ausland und hat sich dafür ein ...