gechger
Goto Top

mehrere Ausgaben eines Arrays davon soll eine Ausgabe per Checkbox markiert und geändert werden. Bloß wie?

Mit Checkboxen habe ich schon gearbeitet, aber in diesem Fall komme ich mit meinem Wissen nicht weiter.

Hallo Forum,

schön das es Euch gibt. Ihr habt mir bisher immer weiter helfen können. Auch im aktuellen Fall fehlt mir mal wieder der letzte Schubs in die richtige Richtung.

Ich habe ein Formular, aus dem ein User Daten abrufen kann. Diese Daten stehen schön in einem Array und werden auch über eine Schleife ausgegeben. So kann es sein, daß dort 1 Datensatz oder auch ganz viele Datensätze ausgegeben werden.

Der Admin soll diese Daten überprüfen und wenn nötig ändern. Die Auswahl der Datensätze, die geändert werden sollen, will ich durch Checkboxen markieren. Beim Absenden der Checkbox soll nur der gewählte Datensatz in einer neuen Tabelle angezeigt und geändert werden. Hier mal der relevante Teil des Scripts:

while ($row1 = mysql_fetch_assoc($result1)) {
         //echo "<pre>"; 
         //print_r($row1);
         //echo "</pre>"; 
         if (@$_POST["nachname"] == @$row1["name"]){  
                 if (!isset($_POST['daten'])) {  
?>


<form action="aendern.php" method="post" name="Formular" onSubmit="return chkFormular()">  
<table border="1" >  
         <tr>
                 <td width="120"><font size="-1">Datum </font></td>  
                 <td width="180"><font size="-1">Name</font></td>  
                 <td width="100"><font size="-1">Stunden</font></td>  
                 <td><input type="radio" name="daten" value="id"></td></form>  
         </tr>
         <tr>
                 <td width="120"  bgcolor="#FFFFFF" name="datum"><font size="-1"><b><? echo $row1["datum"]; ?></b></font></td>  
                 <td width="180" bgcolor="#FFFFFF" name="name"><font size="-1"><b><? echo $row1["name"]; ?></b></font></td>  
                 <td width="100"  bgcolor="#FFFFFF" name="zeit"><font size="-1"><b><? echo $row1["zeit"]; ?></b></font></td>  
                 <td><input type="submit" value="ändern"></td>  
         </tr>
         <tr>
                 <td width="250"><font size="-1">Projekt</font></td>  
                 <td width="250"><font size="-1">Auftrag</font></td>  
                 <td width="250"><font size="-1">Einsatz</font></td>  
                 <td width="60"><font size="-1">Tätigkeit</font></td>  
         </tr>
         <tr>
                 <td width="250" bgcolor="#FFFFFF" name="projekt"><font size="-1"><b><? echo $row1["projekt"]; ?></b></font></td>  
                 <td width="250" bgcolor="#FFFFFF" name="auftrag"><font size="-1"><b><? echo $row1["auftrag"]; ?></b></font></td>  
                 <td width="250" bgcolor="#FFFFFF" name="einsatz"><font size="-1"><b><? echo $row1["einsatz"]; ?></b></font></td>  
                 <td width="60" bgcolor="#FFFFFF" name="tat"><font size="-1"><b><? echo $row1["taetigkeit"]; ?></b></font></td>  
         </tr>
         <tr height="8">  
         <td height="8" bgcolor="#999999"></td>  
         <td height="8" bgcolor="#999999"></td>  
         <td height="8" bgcolor="#999999"></td>  
         <td height="8" bgcolor="#999999"></td>  
         </tr>
</table>
<?
}
else{
.......

Ich habe ja nur eine Tabelle, die durch die Schleife mehrfach ausgegeben werden kann. Ich kann also nur einen Radiobutton definieren. Er trägt für jeden Datensatz den gleichen Namen ind das gleiche value.

Wie erreiche ich es also, daß nur der markierte Datensatz des Arrays weitergegeben wird in die neue Tabelle.

Jede Idee hilft.

Schöne Grüße
Christof

Content-ID: 120204

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

Ausgedruckt am: 22.11.2024 um 05:11 Uhr

thaenhusen
thaenhusen 10.07.2009 um 14:24:29 Uhr
Goto Top
Moin.

Bei den Inputs machst Du einfach folgendes:

<input type="checkbox" name="DSbeachten" value="<?php echo $row1["idfeld"]; ?>" />

Damit baust Du dir ein ID-Array mit den ID's der Datensätze, die bearbeitet werden sollen.

In dem nächsten Formular läufst Du das Array DSbeachten durch und kannst die Datensätze daduch zur Änderung anbieten.

in_array() wird Dir da wahrscheinlich weiterhelfen.

HTH.
MK
gechger
gechger 10.07.2009 um 14:44:32 Uhr
Goto Top
Hallo MK,

im Prinzip also das Gleiche, als wenn ich eine Liste mit 10 Checkboxen habe und mit array im Namen die Daten anschließend weiterverarbeite. Das habe ich schon gemacht, dann werde ich das hier auch so lösen.

Vielen Dank für Deine prompte Antwort.

Schöne GRüße
Christof
thaenhusen
thaenhusen 10.07.2009 um 14:57:37 Uhr
Goto Top
Hallo Christof.

Im Prinzip ja. Wenn Du aber eindeutige ID's hast und mit denen arbeitest wird das
ganze meiner Meinung nach wartungsfreundlicher...

Schöne Grüße
MK
gechger
gechger 10.07.2009 um 17:39:25 Uhr
Goto Top
Hallo MK,

leider krieg ich es nicht hin, weiss aber nicht wieso:

$result1 = mysql_query($sql1) OR die(mysql_error());
while ($row1 = mysql_fetch_assoc($result1)) {
         //echo "<pre>"; 
         //print_r($row1);
         //echo "</pre>"; 
         if (@$_POST["nachname"] == @$row1["name"]){  
                 if (!isset($_POST["daten[]"])) {         //prüfen, ob der Änderungsbutton gedrückt wurde  
?>


<form action="aendern.php" method="post">  
<table border="1" >  
         <tr>
                 <td width="120"><font size="-1">Datum </font></td>  
                 <td width="180"><font size="-1">Name</font></td>  
                 <td width="100"><font size="-1">Stunden</font></td>  
                 <td><input type="radio" name="daten" value="<?php echo $row1["id"]; ?>/"><?php echo $row1["id"]; ?></td>  
         </tr>
         <tr>
                 <td width="120"  bgcolor="#FFFFFF" name="datum"><font size="-1"><b><? echo $row1["datum"]; ?></b></font></td>  
                 <td width="180" bgcolor="#FFFFFF" name="name"><font size="-1"><b><? echo $row1["name"]; ?></b></font></td>  
                 <td width="100"  bgcolor="#FFFFFF" name="zeit"><font size="-1"><b><? echo $row1["zeit"]; ?></b></font></td>  

         </tr>
         <tr>
                 <td width="250"><font size="-1">Projekt</font></td>  
                 <td width="250"><font size="-1">Auftrag</font></td>  
                 <td width="250"><font size="-1">Einsatz</font></td>  
                 <td width="60"><font size="-1">Tätigkeit</font></td>  
         </tr>
         <tr>
                 <td width="250" bgcolor="#FFFFFF" name="projekt"><font size="-1"><b><? echo $row1["projekt"]; ?></b></font></td>  
                 <td width="250" bgcolor="#FFFFFF" name="auftrag"><font size="-1"><b><? echo $row1["auftrag"]; ?></b></font></td>  
                 <td width="250" bgcolor="#FFFFFF" name="einsatz"><font size="-1"><b><? echo $row1["einsatz"]; ?></b></font></td>  
                 <td width="60" bgcolor="#FFFFFF" name="tat"><font size="-1"><b><? echo $row1["taetigkeit"]; ?></b></font></td>  
         </tr>
         <tr height="8">  
         <td height="8" bgcolor="#999999"></td>  
         <td height="8" bgcolor="#999999"></td>  
         <td height="8" bgcolor="#999999"></td>  
         <td height="8" bgcolor="#999999"></td>  
         </tr>

</table>

<table>
<tr>
<td><input type="submit" value="ändern" ></td>  
</tr>
</table>


 </form>
<?}}
 else{

     echo "Selektion erfolgreich";  

     echo "<pre>";  
     print_r($daten);
     echo "</pre>";  

     echo "<pre>";  
     print_r($row1);
     echo "</pre>";  






}
}
?>


</body>

Ich prüfe zunächst mit
if (!isset($_POST["daten[]"])) ,
ob der Änderungsbutton betätigt wurde. Wenn nicht, soll er die gewünschten Daten zu Ansicht ausgeben, was auch passiert.

Wenn der Änderungsbutton gedrückt wird, will ich zunächst die Inhalte der Arrays ausgegeben haben, um zu sehen, was da drin steht.
Ich bekomme aber keine Anzeige.

Kann es sein, daß der Änderungsbutton nicht funktioniert, weil er Bestandteil der Schleife ist und zu jedem Datensatz erscheint?
Oder kann ich mit $_POST["daten[]") keine Prüfung vornehmen?

Schöne Grüße
Christof
godlie
godlie 10.07.2009 um 19:03:37 Uhr
Goto Top
Hallo,

einem Radiobutton ein array zu geben macht recht wenig sinn!
Da bei mehreren Radiobuttons ja nur einer ausgewählt werden kann.

Jetzt mal eine Frage fürs Verständnis:

Willst du jetzt das bei der Anzeige der gesamtdaten es nur möglich ist einen Datensatz zum Bearbeiten auszuwählen oder das mehrere bearbeitet werden können?
gechger
gechger 10.07.2009 um 20:40:27 Uhr
Goto Top
Hi Godlie,

schwere Entscheidung. Es ist sicherlich bessser in der Praxis, alle gewählten Datensätze in einem Rutsch zu ändern. Geht wahrscheinlich etwas schneller.

Schöne Grüße
Christof
gechger
gechger 10.07.2009 um 20:45:15 Uhr
Goto Top
Hallo an Alle,

ich habe jetzt mal getestet, die Ausgabe an ein neues Formular zu senden.
So sieht das neue Formular aus:

<? session_start();
error_reporting(E_ALL); #zeig alle Fehler
ini_set('display_errors', '1'); #sorgt dafür, dass überhaupt Fehler angezeigt werden  

?>

<!ENTITY % HTML.Version "-//W3C//DTD HTML 4.01 Frameset//EN"  
  -- Typical usage:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"  
            "http://www.w3.org/TR/html4/frameset.dtd">  

<html>
<head>
<title>Daten ändern</title>

        <meta http-equiv="expires" content="0">  
        <meta name="author" content="Christof Gersky">  

</head>

<body>
<?php
foreach($seite as $elem) {
$cldb = mysql_connect($_SESSION['host'], $_SESSION['dbuser'], $_SESSION['passwort']) or die(mysql_error());  
mysql_select_db($_SESSION['db']);  
$sql = "SELECT * FROM ".$_SESSION['tabdat']." where id = $elem";  
echo mysql_error();
$result = mysql_query($sql) OR die(mysql_error());
while ($row = mysql_fetch_assoc($result)) {
?>
<table border="1" >  
         <tr>
                 <td width="120"><font size="-1">Datum </font></td>  
                 <td width="180"><font size="-1">Name</font></td>  
                 <td width="100"><font size="-1">Stunden</font></td>  
         </tr>
         <tr>
                 <td width="120"  bgcolor="#FFFFFF" name="datum" value="<? echo $row["datum"]; ?>" > <font size="-1"></font></td>  
                 <td width="180" bgcolor="#FFFFFF" name="name" value="<? echo $row["name"]; ?>" > <font size="-1"></font></td>  
                 <td width="100"  bgcolor="#FFFFFF" name="zeit" value="<? echo $row["zeit"]; ?>" > <font size="-1"></font></td>  

         </tr>
         <tr>
                 <td width="250"><font size="-1">Projekt</font></td>  
                 <td width="250"><font size="-1">Auftrag</font></td>  
                 <td width="250"><font size="-1">Einsatz</font></td>  
                 <td width="60"><font size="-1">Tätigkeit</font></td>  
         </tr>
         <tr>
                 <td width="250" bgcolor="#FFFFFF" name="projekt" value="<? echo $row["projekt"]; ?>" > <font size="-1"></font></td>  
                 <td width="250" bgcolor="#FFFFFF" name="auftrag" value="<? echo $row["auftrag"]; ?>" > <font size="-1"></font></td>  
                 <td width="250" bgcolor="#FFFFFF" name="einsatz" value="<? echo $row["einsatz"]; ?>" > <font size="-1"></font></td>  
                 <td width="60" bgcolor="#FFFFFF" name="tat" value="<? echo $row["taetigkeit"]; ?>" > <font size="-1"></font></td>  
         </tr>
         <tr height="8">  
         <td height="8" bgcolor="#999999"></td>  
         <td height="8" bgcolor="#999999"></td>  
         <td height="8" bgcolor="#999999"></td>  
         <td height="8" bgcolor="#999999"></td>  
         </tr>

</table>
<?
}}
?>
</body>
</html>
<!ENTITY % HTML.Frameset "INCLUDE">  
<!ENTITY % HTML4.dtd PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  

Aber dann bekomme ich eine Fehlermeldung:

Parse error: syntax error, unexpected '<' in /pages/be/0e/d0006174/home/htdocs/webtool/aenderaktdat.php on line 24

Es ist die Zeile mit der foreach Schleife. Aber ich finde nichts, was diesen Fehler verursachen könnte.

Seht Ihr da was????
gechger
gechger 13.07.2009 um 13:22:46 Uhr
Goto Top
Hallo Forum,

bin nun einen Schritt weiter. Ich verwende einfach ein neues Formular.
Das erste sieht so aus:

<form action="aenderndo.php" method="post" >  
<table border="1" >  
         <tr>
                 <td width="120"><font size="-1">Datum </font></td>  
                 <td width="180"><font size="-1">Name</font></td>  
                 <td width="100"><font size="-1">Stunden</font></td>  
                 <td><input type="checkbox" name="daten" value="<?echo $row1["id"]?>"></td>  
         </tr>
         <tr>
                 <td width="120"  bgcolor="#FFFFFF" name="datum"><font size="-1"><b><? echo $row1["datum"]; ?></b></font></td>  
                 <td width="180" bgcolor="#FFFFFF" name="name"><font size="-1"><b><? echo $row1["name"]; ?></b></font></td>  
                 <td width="100"  bgcolor="#FFFFFF" name="zeit"><font size="-1"><b><? echo $row1["zeit"]; ?></b></font></td>  

         </tr>
         <tr>
                 <td width="250"><font size="-1">Projekt</font></td>  
                 <td width="250"><font size="-1">Auftrag</font></td>  
                 <td width="250"><font size="-1">Einsatz</font></td>  
                 <td width="60"><font size="-1">Tätigkeit</font></td>  
         </tr>
         <tr>
                 <td width="250" bgcolor="#FFFFFF" name="projekt"><font size="-1"><b><? echo $row1["projekt"]; ?></b></font></td>  
                 <td width="250" bgcolor="#FFFFFF" name="auftrag"><font size="-1"><b><? echo $row1["auftrag"]; ?></b></font></td>  
                 <td width="250" bgcolor="#FFFFFF" name="einsatz"><font size="-1"><b><? echo $row1["einsatz"]; ?></b></font></td>  
                 <td width="60" bgcolor="#FFFFFF" name="tat"><font size="-1"><b><? echo $row1["taetigkeit"]; ?></b></font></td>  
         </tr>
         <tr height="8">  
         <td height="8" bgcolor="#999999"></td>  
         <td height="8" bgcolor="#999999"></td>  
         <td height="8" bgcolor="#999999"></td>  
         <td height="8" bgcolor="#999999"></td>  
         </tr>
</table>
<?}
}
?>
<td><input type="submit" value="ändern"></td></form>  

Wichtig dabei war, daß der Änderungs-Button außerhalb der Schleife liegt. Liegt er innerhalb, wird nur der "selektierte" Datensatz übergeben. Jetzt bekomme ich alle.

Die anderdatdo.php, an die ich die Werte übergebe, sieht so aus:
<?php

$cldb = mysql_connect($_SESSION['host'], $_SESSION['dbuser'], $_SESSION['passwort']) or die(mysql_error());  
mysql_select_db($_SESSION['db']);  
$daten=$_POST["daten"];  
echo "<pre>";  
         print_r($daten);
         echo "</pre>";  
foreach ($daten as $key => $datenarr) {

        echo $datenarr;


$sql = "SELECT * FROM ".$_SESSION['tabdat']." where id='$datenarr' order by datum";  
echo mysql_error();
$result = mysql_query($sql) OR die(mysql_error());
while ($row = mysql_fetch_assoc($result)) {



?>


<table border="1" >  
         <tr>
                 <td width="120"><font size="-1">Datum </font></td>  
                 <td width="180"><font size="-1">Name</font></td>  
                 <td width="100"><font size="-1">Stunden</font></td>  

         </tr>
         <tr>
                 <td width="120"  bgcolor="#FFFFFF"><font size="-1"><b><? echo $row["datum"]; ?></b></font></td>  
                 <td width="180" bgcolor="#FFFFFF"><font size="-1"><b><? echo $row["name"]; ?></b></font></td>  
                 <td width="100"  bgcolor="#FFFFFF"><font size="-1"><b><? echo $row["zeit"]; ?></b></font></td>  

         </tr>
         <tr>
                 <td width="250"><font size="-1">Projekt</font></td>  
                 <td width="250"><font size="-1">Auftrag</font></td>  
                 <td width="250"><font size="-1">Einsatz</font></td>  
                 <td width="60"><font size="-1">Tätigkeit</font></td>  
         </tr>
         <tr>
                 <td width="250" bgcolor="#FFFFFF"><font size="-1"><b><? echo $row["projekt"]; ?></b></font></td>  
                 <td width="250" bgcolor="#FFFFFF"><font size="-1"><b><? echo $row["auftrag"]; ?></b></font></td>  
                 <td width="250" bgcolor="#FFFFFF"><font size="-1"><b><? echo $row["einsatz"]; ?></b></font></td>  
                 <td width="60" bgcolor="#FFFFFF"><font size="-1"><b><? echo $row["taetigkeit"]; ?></b></font></td>  
         </tr>
         <tr height="8">  
         <td height="8" bgcolor="#999999"></td>  
         <td height="8" bgcolor="#999999"></td>  
         <td height="8" bgcolor="#999999"></td>  
         <td height="8" bgcolor="#999999"></td>  
         </tr>
</table>

<?

  }
  }
?>

Darin stehen jetzt alle ausgewählten Elemente.

Vielen Dank für Eure Hilfe.

Schöne Grüße
Christof
Guenni
Guenni 13.07.2009 um 22:50:44 Uhr
Goto Top
Hi Christof,

jetzt kannst du Datensätze, die zum Ändern markiert sind, in einem zweiten Formular

ausgeben. Aber diese werden, wie im ersten Formular, doch erstmal nur angezeigt.

Du könntest doch in einem Formular die Abfrageergebnisse einer DB direkt in Text-

bzw. Inputfelder ausgeben.


Die Input-Felder werden als Array deklariert, Index ist die jeweilige

Datensatz-ID. Am Ende wird, ebenfalls als Array, eine Checkbox angehangen,

Dem Value der Checkbox wird ebenfalls die Datensatz-ID übergeben.

Am Ende des Formulars noch ein Submit-Button, und alle markierten Datensätze

werden nach Absenden geändert.


Erstmal das Formular:

<form action="<?echo $_SERVER[PHP_SELF];?>" method="post">  

<table border="1">  

<?php

$query="select . . . u.s.w.";  

$result=mysql_query($query);

while($row=mysql_fetch_array($result,MYSQL_ASSOC)){

?>

<tr>

<td><input type="text" name="vorname[<?echo $row[id];?>]" value="<?echo $row[Vorname];?>" /></td>  

<td><input type="text" name="nachname[<?echo $row[id];?>]" value="<?echo $row[Nachname];?>" /></td>  

... usw., je nach Anzahl Felder

<td><input type="checkbox" name="edit" value="<?echo $row[id];?>" /></td>  

</tr>

<?
}
?>
<tr>

<td colspan="Anzahl_Spalten"><input type="submit" value="Edit" name="cmd" /></td>  

</tr>

</table>

</form>

Die Verarbeitung des Formulars:

<?php
//Prüfen, ob das Formular gesendet wurde.

if(isset($_POST['cmd'])){  

//Prüfen, ob wenigstens eine Checkbox markiert war, denn nur die werden gesendet.
 
 if(isset($_POST['edit'])){  
  
   //Wenn dem so ist, werden die gesendeten Daten in Variablen abgelegt.
   //Ich persönlich finde, dann ist die Sache leichter zu handeln.
        
	$vornamen=$_POST['vorname'];  
	$nachnamen=$_POST['nachname'];  
	
  
   //In der foreach-Schleife werden nun die einzelnen Value's(die Datensatz-ID's) aus dem 
   //Array der Checkbox in die Variable id abgelegt.
   //Mit dieser Variablen kann ich nun die Array-Elemente der übertragenen Input-Felder
   //ansprechen und verarbeiten.
	
  foreach($_POST['edit'] as $id){  
	 $query="update tabelle";  
	 $query.=" set vorname='$vornamen[$id]',nachname='$nachnamen[$id]'";  
	 $query.=" where id=$id";  
	 $result=mysql_query($query) or die(mysql_error());
	}
 }
}

?>

Gruß
Günni
gechger
gechger 14.07.2009 um 20:49:29 Uhr
Goto Top
Hi Günni,

scheint, als wenn durch Dein Script alles etwas schlanker wird.
Ich versuche mal, daß umzusetzen. Wird aber ein paar Tage dauern, da ich mal wieder meinem "normalen" Job nachgehen muß und einige Tage im Ausseneinsatz bin. Leider kann ich php nur so "nebenbei" machen.

Nicht gerade ideal, man muß sich ja immer neu eindenken.

Jedenfalls viieeeelen Dank
und schöne Grüße

Christof