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
GELÖST

Wie lese ich hier das richtige Feld aus?

Frage Entwicklung PHP

Mitglied: Letavino

Letavino (Level 1) - Jetzt verbinden

09.11.2010, aktualisiert 17.11.2010, 3636 Aufrufe, 11 Kommentare

Hallo, ich habe bei meiner Seite ein Problem, die richtigen Variablen korrekt auszulesen.
Ich hoffe, ihr könnt mir da helfen!

Ich habe ein Formular mit Eingabefeldern, Radiobuttons etc.

Zwischen drin habe ich folgendes stehen:

01.
$query = mysql_query('SELECT * FROM mitarbeiter'); 
02.
while($result_row = mysql_fetch_object($query)) 
03.
04.
	$id                        = $result_row->mitarbeiter_id; 
05.
	$vorname            = $result_row->vorname; 
06.
	$nachname         = $result_row->nachname; 
07.
 
08.
	 
09.
	echo' 
10.
	 
11.
	<input type="submit" name="auswählen" value="'.$vorname.' '.$nachname.'"> 
12.
	<input type="hidden" name="add" value="'.$id.'"> 
13.
	 
14.
	<br> 
15.
	 
16.
	'; 
17.
};
Es sollen also Buttons erzeugt werden, um Mitarbeiter hinzuzufügen. Die ID soll dabei übergeben werden.
Aber wenn ich nun $_POST['add'] abfrage, wird der letzte Wert übergeben, was ja auch irgendwie sinnig ist.
Ich hatte vorher die Idee, den Submit Button und das versteckte Feld in ein eigenes Formular zu packen.
Das funktionierte soweit auch, dabei war es mir aber leider nicht mehr möglich, alle anderen Werte des übrigen Formulars mitzunehmen um sie mit Sessions wieder zurückgeben zu können.

Wie kann ich die passende ID übergeben und gleichzeitig auch die übrigen Werte mitnehmen?
Ich hoffe, ihr versteht, was ich meine und könnt mir da ein bisschen helfen!

Lg, Florian
Mitglied: SlainteMhath
09.11.2010 um 11:49 Uhr
Moin,

/EDIT: ok, wenn man das "while" im Code mitliest macht Dein Text sinn - ignorier meinen Beitrag bitte

Ich hol mit wohl besser noch nen Kaffe
lg,
Slainte
Bitte warten ..
Mitglied: nxclass
09.11.2010 um 11:57 Uhr
.. wenn dein Formular jetzt X-mal das Feld mit dem name="add" enthält, Wird die Auswertung nichts bringen.
Du könntest das in name="add[]" ändern um alle IDs zu bekommen - dann kennst Du aber auch nur den Namen aber nicht die passende ID

Wieso machst du nicht eine Liste mit Checkboxen in denen Du die IDs übergibst. Soweit ich sehe liest Du die Werte doch immer wieder aus der DB aus !?

01.
echo '<form action="" method="post"> 
02.
# ... FOR ... 
03.
echo '<div>'.$vorname.' '.$nachname.' <div><input type="checkbox" name="add[]" value="'.$id.'" /></div></div>'; 
04.
# ... 
05.
echo '<div><input type="submit" name="action" value="Hinzufügen" /></div> '; 
06.
echo '</form>';
Bitte warten ..
Mitglied: Letavino
09.11.2010 um 12:22 Uhr
Mit Checkboxen lief meine Variante vorher auch einwandfrei.
Nun wurde aber gewünscht, dass es Für jeden Arbeiter einen Button gibt, der den jeweiligen Arbeiter zur Liste hinzufügt, bzw beim nochmaligen klicken, ihn wieder entfernt.

Der einzige Weg, es so vernünftig zu machen, wäre den Namen des Submitbuttons in "auswählen['.$id.'] " oder ähnliches zu ändern, dann mit einer for-Schleife bis zur maximalen Mitarbeiter Zahl zählen zu lassen und jeweils abfragen, ob der Button gedrückt wurde ( "if ( isset ( $_POST[ 'auswählen['.$i.'] ' ] ) ) .
(oder so ähnlich, ist jetzt ungetestet)

Aber das wäre ja keine elegante Lösung und würde unnötig Zeit / Auslastung verursachen.
Fällt irgendwem eine bessere ein?
Bitte warten ..
Mitglied: nxclass
09.11.2010 um 19:52 Uhr
... ok - dann kannst Du
  • bei jedem Datensatz ein FORM anlegen
01.
# ... FOR ... 
02.
echo '<form action="" method="post"> 
03.
echo '<input type="hidden" name="add" value="'.$id.'" /> <div>'.$vorname.' '.$nachname.' </div> <div><input type="submit" name="action" value="Hinzufügen" /></div> '; 
04.
echo '</form>'; 
05.
# ...
  • oder Du arbeitest mit Javascript und füllst / sendest ein "verstecktes" FORM wenn der Button gedrückt wird - in HTML:
01.
<form id="form" action="" method="post"> <input id="formvalue" type="hidden" name="id" value="" /> </form> 
02.
#... FOR ... 
03.
Name <input type="button" name="action" value="Hinzufügen" onclick="document.getElementByID('formvalue').value='0815'; document.forms['form'].submit();" /> 
04.
# ...
... oder so ähnlich.
Bitte warten ..
Mitglied: dog
09.11.2010 um 23:33 Uhr
Nun wurde aber gewünscht, dass es Für jeden Arbeiter einen Button gibt, der den jeweiligen Arbeiter zur Liste hinzufügt, bzw beim nochmaligen klicken, ihn wieder entfernt.

Es gibt in HTML ein ganz tolles Element mit dem Namen...kommst du nie drauf...button.
Und damit ist sowas ohne Probleme möglich.
Bitte warten ..
Mitglied: Letavino
11.11.2010 um 11:44 Uhr
@nxclass:
Javascript wollte ich nach möglichkeit weglassen, da ja nicht jeder Benutzer JS eingeschaltet hat.

Die Form Methode hatte ich ganz am Anfang genommen.
Das Eintragen der Mitarbeiter funktioniert damit einwandfrei, dabei können die restlichen Formularfelder aber nicht ausgelesen werden und können somit nicht in Sessions gespeichert werden, um sie auch danach noch in den Feldern stehen zu haben.

@dog:
Buttons bringen mich in diesem Fall aber nur weiter, wenn ich Javascript benutze, oder nicht?
Bitte warten ..
Mitglied: dog
11.11.2010 um 19:35 Uhr
Buttons bringen mich in diesem Fall aber nur weiter, wenn ich Javascript benutze, oder nicht?

Nein, woher kommt die Annahme?
Ein Button ist ein Submit-Element mit abweichendem Wert.
Bitte warten ..
Mitglied: Letavino
12.11.2010 um 08:59 Uhr
Ich laß bei "selfhtml" folgendes:

Klick-Buttons definieren (herkömmlich)
[...]
Ihren Sinn haben sie nur im Zusammenspiel mit Script-Sprachen wie Kapitel JavaScript, um eine Schaltfläche zu definieren, die z.B. auf Klick eine JavaScript-Aktion auslöst.

Wie kann ich denn dann nun mit einem Button eine Funktion aufrufen, ohne JS zu benutzen?
Bitte warten ..
Mitglied: dog
12.11.2010 um 15:04 Uhr
Wie kann ich denn dann nun mit einem Button eine Funktion aufrufen, ohne JS zu benutzen?

Ein Button ist ein Submit-Element
Bitte warten ..
Mitglied: Guenni
12.11.2010 um 15:41 Uhr
Hi Letavino,

dein Gedanke . . .

Der einzige Weg, es so vernünftig zu machen, wäre den Namen des Submitbuttons in "auswählen['.$id.'] . . .

. . . ist schon mal gut. Den Rest, " . . . in einer Schleife zu prüfen welcher Button gedrückt wurde . . .",

kannst du dir sparen, weil eh nur der eine, im Formular angeklickte Button gesendet wird.


Alle anderen Textfelder werden gesendet. Allerdings würde ich dazu die Textfelder (Vorname, Nachname)

im Formular auch mit den entspr. ID's in Arrays "packen", z.B.: name=\"vorname[$row[id]]\" value=\"$row[Vorname]\".


So hast du beides erreicht: Alle Textfelder werden gesendet, Vor- und Nachname des Mitarbeiters, den du eintragen willst,

kannst du nach Absenden mit dem Index des gesendeten Buttons ansprechen.


Beachte aber: Der Button "kommt an" als [cmd] = Array ([DatensatzID] => Eintragen), wie im Formular definiert.

Den Index liest du mit der Funktion key aus: $buttonID=key($_POST['cmd']);

Jetzt kannst du mit $buttonID Vor- und Nachname des Mitarbeiters ansprechen:

$vorname=$_POST['vorname'][$buttonID];
$nachname=$_POST['nachname'][$buttonID];

Ein kleines Beispiel:

01.
<?php 
02.
//error_reporting(E_ALL); 
03.
//ini_set('display_errors','On'); 
04.
mysql_connect("localhost","guenni","guenni"); 
05.
mysql_select_db("test"); 
06.
 
07.
/* 
08.
* Eine Ausgabe eines POST-Arrays kann immer hilfreich sein. 
09.
* Dort sieht man, dass nur der angeklickte Submit-Button gesendet wurde und 
10.
* sein Index zu einem Datensatz passt. 
11.
*/ 
12.
 
13.
//if(isset($_POST['cmd'])){ 
14.
// echo "<pre>"
15.
// print_r($_POST); 
16.
// echo "</pre>"
17.
//} 
18.
 
19.
/* 
20.
* Wenn ein Button gesendet wurde . . .  
21.
*/ 
22.
if(isset($_POST['cmd'])){ 
23.
 /* 
24.
 * . . . wird mit der Funktion key der Schlüssel des Arrays ausgelesen. 
25.
 */ 
26.
 $buttonID=key($_POST['cmd']); 
27.
 /* 
28.
 * Mit diesem Schlüssel kann man jetzt den Mitarbeiter ansprechen, der zu 
29.
 * diesem Button im Formular gehört bzw. den man eintragen will. 
30.
 */ 
31.
 $vorname=$_POST['vorname'][$buttonID]; 
32.
 $nachname=$_POST['nachname'][$buttonID]; 
33.
 echo "<p>Es wurde Button mit der ID $buttonID gedrückt</p>"
34.
 echo "<p>Mitarbeiter: $nachname, $vorname</p>"
35.
36.
?> 
37.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
38.
<html> 
39.
<head> 
40.
<title>Auswahl mit Button</title> 
41.
</head> 
42.
<body> 
43.
<?php 
44.
/* 
45.
* Tabelle abfragen 
46.
*/ 
47.
$result=mysql_query("select * from tabelle2 order by Nachname"); 
48.
?> 
49.
<form action="" method="post"
50.
<table> 
51.
<?php  
52.
/* 
53.
* Jeder Datensatz wird nun in einer Tabellenreihe ausgegeben. Die Namen der Textfelder sowie 
54.
* der Name des Submitbuttons werden als Array definiert, mit der ID des Datensatzes als Index. 
55.
*/ 
56.
while($row=mysql_fetch_array($result,MYSQL_ASSOC)){ 
57.
 echo "<tr>"
58.
 echo "<td><input type=\"text\" name=\"vorname[$row[id]]\" value=\"$row[Vorname]\"></td>"
59.
 echo "<td><input type=\"text\" name=\"nachname[$row[id]]\" value=\"$row[Nachname]\"></td>"
60.
 echo "<td><input type=\"submit\" name=\"cmd[$row[id]]\" value=\"Eintragen\"></td>"
61.
 echo "</tr>";  
62.
63.
?> 
64.
</table> 
65.
</form> 
66.
</body> 
67.
</html>
Gruß
Günni
Bitte warten ..
Mitglied: Letavino
12.11.2010 um 16:11 Uhr
Super!
Was ich jetzt bei einem schnellen Testdurchlauf gesehen habe, scheint es nun wunderbar zu funktionieren!

Eigentlich war mein einziges Problem ja, dass ich noch nicht wusste, dass man einen Button Namen als Array an sich abfragen kann.

mit der kleinen Änderung:

01.
if(isset($_POST['auswählen'])) 
02.
03.
	$id=key($_POST['auswählen']);
funktioniert nun alles einwandfrei!
Herzlichen Dank an deine Kompetente Hilfe und natürlich auch an alle anderen, die versucht haben, mir bei meinem Problem weiter zu helfen!
Lg Florian
Bitte warten ..
Ähnliche Inhalte
Exchange Server
Exchange 2007 Nachrichtenverfolgung richtig lesen
Frage von wescraven07Exchange Server

Hallo Leude, ich beschäftige mich gerade mit der Exchange Toolbox bzw. der Exchangenachrichtenverfolgung Und zwar aus gegebenen Anlass, weil ...

Datenbanken
Informix SE INSERT Felder initialisieren, aber richtig?
Frage von RalfHackmannDatenbanken1 Kommentar

Hallo, es kommt immer wieder mal vor, dass ich Datensätze in einer CSV Datei erhalte und diese in die ...

Voice over IP
Wireshark ausschnitt richtig lesen - QOS am Switch - YEALINK telefonanlage
Frage von takvorianVoice over IP3 Kommentare

Hallo zusammen, habe bei einem Bekannten eine yealink cloud Telefonanlage. Hier besteht das Problem mit abbrechenden Telefonaten bzw. unverständlichkeit ...

Administrator.de Feedback
Was machen wenn man die Werbung nicht lesen kann?
gelöst Frage von BassFishFoxAdministrator.de Feedback10 Kommentare

Hallo Frank , Gegen Werbung habe ich ja nix. Aber was ist mit Werbung die man nicht lesen kann? ...

Neue Wissensbeiträge
Sicherheit

Blackberry stirbt - Keine Updates für Priv mehr

Tipp von certifiedit.net vor 29 MinutenSicherheit

Blackberry wird zu einer 08/15 Firma und geht wohl mehr und mehr den Weg, den HTC schon ging. Von ...

Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 2 TagenWindows 107 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 2 TagenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 2 TagenInternet5 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

Heiß diskutierte Inhalte
Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
gelöst Frage von HelloWorldBatch & Shell20 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

LAN, WAN, Wireless
WLAN Reichweite erhöhen mit neuer Antenne
gelöst Frage von gdconsultLAN, WAN, Wireless10 Kommentare

Hallo, ich besitze einen TL-WN722N USB-WLAN Dongle mit einer richtigen Antenne. Ich frage mich jetzt ob man die Reichweite ...

Router & Routing
Wieso kann ich den UPD 7000-9000 nicht freigeben?
Frage von Jayk0bRouter & Routing8 Kommentare

Router: Telekom W 723V Ports: UDP 7000-9000 Können nicht frei gegeben werden. Benutzgrund: Rocket League 7000 – 9000 UDP ...

Router & Routing
Fritzbox Gastnetz - exposed Host - zur Sophos IPTV
Frage von medikopterRouter & Routing8 Kommentare

Hallo zusammen, ich habe eine Frage bezüglich des Fritz box Gastzugangs an einer Sophos UTM Home. An liebsten wäre ...