gechger
Goto Top

Formular mit Checkboxen füllen und weiterverarbeiten

Ich möchte anderen Usern ein Formular zur Verfügung stellen, daß Daten aus einer MYSQL Datenbank ausliest, über Checkboxen aber eine Auswahl ermöglichen und eine Änderungsmöglichkeit schaffen

Hallo Forum,

wieder mal hänge ich fest und mir fehlt der richtige Tip.
Ich habe ein Auswahlliste mit Checkboxen, um gezielt Daten der einzelnen Abteilungen (Sport) ausgeben zu lassen. Es handelt sich dabei um Übungszeiten.
Das funktioniert.

Die ausgegebenen Daten enthalten wiederum ein Checkbox. Die zu ändernden Daten sollen markiert werden, woraufhin sich ein weiteres Formular öffnen soll, in dem die Änderungen eingetragen werden können. Zum Schluß sollen die geänderten DAten in die Datenbank zurück, aber soweit bin ich noch nicht.

Mein Problem ist, daß immer wenn ich einen ausgegebenen Datensatz markiere, und das Änderungsformular aufrufen will, alles verschwindet bis auf mein ursprüngliches Auswahlformular, und ich weiss nicht wieso. Unter diesem Link könt Ihr Euch den Effekt gerne anscheuen php_Link .

Dies ist mein Script:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  

<html>
<head>
<title>www.mtv-fichte.de</title>
        <meta http-equiv="expires" content="0">  
        <meta name="author" content="Christof Gersky">  
        <meta name="Keywords" content="Winsen Aller, Sport, Badminton, Gesundheit, Handball, Rock, Roll, Jazz Dance, Schach, Tae Kwon Do, Tischtennis, Turnen, Ger&auml;tturnen ">  
        <style type="text/css"></style>  
        </head>


<body>
<body bgcolor="#ffffff" text="#111111">  
<font face="Verdana, Arial, Tahoma, Sans Serif" >  

<font size="2">  
<font color="#291455">  

<!-- Auswahlformular zur Auswahl der ABteilung-->
 <form action="zeitaktual.php" method="post" name="Formular" onSubmit="return chkFormular()">  
  Bitte Abteilung auswählen <br><br>


    <input type="radio" name="abteilung" value="Badminton"  > Badminton<br>  
    <input type="radio" name="abteilung" value="Gerätturnen">  Gerätturnen<br>  
    <input type="radio" name="abteilung" value="Gesundheitssport" > Gesundheitssport<br>  
    <input type="radio" name="abteilung" value="Handball" > Handball<br>  
    <input type="radio" name="abteilung" value="Jazzdance" > Jazzdance<br>  
    <input type="radio" name="abteilung" value="Rock n Roll" > Rock 'n Roll<br>  
    <input type="radio" name="abteilung" value="Schach" > Schach<br>  
    <input type="radio" name="abteilung" value="Tae Kwon Do" > Tae Kwon Do<br>  
    <input type="radio" name="abteilung" value="Tischtennis" > Tischtennis<br>  
    <input type="radio" name="abteilung" value="Turnen" > Turnen<br>  
    <input type="radio" name="abteilung" value="Walking" > Walking<br>  
    <input type="submit" class="button" name="DataAction" value="Auswahl bestätigen"><br>  
</form>


<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');  

