PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Checkbox in BD-Tabelle schreiben


syntax
19.03.2012, 11:33:21
Hallo Leute,

ich habe eine Checkbox und wenn diese aktiviert wird und ich auf Update klicke, soll entweder eine 1 (wenn Checkbox einen Haken hat) oder eine 0 (wenn Checkbox keinen Haken hat) in meine MySQL Tabelle geschrieben werden.

Der Wert wird von 1 auf 0 aktualisiert wenn ich keinen Haken in der Checkbox habe,
wenn ich die Checkbox anklicke und auf meinen Update-Button gehe wird der Wert nicht von 0 auf 1 geschrieben.

Ich finde den Fehler einfach nicht, denn wenn ich den Updatebefehl durch einen print befehl ersetze macht er das was er soll.

Eine Idee die mir noch gekommen ist, wäre das er nicht weiß in welche Zeile er die 1 schreiben soll. Muss ich vielleicht in meiner Anweisung sagen das es in die Zeile mit der zugewiesenen ID schreiben soll ?
Ist ja aber eigentlich auch Quatsch denn umgekehrt geht es ja auch.

Über Ideen und Anregungen würde ich mich freuen. Danke :)


Tabelle:

ID | fahrzeug | status

int(11) | varchar(255) | tinyint(1)




// Update Buchungsstatus
$sqlbuchungchecked = "UPDATE fahrzeug SET status=1";
$sqlbuchungnonchecked = "UPDATE fahrzeug SET status=0";

// Anfrage an die DB schicken und die Rueckmeldung in eine Variable ablegen
$buchungchecked = mysql_query( $sqlbuchungchecked );
$buchungnonchecked = mysql_query( $sqlbuchungnonchecked );


// Checkboxabfrage für Buchungsfeld
if (isset($_REQUEST['checkbtn'])) {
foreach ($_REQUEST['checkbtn'] as $nonvalue => $value) {
// print "1"
$buchungchecked;
}
} else {
// print "0"
$buchungnonchecked;
}




<?php
while ($datensatz = mysql_fetch_array( $abfrageergebnis ))
{
echo '<table border="1">';
echo '<form action="'.$_SERVER['PHP_SELF'].'" method="post">';
echo '<tr>';
echo '<td style="width:75px"><input type="checkbox" name="checkbtn[]" value="1"></td>';
//echo '<td style="width:65px">' . $datensatz['kuerzel'] . '</td>';
echo '<td style="width:155px">' . $datensatz['kunde'] . '</td>';
echo '<td style="width:80px">' . $datensatz['mitarbeiter'] . '</td>';
echo '<td style="width:120px">' . $datensatz['taetigkeit'] . '</td>';
echo '<td style="width:90px">' . $datensatz['startdatum'] . '</td>';
echo '<td style="width:70px">' . $datensatz['startzeit'] . '</td>';
echo '<td style="width:90px">' . $datensatz['endedatum'] . '</td>';
echo '<td style="width:70px">' . $datensatz['endezeit'] . '</td>';
echo '<td style="width:70px">' . $datensatz['dauer'] . '</td>';
echo '<td style="width:55px">' . $datensatz['umsatz'] . ' €</td>';
echo '<td style="width:348px">' . $datensatz['notizen'] . '</td>';
echo '</tr>';
echo '</table>';
}
?>


<table>
<tr>
<td><input type="submit" name="submit" value="Update"></td>
</tr>
</table>

vt1816
19.03.2012, 14:49:36
// Update Buchungsstatus
$sqlbuchungchecked = "UPDATE fahrzeug SET status=1";
$sqlbuchungnonchecked = "UPDATE fahrzeug SET status=0";

// Anfrage an die DB schicken und die Rueckmeldung in eine Variable ablegen
$buchungchecked = mysql_query( $sqlbuchungchecked );
$buchungnonchecked = mysql_query( $sqlbuchungnonchecked );


// Checkboxabfrage für Buchungsfeld
if (isset($_REQUEST['checkbtn'])) {
foreach ($_REQUEST['checkbtn'] as $nonvalue => $value) {
// print "1"
$buchungchecked;
}
} else {
// print "0"
$buchungnonchecked;
}



Was ist DAS? Copy & Paste?




$_SERVER['PHP_SELF']

... ist PFUI!


Wo kommt $abfrageergebnis her?

syntax
19.03.2012, 16:03:47
Das gehört zur Ausgabe der Datensätze. Hab es weggelassen, weil es nicht relevant ist. Es gibt die ID und das Fahrzeug mit aus.

vt1816
19.03.2012, 17:02:51
[...] Es gibt die ID und das Fahrzeug mit aus.
Warum verwendest Du die Informationen dann beim Update nicht?

syntax
19.03.2012, 17:57:57
Weil ich ja nur, wenn ich die Checkbox anklicke den Wert 1 in meine Tabelle schreiben will.
Oder wie meinst du das?

vt1816
19.03.2012, 21:15:33
Weil ich ja nur, wenn ich die Checkbox anklicke den Wert 1 in meine Tabelle schreiben will.
Oder wie meinst du das?

Ja, aber für welchen Datensatz? Soll es gleich bei allen Datsätzen ein Update geben?

syntax
19.03.2012, 22:27:00
Nein nur in dem Datensatz in dem ich die Checkbox aktiviere soll eine 1 in die Spalte Status eingetragen werden. Das sollen auch manchmal mehrere gleichzeitig sein.

vt1816
19.03.2012, 22:29:23
Und dazu benötigst Du die ID des entsprechenden Datensatz.

syntax
20.03.2012, 00:01:29
Wäre das so richtig?


// Update Buchungsstatus

$ID ="SELECT id FROM fahrzeug"

$sqlbuchungchecked = "UPDATE fahrzeug SET status=1 WHERE id=$ID";
$sqlbuchungnonchecked = "UPDATE fahrzeug SET status=0 WHERE id=$ID";

// Anfrage an die DB schicken und die Rueckmeldung in eine Variable ablegen
$buchungchecked = mysql_query( $sqlbuchungchecked );
$buchungnonchecked = mysql_query( $sqlbuchungnonchecked );


// Checkboxabfrage für Buchungsfeld
if (isset($_REQUEST['checkbtn'])) {
foreach ($_REQUEST['checkbtn'] as $nonvalue => $value) {
$buchungchecked;
}
} else {
$buchungnonchecked;
}

vt1816
20.03.2012, 09:58:41
Wäre das so richtig?

Hast Du es mal ausprobiert? Ich glaube nicht, denn dann wären Dir die Fehler - bei eingeschalteter Fehleranzeige - nur so um die Ohren geflogen.

Also bitte nachholen...


PS: Hinweis
$ID ="SELECT id FROM fahrzeug"
damit wirst Du die ID nicht erhalten!

syntax
20.03.2012, 11:27:28
Ja stimmt,

hab jetzt nochmal drüber geschlafen und meine code überarbeitet.


if (isset($_REQUEST['checkbtn'])) {
foreach ($_REQUEST['checkbtn'] as $nonvalue => $value) {
mysql_query ("UPDATE fahrzeug SET status='$value' WHERE id='".$_GET['id']."'") OR die(mysql_error());
}
};



das else {
// print "0"
$buchungnonchecked;
}

von Oben lasse ich weg da ich die Spalte Status so formatiert habe das sie Standardmäßig immer NULL ist wenn kein Eintrag gemacht wurde.


<?php
while ($datensatz = mysql_fetch_array( $abfrageergebnis ))
{
echo '<table border="1">';
echo '<form action="'.$_SERVER['PHP_SELF'].'" method="post">';
echo '<tr>';
echo '<td style="width:75px"><input type="checkbox" name="checkbtn[]" value="1"></td>';
echo '<td style="width:155px">' . $datensatz['id'] . '</td>';
echo '<td style="width:80px">' . $datensatz['fahrzeug'] . '</td>';
echo '</tr>';
echo '</table>';
}
?>



<table>
<tr>
<td><input type="submit" name="submit" value="Update"></td>
</tr>
</table>


Er bringt mir jetzt wenn ich den Haken im Checkbutton setze und auf meinen Submit-Button klicke

Undefined index: id was ich aber nicht verstehe denn die ID meines Datensatzes wird angezeigt und mit GET hole ich mir diesen doch aus meinem Datensatz um in mit WHERE zu vergelichen!?

urvater
20.03.2012, 12:55:38
Zum Einen schreibst du trotz Hinweis immer noch $_SERVER['PHP_SELF'].

Zum Anderen können wir nicht erkennen, wie $abfrageergebnis aussieht bzw. ob per $_GET überhaupt eine "id" mit übergeben wird.

vt1816
20.03.2012, 12:57:20
Macht es Dir viel Mühe den Code komplett zu posten, die Unterteilung in PHP und HTML usw. ist nicht zielführend.

syntax
20.03.2012, 13:12:05
Hier der ganz Code:

<?php
include("../php/connect.php");
?>


<!DOCTYPE html>

<html lang="de">

<head>
<title></title>
</head>
<body>
<div id="user_info">
Benutzer: <?php echo $_SESSION["vorname"]; ?> <?php echo $_SESSION["nachname"]; ?>
</div>
<div class="site_txt">
<strong>Arbeitszeiten</strong><br>
<br>


<?PHP
$userid = $_SESSION["user_id"];

// Anfrage zusammenstellen um die Datensaetze auszulesen
$sql = "SELECT id, status, auto FROM fahrzeug";

// Anfrage an die DB schicken und die Rueckmeldung in eine Variable ablegen
$abfrageergebnis = mysql_query( $sql ) or trigger_error(mysql_error(),E_USER_ERROR);

// Checkboxabfrage für Buchungsfeld

if (isset($_REQUEST['checkbtn'])) {
foreach ($_REQUEST['checkbtn'] as $nonvalue => $value) {
mysql_query ("UPDATE fahrzeug SET status='$value' WHERE id='".$_GET['id']."'") OR die(mysql_error());
}
};


// Ermitteln wie viele Datensaetzen gefunden wurden
$anzahl = mysql_num_rows( $abfrageergebnis );

echo "<p>Es wurden <strong>" .$anzahl. "</strong> Einträge gefunden!</p>";

?>


<table border="1">
<tr><td style="width:70px"><b>Status</b></td><td style="width:15px"><b>ID</b></td><td style="width:65px"><b>Auto</b></td></tr>
</table>


<?php
// Ab hier werden die Datensaetze zeilenweise ausgeben
while ($datensatz = mysql_fetch_array( $abfrageergebnis ))
{
// Tabelle erstellen fuer die Ausgabe
echo '<table border="1">';
echo '<form action="'.$_SERVER['PHP_SELF'].'" method="post">';
echo '<tr>';
echo '<td style="width:75px"><input type="checkbox" name="checkbtn[]" value="1"></td>';
echo '<td style="width:15px">' . $datensatz['id'] . '</td>';
echo '<td style="width:155px">' . $datensatz['auto'] . '</td>';
echo '</tr>';
echo '</table>';
}
?>


<table>
<tr>
<td><input type="submit" name="submit" value="Update"></td>
</tr>
</table>
<br>
</div>
<div class="site_base"></div>
</div>
</body>
</html>

urvater
20.03.2012, 14:23:27
Ich würd mir an deiner Stelle vorerst einmal Gedanken um dein erzeugtes Formular machen.
Zum Einen wird es nicht beendet und zum Anderen erzeugst du mehrere Formularheader, wenn dein select mehrere Ergebnisse liefert.

Dein geposteter Code bringt den Fehler mit undefined index id, weil es die Variable $_GET['id'] einfach nicht gibt.
In Verbindung mit deinem SQL-Statement noch unschöner.

Nun steht immernoch im Raum, wie bekommst du den Zusammenhang zwischen deinem Update und dem gewünschten Fahrzeug.

Als mögliche Lösung biete ich dir einmal folgendes an

......
echo '<td style="width:75px"><input type="checkbox" name="checkbtn[]" value="'.$datensatz['id'].'"></td>';
echo '<td style="width:15px">' . $datensatz['id'] . '</td>';
echo '<td style="width:155px">' . $datensatz['fahrzeug'] . '</td>';
.......

vt1816
20.03.2012, 14:56:23
Hier der ganz Code:


Macht es Dir viel Mühe den Code komplett zu posten, die Unterteilung in PHP und HTML usw. ist nicht zielführend.
Was war hieran nicht verständlich???



Wo kommen $_SESSION["vorname"] und $_SESSION["nachname"] her - vermisse session_start().

Wo wird die Fehleranzeige eingeschaltet?

Wozu erstellst Du für jeden gefundenen Eintrag eine eigene Tabelle im HTML?

Von dem nicht geschlossenen Formular wollen wir mal gar nicht reden.

Kann es sein, dass es Dir nach wie vor an den Grundlagen fehlt? Die Dr. zu Gutenberg-Methode (Copy & Paste) bringt Dich hier nicht weiter!
Setze Dich hin und mach die schlau. Literatur und Nachschlagewerke, die Du kennst / mit denen Du arbeitest:

PHP Handbuch (http://php.net)
PHP Tutorial (http://tut.php-q.net/de/)
PHP FAQ (http://www.php-faq.de/)
PHP Kompendium (http://www.peterkropff.de/)
MySQL Tutorial (http://dev.mysql.com/doc/refman/5.1/de/tutorial.html)

syntax
20.03.2012, 15:27:32
Vielen Danke erstmal für das finden der Fehler.

Hab das mit dem Formular und der Tabelle beseitigt.


<table border="1">
<form action="'.$_SERVER['PHP_SELF'].'" method="post">
<?php
while ($datensatz = mysql_fetch_array( $abfrageergebnis ))
{
echo '<tr>';
echo '<td style="width:75px"><input type="checkbox" name="checkbtn[]" value="1"></td>';
echo '<td style="width:15px">' . $datensatz['id'] . '</td>';
echo '<td style="width:155px">' . $datensatz['auto'] . '</td>';
echo '</tr>';
}
?>
</table>
</form>


Das session_start() steht in meiner checkuser.php die wie die connect.php included wird.
Das hab ich vergessen mit rein zu kopieren, sorry.

Den zusammenhang zw. Update und dem gewünschten Fahrzeug stelle ich doch mit hilfe der ID her die in meiner SQL-Abfrage und meiner Ausgabe in der Tabelle steht.

Der Value Wert in meiner Checkbox soll doch in meine Tabelle eingetragen werden und nicht die ID.

urvater
20.03.2012, 20:08:17
Wenn du das Formular so absendest, wie es momentan ist, wird lediglich die Checkbox (sofern angehakt) und der Submit-Button übermittelt. Somit steht dir nur der Value aus der Checkbox (1) und der Value vom Submit-Button zur Verfügung.

Relativ einfach zu überprüfen.

if (isset($_REQUEST['checkbtn'])) {
foreach ($_REQUEST['checkbtn'] as $nonvalue => $value) {
mysql_query ("UPDATE fahrzeug SET status='$value' WHERE id='".$_GET['id']."'") OR die(mysql_error());
}
echo '<pre>';
print_r($_POST); #alternativ var_dump($_POST);
echo '</pre>'
}

Somit besteht nach dem Absenden des Formulars kein Zusammenhang mehr zwischen dem Fahrzeug, welches dem Update zugrunde liegen soll und der Checkbox.

Da du immernoch $_SERVER['PHP_SELF'] nutzt, solltest du mal dringend dich über diese Variable informieren. Es ist immer noch böse.

$_GET['id'], welches du ungeprüft (mysql injektion) in dein SQL Statemant nutzen willst existiert ebenfalls nicht. Somit ist diese Anweisung umsonst. Ausser, dass du einen Error erhälst.

Was dir aber komplett noch fehlt ist die Möglichkeit den Status des Fahrzeuges wieder auf 0 nzw. mittlerweile ja NULL zu setzen.

syntax
20.03.2012, 23:50:02
Also ich steig langsam dahinter was gemeint ist.

Das mit dem $_SERVER['PHP_SELF'] hab ich ersetzt durch $_SERVER['SCRIPT_NAME']

Danke für den Tipp, wieder was gelernt.

Habs auch jetzt so hinbekommen das es mit einem einzelnen Datensatz funktioniert.
Ich kann das mit der ID prüfen nicht ganz nachvollziehen.

Meinst du das in etwa so:


if(!isset($_GET['id']) OR !is_numeric($_GET['id']))

urvater
21.03.2012, 10:32:28
<form action="'.$_SERVER['SCRIPT_NAME'].'" method="post">
Dein Formular verweist auf sich selbst. Im Browser erscheint also sowas wie

www.meine.de/hier.php

Wenn du dich jetzt mit der vordefinierten Variable $_GET beschäftigt hättest, dann wüstest du, dass nach dem Absenden des Formulares niemals irgend ein Get-Wert vorhanden sein wird.

Dein Formular sendest du per POST. Ist auch ok, würde ich auch so machen.
Eine Möglichkeit, wie du deine ID übermitteln könntest, hatte ich die auch schon als Tip weiter oben geschrieben. Allerdings hast du diesen Teil ignoriert.

Kopie/Paste Lösungen wirst du hier im Forum eher selten bekommen.

syntax
21.03.2012, 23:48:12
Vielen Dank erstmal für die Geduld und die Hilfe.
@Urvater deinen Tipp mit dem value="'.$datensatz['id'].'" habe ich zwar gelesen habe das aber irgendwie falsch verstanden, deshalb auch irgendwie ignoriert.

Ich bin jetzt soweit das er die Werte der Checkbox in den jeweiligen Datensatz schreibt.
Allerdings habe ich das Problem wenn ich einen Datensatz nicht auswähle, schreibt er keine 0.

Habe das jetzt mit Echo überprüft und er gibt mit bei nicht ausgewählter Checkbox die ID's nicht aus.

Brauche mal wieder einen Brotkrümmel um den richtigen Weg zu finden.

Wenn Ihr noch andere Fehler findet bin ich für jeden Hinweis wie immer sehr Dankbar :)


<html>
<head>
<title>test</title>
</head>
<body>
<?php
include("../php/connect.php");

$sql = "SELECT id, auto FROM fahrzeug";

$abfrageergebnis = mysql_query( $sql ) or trigger_error(mysql_error(),E_USER_ERROR);

if (isset($_REQUEST['checkbtn'])) {
foreach ($_REQUEST['checkbtn'] as $value){
echo "1:$value";
//mysql_query ("UPDATE fahrzeug SET status='1' WHERE id='$value'") OR die(mysql_error());
}
}else {
echo "0:$value";
//mysql_query ("UPDATE fahrzeug SET status='0' WHERE id='$value'") OR die(mysql_error());
}
?>
<form action="<? echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post">
<table>
<?PHP
while ($datensatz = mysql_fetch_array( $abfrageergebnis ))
{
echo '<tr>';
echo '<td style="width:155px">' . $datensatz['auto'] . '</td>';
echo '<td style="width:15px"><input name="checkbtn[]" type="checkbox" value="'.$datensatz['id'].'"></td>';
echo '<tr>';
}
?>
<td style="width:15px"><input type="submit" value="Senden" name="submit"></td>
</table>
</form>
</body>
</html>

vt1816
22.03.2012, 09:23:32
Solange dies hier$_SERVER["PHP_SELF"] noch im Code ist/bleibt, gibt es von meiner Seite keine Unterstützung (mehr).

urvater
22.03.2012, 09:31:16
Versuch mal dieses Testskript.
Das könnte man als eine der möglichen Lösungen nutzen.
<html>
<head>
<title>test</title>
</head>
<body>
<?php


$sql = "SELECT id, auto FROM fahrzeug";


if (isset($_REQUEST['checkbtn'])) {
echo '<pre>';
print_r($_REQUEST);
echo '</pre>';
}
?>
<form action="<? echo $_SERVER['SCRIPT_NAME'].'?id=123';?>" method="post">
<table>
<tr>
<td style="width:155px">Fahrzeug</td>
<td>reservieren:<input type="checkbox" name="checkbtn" value="1"> frei:<input type="checkbox" name="checkbtn" value="0">
<tr>
<td style="width:15px"><input type="submit" value="Senden" name="submit"></td>
<tr>
</table>
</form>
</body>
</html>

meikel (†)
22.03.2012, 13:46:11
Habe das jetzt mit Echo überprüft und er gibt mit bei nicht ausgewählter Checkbox die ID's nicht aus.
Jo. PHP und MySQL sind so gemein und machen genau das, was Du getippert hast.

Wenn Ihr noch andere Fehler findet bin ich für jeden Hinweis wie immer sehr Dankbar :)
Halte Dich einfach mal an EVA:
Eingabe
Verarbeitung
Ausgabe

Es ist sinnfrei, das SELECT vor dem UPDATE zu erledigen.

$_SERVER["PHP_SELF"]

PHP_SELF ist böse! Potentielles Cross Site Scripting (XSS)! (http://blog.oncode.info/2008/05/07/php_self-ist-boese-potentielles-cross-site-scripting-xss/)

Aber das:
<? echo htmlspecialchars($_SERVER["PHP_SELF"]);?>
ist Blödsinn. Im Scriptnamen gibt es (normalerweise) keine Specialchars.

Verwende das:
$_SERVER["SCRIPT_NAME"]

syntax
24.03.2012, 21:46:40
Hallo Leute habs jetzt soweit erstmal hinbekommen,
da es mit einer Checkbox nicht ging, hab ich einfach eine zweite genommen die mir den Status als 0 setzt.

Mein letztes anliegen zu diesem Thema ist, das ich, wenn der jeweilige Wert bei Status steht die Checkbox einen Haken hat.

Mein Problem ist, das ich mit den Klammern setzen in der If-Anweidung nicht richtig klar komme.

Habe jede Variante die ich im Netz gefunden habe durchprobiert, allerdings kommen immer wieder neue Fehler .

Über Hilfe bzw. einen Tipp in die richtige Richtung wäre ich wie immer Dankbar.

Danke und schönes WE.


<html>
<head>
<title>test</title>
</head>
<body>
<?php
include("../php/connect.php");

$sql = "SELECT id, auto, status FROM fahrzeug";

$abfrageergebnis = mysql_query( $sql ) or trigger_error(mysql_error(),E_USER_ERROR);


if (isset($_REQUEST['checkbtn'])) {
foreach ($_REQUEST['checkbtn'] as $value){
mysql_query ("UPDATE fahrzeug SET status='1' WHERE id='$value'") OR die(mysql_error());
}
}

if (isset($_REQUEST['uncheckbtn'])) {
foreach ($_REQUEST['uncheckbtn'] as $value){
mysql_query ("UPDATE fahrzeug SET status='0' WHERE id='$value'") OR die(mysql_error());
}
}

$checked = $result['status'];

?>

<form action="<? $_SERVER["SCRIPT_NAME"] ?>" method="post">
<table>
<?PHP
while ($datensatz = mysql_fetch_array( $abfrageergebnis ))
{
echo '<tr>';
echo '<td style="width:155px">' . $datensatz['auto'] . '</td>';
echo '<td style="width:15px"><input name="checkbtn[]" type="checkbox" value="'.$datensatz['id'].'" ' . if ($checked == 1) echo 'checked'; .' ></td>';
echo '<td style="width:15px"><input name="uncheckbtn[]" type="checkbox" value="'.$datensatz['id'].'" 'if ($checked == 0) echo 'checked'; '></td>';
echo '<tr>';
}
?>
<td style="width:15px"><input type="submit" value="Senden" name="submit"></td>
</table>
</form>
</body>
</html>

SuNflOw1991
24.03.2012, 22:41:02
Versuche es doch mal so:


<html>
<head>
<title>test</title>
</head>
<body>
<?php
// incudieren der MySQL Verbindung (denke ich mal)
include("../php/connect.php");

// Abfrage wennn der User Form abschickt:
if(isset($_POST['submit'])) {
foreach($_POST['checkbox'] as $key => $val) {
// ID für die Abfrage gesichert nach: http://www.selfphp.de/forum/showpost.php?p=75460&postcount=5
$id = isset($_POST['id'][$key]) ? $_POST['id'][$key]+0 : 0;
// $val ist dann der Wert ob makiert oder nicht makiert
$status = isset($val) && $val != "" && $val <= 1 ? $val+0 : 0;
// Nur eintragen wenn die ID größer 0 ist.
if ($id > 0) {
// MySQL Query:
mysql_query ("UPDATE fahrzeug SET status='".$status."' WHERE id='".$id."'") OR die(mysql_error());
}
}
}

// Form erstellen:
echo "<form action='".$_SERVER['SCRIPT_NAME']."' method='post'>";
// Tabelle:
echo "<table border='0' cellpadding='0' cellspacing='0'>";
// Datenbank Abfrage
$sql = "SELECT id, auto, status FROM fahrzeug";
$result = mysql_query( $sql ) or trigger_error(mysql_error(),E_USER_ERROR);
// Schleife
while ($data = mysql_fetch_array($result)) {
echo "<tr>";
// Auto
echo "<td style='width: 155px;'>".$data['auto']."</td>";
// CheckBox
echo "<td style='width: 15px;'><input type='checkbox' name='checkbox[]'".($data['status'] == 1 ? " checked='checked'" : "")." /></td>";
// ID aber versteckt
echo "<input type='hidden' name='id[]' value='".$data['id']."' />";
echo "</tr>"; // Zeile Ende
}
// Button
echo "<tr><td colspan='2' align='center'><input type='submit' value='Absenden' name='submit' /></td></tr>";
echo "</table>"; // Ende Tabelle
echo "</form>"; // Ende Form
?>
</body>
</html>

urvater
25.03.2012, 12:27:25
Dein SELECT muss entsprechend erweitert werden, damit du den vorhandenen Status aus der DB-Tabelle bekommst. Damit kanst du dann auf "checked" prüfen.

<?php
$sql = "SELECT id, auto, status FROM fahrzeug";
$abfrageergebnis = mysql_query( $sql ) or trigger_error(mysql_error(),E_USER_ERROR);
?>

<form action="<?php echo $_SERVER["SCRIPT_NAME"] ?>" method="post">
<table>
<?PHP
while ($datensatz = mysql_fetch_array( $abfrageergebnis ))
{
if ($datensatz['status'] == 1) { $checked_1 ='checked';}
if ($datensatz['status'] == 0) { $checked_2 = 'checked';}
echo '<tr>';
echo '<td style="width:155px">' . $datensatz['auto'] . '</td>';
echo '<td style="width:15px"><input name="checkbtn[]" type="checkbox" value="'.$datensatz['id'].'" ' . $checked_1 .' ></td>';
echo '<td style="width:15px"><input name="uncheckbtn[]" type="checkbox" value="'.$datensatz['id'].'" '.$checked_2. '></td>';
echo '<tr>';
}
?>
<td style="width:15px"><input type="submit" value="Senden" name="submit"></td>
</table>
</form>

syntax
25.03.2012, 14:07:03
Ja genau das ist es was ich gesucht habe, vielen Danke Urvater.

Ich hatte das so ähnlich am Anfang aber ich habe es in den oberen PHP Code eingefügt und nicht ins <FORM> Element. Und da hat er mir immer gesagt das die Werte nicht definiert seien, dachte ich das liegt wieder an meinem Code deshalb hab ich versucht das anders zu lösen. Bin aber forh das ich nahe dran war :)

Wenn ich jetzt zwischen meinen 2 Checkboxen switchen will, soll heißen wenn ich auf "checkbtn" klicke soll der "uncheckbtn" inaktiv werden!
Löse ich das am besten auch mit PHP als Schleife oder lieber mit JavaScript?

PS.: Wenn eine von beiden Checkboxen aktiv ist bring er mir bei der anderen das der Wert nicht definiert sei, habe diese Fehlermeldung mit einem @ vor der Varialbe in meiner Checkbox gelöst, ich hoffe das dasss so OK ist oder habe ich damit eine Sicherheitslücke bzw. einen Fehler in meinem Script?


echo '<td style="width:15px"><input name="checkbtn[]" type="checkbox" value="'.$datensatz['id'].'" ' . @$checked_1 .' ></td>';


Danke