Lösch- & Movefunktion im Fomular
Stefan
- php
Hallo selfhtml,
ich bräuchte einen Denkanstoß für mein Projekt.
Per SQL-Select setze ich ich Inhalte aus einer Datenbank in eine Tabelle. In jeder Zeile gibt es einen Checkbutton und unterhalb der Tabelle soll es eine Funktion "Löschen" und eine "Verschieben nach Datum-X" geben.
Da es innerhalb eines Formulars nur einen Submitbutton geben darf, wollte ich wissen wie ich dieses änhlich realisieren kann.
Bitte Hilfe!
du machst am besten für den namen der checkbuttons ein array
...name="checkbuttons[]"...
dann nach dem submit überprüfst du ja z.B.
if($_REQUEST['abgesendet'] == 'ok'){
und guckst dann welche buttons angecheckt wurden und machst was damit
for($i=0; $i <= sizeof($_REQUEST['checkbuttons']; $i++){
echo $_REQUEST['checkbuttons'][$i];
}
is natürlich nur der ansatz ;-)
du machst am besten für den namen der checkbuttons ein array
...name="checkbuttons[]"...
dann nach dem submit überprüfst du ja z.B.
if($_REQUEST['abgesendet'] == 'ok'){
und guckst dann welche buttons angecheckt wurden und machst was damit
for($i=0; $i <= sizeof($_REQUEST['checkbuttons']; $i++){
echo $_REQUEST['checkbuttons'][$i];
}is natürlich nur der ansatz ;-)
Den Teil habe ich so ähnlich realisiert.
Die Checkbutton haben den Namen bspw. neu[] mit value="SQL-ID".
Das Löschen in der Datenbank läuft dann über ein foreach().
Schonmal vielen Dank für die Antworten.
Hello,
dann nach dem submit überprüfst du ja z.B.
if($_REQUEST['abgesendet'] == 'ok'){
Mit $_REQUEST würde ich in diesem Fall überhaupt nicht arbeiten, weil darin auch per URL übertragene Parameter stehen können. Die sind für derartige Datenbankzugriffe (Löschen) nicht optimal.
Eine ungeschriebe[1] Regel lautet:
alle Funktionen der Ressourcen, die bookmarkfähig sein sollen, per URL-Parameter übergeben.
Bookmarkfähig bedeutet auch, dass die Funktion mit genau diesen Parametern
öfter wiederholt werden soll
alle Funktionen der ressourcen, die nur über Formular gesteuert werden sollen
immer als Post-Parameter übergeben, insbesondere dann, wenn die Ausführung
der Funktion vermutlich nicht wieder mit denselben Paramertern ausgeführt werden
soll.
und guckst dann welche buttons angecheckt wurden und machst was damit
for($i=0; $i <= sizeof($_REQUEST['checkbuttons']; $i++){
echo $_REQUEST['checkbuttons'][$i];
}
dafür gibt es seit PHP 4 das Konstrukt "foreach()"
Aber das kommt hier gar nicht zum tragen, weil ohnehin nur maximal EIN Button geclickt werden durfte. Wenn mehr als ein Button übertragen werden, handelt es sich um einen Fake oder Fehler.
for($i=0; $i <= sizeof($_REQUEST['checkbuttons']; $i++){
echo $_REQUEST['checkbuttons'][$i];
}
Stattdessen also lieber
$btn = 'home'; ## Vorbelegung
if (isset($_POST['btn']) and is_array($_POST['btn']) and count($_POST['btn'] == 1))
{
$btn = key($_POST['btn']); ## Namen des ersten Elementes des Arrays holen
}
[1] ich habe sie hier allerdings schon oft geschrieben
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Aber das kommt hier gar nicht zum tragen, weil ohnehin nur maximal EIN Button geclickt werden durfte. Wenn mehr als ein Button übertragen werden, handelt es sich um einen Fake oder Fehler.
warum das?
er meinte sicherlich checkboxen
nicht radiobuttons
Hello,
Aber das kommt hier gar nicht zum tragen, weil ohnehin nur maximal EIN Button geclickt werden durfte. Wenn mehr als ein Button übertragen werden, handelt es sich um einen Fake oder Fehler.
warum das?
er meinte sicherlich checkboxen
nicht radiobuttons
Ok, er meinte wahrscheinlich Checkboxen
Und ich meinte Submitbuttons
Haben wir aneinander vorbeigeredet.
Für die Checkboxen hatte ich im anderen Posting einen Vorschlag gepostet.
Da fehlt dann natürlich noch die Berechtigungsprüfung usw.
Wenn man da nicht aufpasst, kann eine Tabelle sonst in nullkommanix leer sein.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
echo $begrüßung;
Da es innerhalb eines Formulars nur einen Submitbutton geben darf, wollte ich wissen wie ich dieses änhlich realisieren kann.
Diese Annahme ist nicht richtig. Du darfst so viele Submit-Buttons ins Formular einfügen wie du möchtest. Es kann aber immer nur höchstens[*] einer von denen das Formular absenden. Gib ihnen beispielsweise unterschiedliche Werte (value) bei gleichem Namen (name), dann kannst du abfragen, welcher aktiviert wurde.
[*] "Höchstens", weil beim Absenden mit Enter ja keiner aktiv wurde. Allerdings verhalten sich in dem Fall die Browser unterschiedlich.
echo "$verabschiedung $name";
Hello,
Per SQL-Select setze ich ich Inhalte aus einer Datenbank in eine Tabelle. In jeder Zeile gibt es einen Checkbutton und unterhalb der Tabelle soll es eine Funktion "Löschen" und eine "Verschieben nach Datum-X" geben.
Die Dinger heißen "Checkbox"
Da es innerhalb eines Formulars nur einen Submitbutton geben darf, wollte ich wissen wie ich dieses änhlich realisieren kann.
In jedem Form darf es soviele <input>-Elemente vom Typ "Submit" geben, bis der Browser platzt.
Es wird aber bei bestimmungsgemäßem Gebrauch maximal einer übertragen mit dem Request.
Die Sache mit dem Array (siehe Rambo0815) ist ncht schlecht.
Bei mir hat sich bewährt, die Namensbereiche etwas aufzuteilen.
Daten, die direkte Bindung erhalten, werden im Form mit "data[name]" bezeichnet, Steuerflusselemente mit "ctrl[name]" usw. Das hat den Vorteil, dass man z.B. das Array
$_POST['data'] rein mechanisch rekursiv bereinigen kann von Maskierungen oder auch unerlaubten Einträgen, vergleichen kann, ob die Daten erwünscht waren usw.
für den Button kannst Du z.B. nehmen
btn[delete] Löschen
btn[show] Anzeigen
btn[form][F001] Formular wechseln...
usw.
Bei Checkboxen bietet sich z.B. an
ctrl[delete][$id] ### ID des Datensatzes
Dann kannst Du später das Array durchgehen:
if(isset ($_POST['crtl']['delete']) and is_array($_POST['crtl']['delete']))
{
$_delete = '';
foreach ($_POST['crtl']['delete'] as $key => $val)
{
$_delete[] = intval($val);
}
}
if (in_array(0,$_delete,true)
{
### Hilfe, ein Fakeversuch. Die ID 0 gibt es nicht und ist verboten (sollte man so machen!)
}
else
{
$in = implode (',',$_delete);
$sql = "DELETE from $table
where ìd
IN ($in);
}
Und das machst Du natürlich nur, wenn
if (isset($_POST['btn']['delete'])
{
### Löschen ausführen
}
Teile die Aufgaben in sinnvolle Funktionen auf, dann kannst Du über die Rückgabewerte der Funktionen leicht steuern, ob ein Abbruch der Aktion stattfinden muss, die rote Lampe beim Admin angehen muss, oder was auch immer...
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom