letavino
Goto Top

Wie lese ich hier das richtige Feld aus?

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:

<code="php">
$query = mysql_query('SELECT * FROM mitarbeiter');
while($result_row = mysql_fetch_object($query))
{
$id = $result_row->mitarbeiter_id;
$vorname = $result_row->vorname;
$nachname = $result_row->nachname;


echo'

<input type="submit" name="auswählen" value="'.$vorname.' '.$nachname.'">
<input type="hidden" name="add" value="'.$id.'">

<br>

';
};


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

Content-Key: 154643

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

Printed on: April 19, 2024 at 02:04 o'clock

Member: SlainteMhath
SlainteMhath Nov 09, 2010 at 10:49:56 (UTC)
Goto Top
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 face-smile
lg,
Slainte
Member: nxclass
nxclass Nov 09, 2010 at 10:57:57 (UTC)
Goto Top
.. 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 !?

echo '<form action="" method="post">  
# ... FOR ...
echo '<div>'.$vorname.' '.$nachname.' <div><input type="checkbox" name="add" value="'.$id.'" /></div></div>';  
# ...
echo '<div><input type="submit" name="action" value="Hinzufügen" /></div> ';  
echo '</form>';  
Member: Letavino
Letavino Nov 09, 2010 at 11:22:34 (UTC)
Goto Top
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?
Member: nxclass
nxclass Nov 09, 2010 at 18:52:17 (UTC)
Goto Top
... ok - dann kannst Du
  • bei jedem Datensatz ein FORM anlegen
# ... FOR ...
echo '<form action="" method="post">  
echo '<input type="hidden" name="add" value="'.$id.'" /> <div>'.$vorname.' '.$nachname.' </div> <div><input type="submit" name="action" value="Hinzufügen" /></div> ';  
echo '</form>';  
# ...

  • oder Du arbeitest mit Javascript und füllst / sendest ein "verstecktes" FORM wenn der Button gedrückt wird - in HTML:
<form id="form" action="" method="post"> <input id="formvalue" type="hidden" name="id" value="" /> </form>  
#... FOR ...
Name <input type="button" name="action" value="Hinzufügen" onclick="document.getElementByID('formvalue').value='0815'; document.forms['form'].submit();" />  
# ...
... oder so ähnlich.
Member: dog
dog Nov 09, 2010 at 22:33:25 (UTC)
Goto Top
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. face-smile
Und damit ist sowas ohne Probleme möglich.
Member: Letavino
Letavino Nov 11, 2010 at 10:44:32 (UTC)
Goto Top
@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?
Member: dog
dog Nov 11, 2010 at 18:35:44 (UTC)
Goto Top
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.
Member: Letavino
Letavino Nov 12, 2010 at 07:59:19 (UTC)
Goto Top
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?
Member: dog
dog Nov 12, 2010 at 14:04:19 (UTC)
Goto Top
Wie kann ich denn dann nun mit einem Button eine Funktion aufrufen, ohne JS zu benutzen?

Ein Button ist ein Submit-Element
Member: Guenni
Guenni Nov 12, 2010 at 14:41:30 (UTC)
Goto Top
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:

<?php
//error_reporting(E_ALL);
//ini_set('display_errors','On'); 
mysql_connect("localhost","guenni","guenni");  
mysql_select_db("test");  

/*
* Eine Ausgabe eines POST-Arrays kann immer hilfreich sein.
* Dort sieht man, dass nur der angeklickte Submit-Button gesendet wurde und
* sein Index zu einem Datensatz passt.
*/

//if(isset($_POST['cmd'])){ 
// echo "<pre>"; 
// print_r($_POST);
// echo "</pre>"; 
//}

/*
* Wenn ein Button gesendet wurde . . . 
*/
if(isset($_POST['cmd'])){  
 /*
 * . . . wird mit der Funktion key der Schlüssel des Arrays ausgelesen.
 */
 $buttonID=key($_POST['cmd']);  
 /*
 * Mit diesem Schlüssel kann man jetzt den Mitarbeiter ansprechen, der zu
 * diesem Button im Formular gehört bzw. den man eintragen will.
 */
 $vorname=$_POST['vorname'][$buttonID];  
 $nachname=$_POST['nachname'][$buttonID];  
 echo "<p>Es wurde Button mit der ID $buttonID gedrückt</p>";  
 echo "<p>Mitarbeiter: $nachname, $vorname</p>";  
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>
<head>
<title>Auswahl mit Button</title>
</head>
<body>
<?php
/*
* Tabelle abfragen
*/
$result=mysql_query("select * from tabelle2 order by Nachname");  
?>
<form action="" method="post">  
<table>
<?php 
/*
* Jeder Datensatz wird nun in einer Tabellenreihe ausgegeben. Die Namen der Textfelder sowie
* der Name des Submitbuttons werden als Array definiert, mit der ID des Datensatzes als Index.
*/
while($row=mysql_fetch_array($result,MYSQL_ASSOC)){
 echo "<tr>";  
 echo "<td><input type=\"text\" name=\"vorname[$row[id]]\" value=\"$row[Vorname]\"></td>";  
 echo "<td><input type=\"text\" name=\"nachname[$row[id]]\" value=\"$row[Nachname]\"></td>";  
 echo "<td><input type=\"submit\" name=\"cmd[$row[id]]\" value=\"Eintragen\"></td>";  
 echo "</tr>";   
}
?>
</table>
</form>
</body>
</html>

Gruß
Günni
Member: Letavino
Letavino Nov 12, 2010 at 15:11:52 (UTC)
Goto Top
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:

if(isset($_POST['auswählen']))  
{
	$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! face-smile
Lg Florian