//Überprüfung, ob ein Radiobutton ausgewählt worden ist
if (isset($_REQUEST['abteilung'])) {  
         foreach ($_REQUEST['abteilung'] as $value) {  
                 $auswahl=($value);
//Verbindungsaufbau zur Datenbank
                 $link = mysql_connect("XXXXXXX", "XXXXXX", "XXXXXX");  
                 mysql_select_db("XXXXXX",$link) or die ("die Verbindungsaufnahme ist gescheitert!");  
                 $sql=("SELECT * FROM mtv_zeiten where bereich = '$auswahl' ");  
                 $abfrage = mysql_db_query('XXXXXXX',$sql);  

//Aufteilen des erhaltenen Arrays
                         while ($daten=mysql_fetch_array($abfrage)){
                                 $id=$daten-1;
                                 $tag=$daten[1];
                                 $zeitvon=$daten[2];
                                 $zeitbis=$daten[3];
                                 $art=$daten[4];
                                 $ort=$daten[5];
                                 $abteilung=$daten[6];
                                 $leitung=$daten[7];
?>
<!--Ein neues Formular wird aufgebaut, in dem die selektierten Werte landen. Ebenso wird hier eine
    Auswahlmöglichkeit geschaffen, die Daten zu markieren, die geändert werden sollen-->

<table border="1"  >  
<tr>
<td width="50%"  bgcolor="#CCCCFF"><?echo $tag; ?></td>  
<form action="zeitaktual.php" method="post">  
<td "10%" bgcolor="#FF0000" ><input type="radio" name="auswahl<?= $id; ?>" value="0">Datensatz hier markieren zum Ändern<br>   </td>  
</tr>
</table>
<table border="1" bgcolor="#CCCCFF"  >  
<tr>
<td  ><?echo $id."-".$zeitvon."-".$zeitbis."| |".$art."| |".$ort."| |".$abteilung."| |".$leitung ?></td>  
</tr>
</table>
</form>

<?
//Prüfung, ob eine Auswahl getroffen worden ist
if(isset($_POST["auswahl$id"])){  
?>
<!--Wenn eine Auswahl getroffen wurde, soll ein weiteres Formular geöffnet werden, in dem die Änderungen
    vorgenommen werden können. HIER LIEGT MEIN PROBLEM!-->
<table >
<tr align="left" valign="bottom" bgcolor="#FF0000">  
<td><input type="text" name="a_id"  value="<?= $id; ?>" size="2"></td>  
<td><input type="text" name="a_tag"  value="<?= $tag; ?>" size="50"></td>  
</tr>
</table>

<table>
<tr align="left" valign="bottom" bgcolor="#FF0000">  
<td><input type="text" name="a_zeitvon"  value="<?= $zeitvon; ?>" size="6"></td>  
<td><input type="text" name="a_zeitbis"  value="<?= $zeitbis; ?>" size="6"></td>  
<td><input type="text" name="a_art"  value="<?= $art; ?>" size="50" ></td>  
<td><input type="text" name="a_ort"  value="<?= $ort; ?>" size="25"></td>  
<td><input type="text" name="a_abteilung"  value="<?= $abteilung; ?>" size="25"></td>  
<td  ><input type="text" name="a_leitung"  value="<?= $leitung; ?>" size="50"></td>  
</tr>
</table>
 <?
}
}

?>
<table>
<form action="zeitaktual.php" method="post">  
<tr>
<td>
<input type="submit" value="Zum Ändern bitte klicken"><br>  
</td>
</tr>
</table>
<br>
<?

}
//Kontrolle, wie die geänderten Daten aussehen
echo ($_POST["a_zeitvon"])."|".($_POST["a_zeitbis"])."|".($_POST["a_art"])."|".($_POST["a_ort"])."|".($_POST["a_abteilung"])."|".($_POST["a_leitung"]);  

//Hier soll dann noch der SQL-Update Befehl kommen

}
?>





</font>
</body>
</html>

Wahrscheinlich wieder irgendwas simples, aber ich komme einach nicht drauf.

Jeder Tip hilft weiter.

Schöne Grüße
Christof

Content-ID: 115536

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

Ausgedruckt am: 25.11.2024 um 04:11 Uhr

masterG
masterG 07.05.2009 um 17:17:09 Uhr
Goto Top
ITLocke
ITLocke 07.05.2009 um 17:23:18 Uhr
Goto Top
Guten Abend,

benenne deine Radio-Button-Namen um und mache für jeden eine Abfrage a la
if (isset($_REQUEST['Badminton']))
<input type="radio" name="Badminton" value="Badminton" checked = checked > Badminton<br>
else
<input type="radio" name="Badminton" value="Badminton" > Badminton<br>
damit sollte der Browser sich merken, welchen Button du anfangs ausgewählt hast

Gruß Locke
gechger
gechger 07.05.2009 um 19:56:02 Uhr
Goto Top
Hi Locke,

der erste Teil des Scripts funktioniert ja. Wenn ich Badminton wähle, bekomme ich auch nur Badminton-Einträge. Das Problem liegt in den dahinter liegenden Checkboxen. Nehmen wir das Beispiel Badminton:
Aus allen Einträgen der Datenbank bekomme ich ausgegeben:
Eintrag 7, 17 und 20.
Wenn ich jetzt die ID 7 markiere und Absenden wähle, dann verschwinden meine Tabellen und ich habe nur wieder meine ursprüngliche Auswahlliste.

Bekommen wollte ich aber ein zusätzliches Formular mit einer Kopie der gewählten Einträge, die ich überschreiben kann, und bei Submit als echo ausgeben will. Diesen Teil des Scripts hatte ich schon erfolgreich getestet, bevor ich die Abteilungsselektion eingebaut habe. In dieser Konfiguration klappt es aber nicht.
Das Problem beginnt in meinem Script ab Zeile 84. Und ich sehe nicht, warum.
Um es klarer zu machen, folge meinem Link im Posting und schaus Dir mal an.

@masterG
Danke für den Link, den kannte ich aber schon. Er hilft in meinem Problem aber auch nicht.

Schöne Grüße
Christof
dog
dog 08.05.2009 um 10:40:11 Uhr
Goto Top
Ich hab deinen Code mal etwas aufgeräumt:

<?php
		error_reporting(E_ALL);
		ini_set('display_errors', '1');  
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
<html>
	<head>
		<title>www.mtv-fichte.de</title>
        <meta http-equiv="expires" content="0">  
        <meta name="author" content="Christof Gersky">  
        <meta name="Keywords" content="Winsen Aller, Sport, Badminton, Gesundheit, Handball, Rock, Roll, Jazz Dance, Schach, Tae Kwon Do, Tischtennis, Turnen, Gerätturnen ">  
        <style type="text/css"></style>  
	</head>
	<body bgcolor="#ffffff" text="#111111">  
		<font face="Verdana, Arial, Tahoma, Sans Serif" >  
			<font size="2">  
				<font color="#291455">  
<?php
			if (!isset($_POST['abteilung'])) {  
?>
					<!-- Auswahlformular zur Auswahl der ABteilung-->
					<form action="zeitaktual.php" method="post" name="Formular" onSubmit="return chkFormular()">  
						Bitte Abteilung auswählen <br><br>
						<input type="radio" name="abteilung" value="Badminton"  > Badminton<br>  
						<input type="radio" name="abteilung" value="Gerätturnen">  Gerätturnen<br>  
						<input type="radio" name="abteilung" value="Gesundheitssport" > Gesundheitssport<br>  
						<input type="radio" name="abteilung" value="Handball" > Handball<br>  
						<input type="radio" name="abteilung" value="Jazzdance" > Jazzdance<br>  
						<input type="radio" name="abteilung" value="Rock n Roll" > Rock 'n Roll<br>  
						<input type="radio" name="abteilung" value="Schach" > Schach<br>  
						<input type="radio" name="abteilung" value="Tae Kwon Do" > Tae Kwon Do<br>  
						<input type="radio" name="abteilung" value="Tischtennis" > Tischtennis<br>  
						<input type="radio" name="abteilung" value="Turnen" > Turnen<br>  
						<input type="radio" name="abteilung" value="Walking" > Walking<br>  
						<input type="submit" class="button" name="DataAction" value="Auswahl bestätigen"><br>  
<?php
			//Überprüfung, ob ein Radiobutton ausgewählt worden ist
			} else {
				//Verbindungsaufbau zur Datenbank
				 $link = mysql_connect("XXXXXXX", "XXXXXX", "XXXXXX");  
				 mysql_select_db("XXXXXX",$link) or die ("die Verbindungsaufnahme ist gescheitert!");  
				 $sql=sprintf("SELECT * FROM mtv_zeiten where bereich = '%s' ",$_POST['auswahl']);  
				 $abfrage = mysql_db_query('XXXXXXX',$sql);  

				//Aufteilen des erhaltenen Arrays
				while ($daten = mysql_fetch_assoc($abfrage)){
					if(!isset($_POST['auswahl'])) {  
?>
						<!--Ein neues Formular wird aufgebaut, in dem die selektierten Werte landen. Ebenso wird hier eine
						    Auswahlmöglichkeit geschaffen, die Daten zu markieren, die geändert werden sollen-->
						<table border="1"  >  
							<tr>
								<td width="50%"  bgcolor="#CCCCFF">  
									<? echo $daten['tag']; ?>  
								</td>
								<td "10%" bgcolor="#FF0000" >  
									<input type="radio" name="auswahl" value="<?= $daten['id'] ?>">  
									Datensatz hier markieren zum Ändern<br>   
								</td>
							</tr>
						</table>
						<table border="1" bgcolor="#CCCCFF"  >  
							<tr>
								<td>
									<?php echo $daten['id']."-".$daten['zeitvon']."-".$daten['zeitbis']."| |".$daten['art']."| |".$daten['ort']."| |".$daten['abteilung']."| |".$daten['leitung'] ?>  
								</td>
							</tr>
						</table>
<?php				} elseif($_POST['auswahl'] == $daten['id']) { ?>  
						<!--Wenn eine Auswahl getroffen wurde, soll ein weiteres Formular geöffnet werden, in dem die Änderungen
						    vorgenommen werden können. HIER LIEGT MEIN PROBLEM!-->
						<table >
							<tr align="left" valign="bottom" bgcolor="#FF0000">  
								<td><input type="text" name="a_id"  value="<?php echo $daten['id'] ?>" size="2"></td>  
								<td><input type="text" name="a_tag"  value="<? echo $daten['tag']; ?>" size="50"></td>  
							</tr>
						</table>

						<table>
							<tr align="left" valign="bottom" bgcolor="#FF0000">  
								<td><input type="text" name="a_zeitvon"  value="<?= $daten['zeitvon'] ?>" size="6"></td>  
								<td><input type="text" name="a_zeitbis"  value="<?= $daten['zeitbis']?>" size="6"></td>  
								<td><input type="text" name="a_art"  value="<?= $daten['art'] ?>" size="50" ></td>  
								<td><input type="text" name="a_ort"  value="<?= $daten['ort'] ?>" size="25"></td>  
								<td><input type="text" name="a_abteilung"  value="<?= $daten['abteilung'] ?>" size="25"></td>  
								<td><input type="text" name="a_leitung"  value="<?= $daten['leitung'] ?>" size="50"></td>  
							</tr>
						</table>
						<input type="hidden" name="action" value="update_row">  
						<input type="hidden" name="auswahl" value="<?php echo $daten['id'] ?>">  
<?php
						if(@$_POST['action'] == 'update_row') {  
							//Kontrolle, wie die geänderten Daten aussehen
							echo ($_POST["a_zeitvon"])."|".($_POST["a_zeitbis"])."|".($_POST["a_art"])."|".($_POST["a_ort"])."|".($_POST["a_abteilung"])."|".($_POST["a_leitung"]);  
						}
					}
				}
?>
						<input type="hidden" name="abteilung" value="<?php echo $_POST['abteilung'] ?>">  
<?php		} ?>
						<table>
							<tr>
								<td>
									<input type="submit" value="Zum Ändern bitte klicken"><br>  
								</td>
							</tr>
						</table>
					</form>
				</font>
			</font>
		</font>
	</body>
</html>

a) Keine Garantie, dass es funktioniert - ich habe es nicht getestet
b) Praxistauglich ist es immer noch nicht, weil es noch SIcherheitslücken gibt
c) Ob das dein Problem löst kann ich nicht sagen

Grüße

Max
nxclass
nxclass 08.05.2009 um 12:13:22 Uhr
Goto Top
mal ein ..
echo 'POST: '.print_r( $_POST, true )."<br>\n"; //ggf. auch für $_GET und $_REQUEST  
.. eingefügt? - dann solltest du schnell erkennen warum das Script nicht bis zu Z.84 kommt.
gechger
gechger 08.05.2009 um 21:18:14 Uhr
Goto Top
Hi Max,

vielen Dank für Deine Mühe, aber leider funktioniert es nicht.
Ich habe Dein Script mal mit den Zugangsdaten zu meiner Datenbank versehen, und das Ergebnis kannst Du hier abrufen:

Dein Script

Was mich bei Deinem Ansatz wundert ist, daß Du in ersten Formular als Name abteilung verwendet hast anstatt abteilung . Laut meiner Internetrecherchen muß man verwenden, damit die ausgelesenen Daten in ein Array gespeichert werden und daraus weiter verarbeitet werden können.

Aber dennoch werde ich Deinen Ansatz mal durchdenken und damit etwas ausprobieren. Das sieht eigentlich sehr vielversprechend aus.

Vielen Dank nochmal
Schöne Grüße
Christof

PS: Kann sein, daß wegen meiner Arbeit an Deinem Script jetzt noch unvorhergesehene Dinge passieren face-smile Ich probiere halt etwas rum.....
gechger
gechger 08.05.2009 um 21:46:45 Uhr
Goto Top
Hi NX,

werde ich sicher probieren.

Danke für den Hinweis.

Schöne Grüße
Christof
dog
dog 09.05.2009 um 09:49:00 Uhr
Goto Top
laut meiner Internetrecherchen muß man verwenden

Nein, einen Array zu übergeben ist hier falsch.
Bei einer Radiogruppe kann auch immer nur ein einziger Wert übertragen werden (nämlich der ausgewählte). Du hättest also bestenfalls einen Array mit genau einem Eintrag.

Grüße

Max
gechger
gechger 11.05.2009 um 21:07:55 Uhr
Goto Top
Hallo Max,

habe jetzt mal Dein Script mit meinen Datenbankzugriffen verbunden und einige Kleinigkeiten angepasst. Trotzdem klappt es noch nicht so richtig. Mir ist da auch noch etwas unklar.
Ich bekomme zwar wie gewünscht die Information ausgegeben, welche Zeiten in den einzelnen Abteilungen hinterlegt sind. Dann geht es aber trotzdem nicht weiter zur Eingabenmaske, um die Daten ändern zu können.

<!--Ein neues Formular wird aufgebaut, in dem die selektierten Werte landen. Ebenso wird hier eine
Auswahlmöglichkeit geschaffen, die Daten zu markieren, die geändert werden sollen-->
<table border="1"  >  
<tr>
<td width="50%"  bgcolor="#CCCCFF">  
     <? echo $daten['tag']; ?>  
</td>
<td "10%" bgcolor="#FF0000" >  
<input type="radio" name="auswahl" value="<?= $daten['id'] ?>">  
Datensatz hier markieren zum Ändern<br>
</td>
</tr>
</table>
<table border="1" bgcolor="#CCCCFF"  >  
<tr>
<td>
<?php echo $daten['id']."-".$daten['zeit_von']."-".$daten['zeit_bis']."| |".$daten['abteilung']."| |".$daten['ort']."| |".$daten['bereich']."| |".$daten['leiter'] ?>  
</td>
</tr>
</table>
<?php
           } elseif($_POST['auswahl'] == $daten['id']) {  
            ?>
<!--Wenn eine Auswahl getroffen wurde, soll ein weiteres Formular geöffnet werden, in dem die Änderungen
vorgenommen werden können. HIER LIEGT MEIN PROBLEM!-->
<table >
<tr align="left" valign="bottom" bgcolor="#FF0000">  
<td><input type="text" name="a_id"  value="<?=  $daten['id'] ?>" size="2"></td>  
<td><input type="text" name="a_tag"  value="<?= $daten['tag']; ?>" size="50"></td>  
</tr>
</table>
<table>
<tr align="left" valign="bottom" bgcolor="#FF0000">  
<td><input type="text" name="a_zeit_von"  value="<?= $daten['zeit_von'] ?>" size="6"></td>  
<td><input type="text" name="a_zeit_bis"  value="<?= $daten['zeit_bis']?>" size="6"></td>  
<td><input type="text" name="a_abteilung"  value="<?= $daten['abteilung'] ?>" size="50" ></td>  
<td><input type="text" name="a_ort"  value="<?= $daten['ort'] ?>" size="25"></td>  
<td><input type="text" name="a_bereich"  value="<?= $daten['bereich'] ?>" size="25"></td>  
<td><input type="text" name="a_leiter"  value="<?= $daten['leiter'] ?>" size="50"></td>  
</tr>
</table>
<input type="hidden" name="action" value="update_row">  
<input type="hidden" name="auswahl" value="<?php $daten['id'] ?>">  
<?php
            if($_POST['action'] == 'update_row') {  
//Kontrolle, wie die geänderten Daten aussehen
              echo ($_POST["a_zeit_von"])."|".($_POST["a_zeit_bis"])."|".($_POST["a_abteilung"])."|".($_POST["a_ort"])."|".($_POST["a_bereich"])."|".($_POST["a_leiter"]);  
}
}
}
?>
<input type="hidden" name="abteilung" value="<?php echo $_POST['abteilung'] ?>">  

