PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   Buttons und Eingabefelder in einer Schleife (https://www.php-resource.de/forum/php-developer-forum/68655-buttons-und-eingabefelder-in-einer-schleife.html)

PHPhans 03-04-2006 14:54

Buttons und Eingabefelder in einer Schleife
 
Hi also zunächst hab ich die Such Funktion benutzt und hab nix passendes gefunden.

Also ich hab da Formular der Datensätze aus der Datenbank ausliest und je nachdem wieviele in der DB sind werden dementsprechend die Datensätze auf der Seite in Eingabefeldern ausgegeben. Dazu habe ich noch die Buttons die ich zum Löschen der Datensätze benutzen möchte.

Frage1: Wie kann ich, wenn ich die Eingabefelder verändere, ein Update an die Datenbank schicken. Wenns geht am besten mit dem "onchange".
Kann ich irgendwie den value Wert ansprechen, weil dort steht was aktuell geändert wurde.

Frage2: Ist im Prinzip das gleiche wie die Frage 1, aber wie geht das, wenn ich den Löschen Button anklicke dass der entsprechende Datensatz gelöscht wird.
Irgendwie geht das in der Schleife nicht, denn da werden alle Datensätze gelöscht.

Falls jemand sowas ähnliches mal gemacht hat am besten mal den Code posten


PHP-Code:

while($ds mysql_fetch_assoc($result)) { 
 echo

   <input type=\"button\" name=\"button"
.$ds["ID"]."\"      value=\"Löschen\" onClick=";/*$sql = "Delete FROM tebelle where ID =".$ds["ID"].";";mysql_query($sql) OR die(mysql_error());*/echo" > 
          
  <input name=\"eingabefeld"
.$ds["ID"]."\" size=\"50\" value= \"".$ds["title"]."\"   type=\"text\" onchange="; echo"> 
          
 "

          
$i++; 
          


Ich bedanke mich schonmal im Voraus!

komikaa 03-04-2006 15:24

also sorry aber ich versteh dein problem nicht so wirklich

PHPhans 03-04-2006 16:01

Es geht einfach dadrum dass ich Buttons und Eingabefelder in einer Schleife habe und diese auch benutzen wil.
Die schleife gibt, jenachdem wieviele Datensätze es gibt, Eingabefelder und Buttons aus.

Das Problem dabei ist dass ich die Buttons nicht benutzen kann, das heisst wenn ich auf einen der Buttons klicke werden alle Datensätze gelöscht und nicht der einzelne.

Der Sinn bei der ganzen Sache ist dass ich auf der Webseite ein Datensatz verändern und löschen möchte


Also ganz einfach gesagt ich brauche sowas wie
if Button1 = angeklickt then Lösche datensatz mit der ID 1
if Button2 = angeklickt then Lösche datensatz mit der ID 2
das geht nicht weil sich das in der schleife befindet

wahsaga 03-04-2006 16:03

Zitat:

Original geschrieben von PHPhans
Das Problem dabei ist dass ich die Buttons nicht benutzen kann, das heisst wenn ich auf einen der Buttons klicke werden alle Datensätze gelöscht und nicht der einzelne.
Dann übergebe die ID des Datensatzes, so dass du den "richtigen" Löschen kannst - z.b. im value-Attribut des Buttons.

PHPhans 03-04-2006 16:23

Das mache ich ja mit dem name-Attribut.

Also gut nehmen wir an in der Datenbank sind 4 Satensätze:

"statisch":ich mach mir 4 Buttons mit 4 Eingabefeldern. Hirbei ist es kein Problem onClick bzw. onchange zu benutzen.

dynamisch:weil jetz das ganze in der schleife ist kann ich diese onclick sachen net nutzen, weil er biem Löschen alle Datensätze löschen würde.


Button Eingabefeld vorbelgt mit Datensatz aus der Datenbank
----------- ------------------------------------------------------
|Löschen| |eins |
----------- ------------------------------------------------------
----------- ------------------------------------------------------
|Löschen| |zwei |
----------- ------------------------------------------------------
----------- ------------------------------------------------------
|Löschen| |drei |
----------- ------------------------------------------------------
----------- ------------------------------------------------------
|Löschen| |vier |
----------- ------------------------------------------------------
...


am besten wärs wenn ich außerhalb der schleife diese onclick bzw. onchange Sachen ansprechen könnte, damit ich dann sagen kann z.B:
if Button1.onclick then loeschen();
if Button2.onclick then loeschen();
...
So würde nur der Datensatz gelöscht werden den man auch will.

In der Schleife geht das aber nicht.

Ich kann mir nicht vorstellen dass ich der erst bin der Datensätze dynamisch verwalten möchte.

Habt ihr vieleicht andere Ideen oder Vorschläge wie man das lösen könnte, sicher gibt es eine elegantere Art das zu machen.

komikaa 03-04-2006 16:31

du musst eben die namen deiner buttons richtig vergeben - dann geht das auch.

vergeb einfach nen array
$name[$i]

dann kannst du auf die zugreifen.

am besten suchst du mal danach im forum - gibt es mehrere beitrage dazu

wahsaga 03-04-2006 16:32

Zitat:

Original geschrieben von PHPhans
dynamisch:weil jetz das ganze in der schleife ist kann ich diese onclick bzw. onchange sachen net nutzen.
Wieso das denn nicht?
"Dynamisch" erzeugst du mit PHP auf dem Server HTML- und ggf. Javascript-Code.
Der Browser interessiert sich für diese Art von Dynamik aber kein bisschen.

Zitat:

am besten wärs wenn ich außerhalb der schleife diese onclick bzw. onchange Sachen ansprechen könnte, damit ich dann sagen kann z.B:
if Button1.onclick then loeschen();
if Button2.onclick then loeschen();
...
So würde nur der Datensatz gelöscht werden den man auch will.

Bist du dir sicher, dass du den Unterschied zwischen server- und clientseitig schon verstanden hast ...?

Kropff 03-04-2006 16:34

also wenn du kein ajax einsetzt, mußt du die seite eh neu aufrufen. also kein onclick, bzw. onchange.

mach bei form action ein $_SERVER['PHP_SELF'] und aus type=button ein submit. dann überprüfst du mit name, welcher button gedrückt wurde und löschst den datensatz

gruß
peter

PHPhans 03-04-2006 16:57

Also vielen Dank jetz bin ich viel schlauer !

Hm ok also ich probier mal die "selbstaufruf methode" nochmal aus, aber
muss ich mir doch JavaScript noch reinziehen. Falls jemand schnell ein ajax Lösung parat hat wäre ich sehr Dankbar. ajax scheint da sehr viel komfortabler zu sein.

PHPhans 03-04-2006 17:04

Zitat:

Original geschrieben von wahsaga
Bist du dir sicher, dass du den Unterschied zwischen server- und clientseitig schon verstanden hast ...?
Das war nur um zu verdeutlichen was genau ich machen will, das ist klar dass das so net geht. :D

PHPhans 26-04-2006 14:21

Lösung mit "Selbstaufruf":

PHP-Code:

//tabelle = hans
//attribut(spalte) = wurst

//Prüft of beim Selbstaufruf der Update oder Delete Button gedrückt wurde und führt das entsprechende Statement aus
   
if  ( isset($_POST['delete']) ) {
   
$sql "delete from hans where ID = " $_POST["index"]. ";";
   
$result mysql_query($sql) OR die(mysql_error());
   }
   if  ( isset(
$_POST['update']) ) {
   
$sql "update hans set wurst = '"$_POST["eingabefeld"] ."' where ID = " $_POST["index"]. ";";
   
$result mysql_query($sql) OR die(mysql_error());
   }
//-------------------------------------------------------------------------------------------------

//holt sich die Datensätze aus der DB
$sql "SELECT * FROM hans order by 1 asc;"
$result mysql_query($sql) OR die(mysql_error());
//-----------------------------------------

if(mysql_num_rows($result)) { //prüft ob Datesätze vorhanden sind
  
while($ds mysql_fetch_assoc($result)) {    //holst sich ein Satz von result in $ds
//----Ausgabe der Eingabefelder(vorgelgt mit dem Satz aus der DB) und Buttons     
    
echo "<form method=\"post\" action=\"" $_REQUEST["SELF_PHP"] . "\"  name=\"Schleife\">
    <tr>
     <INPUT TYPE=\"hidden\" NAME=\"index\" VALUE=\""
.$ds["ID"]."\">
     <input name=\"eingabefeld\" size=\"50\" value=\""
.$ds["wurst"]."\" type=\"text\">
     <input type=\"submit\" name=\"update\" value=\"updatebutton\" class=\"block_button\">
     <input type=\"submit\" name=\"delete\" value=\"deletebutton\" class=\"block_button\">
   </tr>
   </form>"
;
  
//das form in der schleife ist nötig weil der bestimmte datensatz bearbeitet werden soll
//-----------------------------------------------------------------
  
}//while
}//if 



Alle Zeitangaben in WEZ +2. Es ist jetzt 05:08 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG