Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 3598 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 ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Virtualisierung
gelöst VMDK Datei vergrößern auf der Console welche Datei ist die richtige? (3)

Frage von fireskyer zum Thema Virtualisierung ...

Outlook & Mail
gelöst Outlook 2013 Von Feld in alten Entwürfen (2)

Frage von Xartor zum Thema Outlook & Mail ...

Datenbanken
Microsoft SQL Server Feld mit Trigger aktualisieren (3)

Frage von ursus57 zum Thema Datenbanken ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...