<table>
<tr>
<td>
<input type="submit" value="Zum Ändern bitte klicken"><br>  
</td>
</tr>
</table>
</form>
<?php
}
?>
</font>
</font>
</font>
</body>
</html>

In Zeile 22 wird elseif($_POST['auswahl'] == $daten['id']) abgefragt.
Betrifft das die Zeile 9?
Dann gibt es aber viel später noch einmal die Definition dieses $_POST, als type hidden.
<input type="hidden" name="auswahl" value="<?php $daten['id'] ?>">

Das ist es, was ich noch nicht verstehe. Wozu dienen die "hidden" types?
Und wozu dient diese Abfrage:
if($_POST['action'] == 'update_row')

Das aktuelle Script ist wieder zur Ansicht verlinkt: Link_zum_Script

Schöne Grüße
Christof
dog
dog 11.05.2009 um 21:31:44 Uhr
Goto Top
Nein, das sollte kein Problem sein.
POST-Daten werden komplett übergeben, bevor PHP überhaupt mit der Abarbeitung des Scripts beginnt.

Dein Problem ist wohl, dass der <form>-Header im zweiten Teil fehlt face-smile

Sprich aus:

<?php
			if (!isset($_POST['abteilung'])) {  
?>
					<!-- Auswahlformular zur Auswahl der ABteilung-->
					<form action="zeitaktual.php" method="post" name="Formular" onSubmit="return chkFormular()">  

muss

					<form action="zeitaktual.php" method="post" name="Formular" onSubmit="return chkFormular()">  
<?php
			if (!isset($_POST['abteilung'])) {  
?>
						<!-- Auswahlformular zur Auswahl der ABteilung-->

werden.

Grüße

Max
gechger
gechger 12.05.2009 um 18:19:18 Uhr
Goto Top
Hi Max,

Du hast Recht face-smile, ich komme direkt einen Schritt weiter.
Jetzt habe ich in der Ausgabe zwar noch eine Fehlermeldung:

Notice: Undefined index: action in /mnt/web3/53/12/51101112/htdocs/zeitaktualadminde.php on line 95

was diese Zeile 4 betrifft:

<input type="hidden" name="action" value="update_row">  
<input type="hidden" name="auswahl" value="<?php $daten['id'] ?>">  
<?php
            if($_POST['action'] == 'update_row') {  
aber die Änderungsausgabe erhalte ich bereits.

Schon mal viiieelen Dank für die Hilfe

Schöne Grüße
Christof

EDIT: Fehler hat sich erledigt. Man sollte ja auch mal ein @ verwenden, wie Du es vorgeschlagen hattest face-smile
Dann werde ich jetzt mal einen Update Befehl einbauen und anschließend noch eine Passwortabfrage, damit die Abteilungen auch wirklich nur ihre eigenen Daten ändern können.