| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

12-05-2010, 22:24
|
|
mark2911
Registrierter Benutzer
|
|
Registriert seit: May 2010
Beiträge: 13
|
|
[PHP MySQL] Checkbox Wert in Array speichern und MySQL updaten
Hallo Forum,
Ich habe ein Formular erstellt, in welchem ich die Ergebnisse eines Spieltages eintrage und in MySQL speicher. Dieses funktioniert soweit auch ganz gut.
Nun möchte ich noch einen Checkbox-Wert übergeben.
Das Problem ist nun, dass nur der Wert 1 aber nicht der Wert 0 übergeben wird.
Ich möchte den Wert 0 übergeben, wenn Checkbox nicht "checked" ist und den Wert 1, wenn Checkbox "checked" ist.
In meinem Beispiel habe ich 8 Spiele pro Spieltag, welche eingegeben werden. Wenn ich nun Checkbox für Spiel 3 und 5 setze, dann wird das Array wie folgt gesetzt:
[Played] => Array ( [0] => 1 [1] => 1 )
Ich hätte aber gerne
[Played] => Array ( [0] => 0 [1] => 0 [2] => 1 [3] => 0 [4] => 1 [5] => 0 [6] => 0 [7] => 0 )
Mein Eingabeformular:
HTML-Code:
<form id="WMErgebnisse" name="WMErgebnisse" method="post" action="WMErgebnisse.php">
<p> </p>
<table border="1">
<tr>
<td>wmTeamA</td>
<td>wmTeamB</td>
<td>wmSpieltag</td>
<td>Pl</td>
<td>wtTippA</td>
<td>wtTippB</td>
</tr>
<?php do { ?>
<tr>
<input type="hidden" name="wmErgebnis[SpielID][]" size="1" style="width:40"
maxlength="2" value="<?php echo $row_WMErgebnisse['wmSpielID']; ?>" />
<td><?php echo $row_WMErgebnisse['wmTeamA']; ?></td>
<td><?php echo $row_WMErgebnisse['wmTeamB']; ?></td>
<td><?php echo $row_WMErgebnisse['wmSpieltag']; ?></td>
<td><label>
<input <?php if (!(strcmp($row_WMErgebnisse['wmplayed'],"1")))
{echo "checked=\"checked\"";} ?>
type="checkbox" name="wmErgebnis[Played][]" value="1" id="Played" />
</label></td>
<td><input type="text" name="wmErgebnis[ErgA][]" size="1" style="width:40"
maxlength="2" value="<?php echo $row_WMErgebnisse['wmToreA']; ?>" /></td>
<td><input type="text" name="wmErgebnis[ErgB][]" size="1" style="width:40"
maxlength="2" value="<?php echo $row_WMErgebnisse['wmToreB']; ?>" /></td>
</tr>
<?php /* $checkbox1[] = ((is_null($_POST['checkbox1'])) ? 0 : 1); */
}
while ($row_WMErgebnisse = mysql_fetch_assoc($WMErgebnisse)); ?>
</table>
<input type="submit" name="speichern" id="speichern" value="speichern" />
<p></p>
</form>
Mein Update-Code:
PHP-Code:
<?php }
/* Warteschleife, bis Tippformular abgesendet wurde */ if (isset($_POST['wmErgebnis'])) { /* UPDATE CODE */ echo ("UPDATE"); $WMErg=$_POST['wmErgebnis']; print_r($_POST['wmErgebnis']); foreach($WMErg['SpielID'] as $key => $dummy) { mysql_select_db($database_wm2010, $wm2010); $updateErg = sprintf(" UPDATE wmspielplan SET wmToreA=%s, wmToreB=%s, wmplayed=%s WHERE wmSpielID=%s", GetSQLValueString($WMErg['ErgA'][$key], "int"), GetSQLValueString($WMErg['ErgB'][$key], "int"), GetSQLValueString($WMErg['SpielID'][$key], "int"), GetSQLValueString($WMErg['Played'][$key], "int") ); mysql_query($updateErg, $wm2010); } echo ("Ergebnis gespeichert!"); }
Die Ausgabe im Browser:
UPDATE
Array (
[SpielID] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 )
[Played] => Array ( [0] => 1 [1] => 1 )
[ErgA] => Array ( [0] => 3 [1] => 3 [2] => 1 [3] => 4 [4] => 5 [5] => 4 [6] => 1 [7] => 1 )
[ErgB] => Array ( [0] => 0 [1] => 0 [2] => 2 [3] => 1 [4] => 6 [5] => 5 [6] => 7 [7] => 1 ) )
In meiner MySQL Datenbank wird im Feld "Played" allerdings nicht Spiel 1 und Spiel 2 mit dem Wert 1 gefüllt, sondern wird Spiel 1 mit dem Wert 2 gefüllt. D.h. das vermutlich die Werte im Array addiert werden. Das verstehe ich aber nicht. Die anderen Werte (SpielID, ErgA, ErgB) werden ja richtig übergeben.
Gruss
Markus
Ergebnis gespeichert!
Geändert von mark2911 (12-05-2010 um 23:19 Uhr)
|

12-05-2010, 22:32
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo,
ausgeschaltete Checkboxen werden nie übermittelt, aber was spricht dagegen, das mit PHP zu prüfen?:
PHP-Code:
$ergebnis = (int) isset($_POST["checkboxName"]); // $ergebnis ist dann 0 oder 1
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

12-05-2010, 23:11
|
|
mark2911
Registrierter Benutzer
|
|
Registriert seit: May 2010
Beiträge: 13
|
|
Hi Amica,
spricht eigentlich nichts dagegen  DANKE.
Ich habe das jetzt versucht einzubauen.
Ich habe folgende PHP Zeile ergänzt,
PHP-Code:
<?php $ergebnis1 = (int) isset($_POST["checkbox1"]);?>
und folgende Zeile in mein Formular eingebaut.
HTML-Code:
<input type="hidden" name="wmErgebnis[Played][]" size="1" style="width:40"
maxlength="2" value="<?php echo $ergebnis1; ?>" />
Gesamtes Formular:
HTML-Code:
<form id="WMErgebnisse" name="WMErgebnisse" method="post" action="WMErgebnisse.php">
<p> </p>
<table border="1">
<tr>
<td>wmTeamA</td>
<td>wmTeamB</td>
<td>wmSpieltag</td>
<td>wtTippA</td>
<td>wtTippB</td>
<td>Pl</td>
</tr>
<?php do { ?>
<tr>
<input type="hidden" name="wmErgebnis[SpielID][]" size="1" style="width:40"
maxlength="2" value="<?php echo $row_WMErgebnisse['wmSpielID']; ?>" />
<td>
<?php echo $row_WMErgebnisse['wmTeamA']; ?>
</td>
<td>
<?php echo $row_WMErgebnisse['wmTeamB']; ?>
</td>
<td>
<?php echo $row_WMErgebnisse['wmSpieltag']; ?>
</td>
<td>
<input type="text" name="wmErgebnis[ErgA][]" size="1" style="width:40"
maxlength="2" value="<?php echo $row_WMErgebnisse['wmToreA']; ?>" />
</td>
<td>
<input type="text" name="wmErgebnis[ErgB][]" size="1" style="width:40"
maxlength="2" value="<?php echo $row_WMErgebnisse['wmToreB']; ?>" />
</td>
<td>
<label>
<input <?php if (!(strcmp($row_WMErgebnisse['wmplayed'],"1")))
{echo "checked=\"checked\"";} ?>
type="checkbox" name="checkbox1" id="Played" />
</label>
</td>
<?php $ergebnis1 = (int) isset($_POST["checkbox1"]);?>
<input type="hidden" name="wmErgebnis[Played][]" size="1" style="width:40"
maxlength="2" value="<?php echo $ergebnis1; ?>" />
</tr>
<?php }
while ($row_WMErgebnisse = mysql_fetch_assoc($WMErgebnisse)); ?>
</table>
<input type="submit" name="speichern" id="speichern" value="speichern" />
<p></p>
</form>
Die Ausgabe im Browser:
UPDATE
Array (
[SpielID] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 )
[ErgA] => Array ( [0] => 3 [1] => 3 [2] => 1 [3] => 4 [4] => 5 [5] => 4 [6] => 1 [7] => 1 )
[ErgB] => Array ( [0] => 0 [1] => 0 [2] => 2 [3] => 1 [4] => 6 [5] => 5 [6] => 7 [7] => 1 )
[Played] => Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 ) )
Ergebnis gespeichert!
Ich habe jetzt ein Array, wie ich es haben möchte, allerdings sind die Werte im Feld "Played" immer 0, egal ob ich die Checkbox angeklickt habe oder nicht.
Was habe ich falsch gemacht?
Gruss
Markus
Geändert von mark2911 (12-05-2010 um 23:21 Uhr)
|

12-05-2010, 23:17
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Ich kann nicht erkennen wo die besagte Ausgabe herkommen soll.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

12-05-2010, 23:23
|
|
mark2911
Registrierter Benutzer
|
|
Registriert seit: May 2010
Beiträge: 13
|
|
Sorry, habe ich nicht wiederholt. Ist mein Update-Code vom 1. Post.
PHP-Code:
<?php }
/* Warteschleife, bis Tippformular abgesendet wurde */ if (isset($_POST['wmErgebnis'])) { /* UPDATE CODE */ echo ("UPDATE"); $WMErg=$_POST['wmErgebnis']; print_r($_POST['wmErgebnis']); foreach($WMErg['SpielID'] as $key => $dummy) { mysql_select_db($database_wm2010, $wm2010); $updateErg = sprintf(" UPDATE wmspielplan SET wmToreA=%s, wmToreB=%s, wmplayed=%s WHERE wmSpielID=%s", GetSQLValueString($WMErg['ErgA'][$key], "int"), GetSQLValueString($WMErg['ErgB'][$key], "int"), GetSQLValueString($WMErg['SpielID'][$key], "int"), GetSQLValueString($WMErg['Played'][$key], "int") ); mysql_query($updateErg, $wm2010); } echo ("Ergebnis gespeichert!"); }?>
|

12-05-2010, 23:27
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Ich seh grad nicht mehr durch. Ist das immer dieselbe Datei?
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

12-05-2010, 23:28
|
|
mark2911
Registrierter Benutzer
|
|
Registriert seit: May 2010
Beiträge: 13
|
|
Ja, ist immer dieselbe Datei.
|

12-05-2010, 23:40
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Kannst du die in deinem ersten Beitrag mal so bearbeiten, dass man sie im Ganzen sieht?
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

12-05-2010, 23:53
|
|
mark2911
Registrierter Benutzer
|
|
Registriert seit: May 2010
Beiträge: 13
|
|
So wie die da steht, ist sie komplett. Erst das Eingabeformular, dann der PHP Code für's Update der MySQL Datenbank.
Ausser Du möchtest noch die SQL Abfrage am Anfang sehen.
Komplette Datei:
HTML-Code:
<?php
/* WMErgebnisse für Spielplan Formular */
$colname_WMErgebnisse = "-1";
if (isset($_POST['WMSpieltag_Auswahl']))
{
$colname_WMErgebnisse = $_POST['WMSpieltag_Auswahl'];
}
mysql_select_db($database_wm2010, $wm2010);
$query_WMErgebnisse = sprintf("
SELECT
wmSpielID, wmSpielDatum, wmSpielort, wmTeamA, wmTeamB, wmSpieltag, wmToreA, wmToreB, wmplayed
FROM
wmspielplan
WHERE
wmSpieltag = %s
ORDER BY
wmSpielID ASC",
GetSQLValueString($colname_WMErgebnisse, "text"));
$WMErgebnisse = mysql_query($query_WMErgebnisse, $wm2010) or die(mysql_error());
$row_WMErgebnisse = mysql_fetch_assoc($WMErgebnisse);
$totalRows_WMErgebnisse = mysql_num_rows($WMErgebnisse);
?>
<form id="WMErgebnisse" name="WMErgebnisse" method="post" action="WMErgebnisse.php">
<p> </p>
<table border="1">
<tr>
<td>wmTeamA</td>
<td>wmTeamB</td>
<td>wmSpieltag</td>
<td>wtTippA</td>
<td>wtTippB</td>
<td>Pl</td>
</tr>
<?php do { ?>
<tr>
<input type="hidden" name="wmErgebnis[SpielID][]" size="1" style="width:40"
maxlength="2" value="<?php echo $row_WMErgebnisse['wmSpielID']; ?>" />
<td>
<?php echo $row_WMErgebnisse['wmTeamA']; ?>
</td>
<td>
<?php echo $row_WMErgebnisse['wmTeamB']; ?>
</td>
<td>
<?php echo $row_WMErgebnisse['wmSpieltag']; ?>
</td>
<td>
<input type="text" name="wmErgebnis[ErgA][]" size="1" style="width:40"
maxlength="2" value="<?php echo $row_WMErgebnisse['wmToreA']; ?>" />
</td>
<td>
<input type="text" name="wmErgebnis[ErgB][]" size="1" style="width:40"
maxlength="2" value="<?php echo $row_WMErgebnisse['wmToreB']; ?>" />
</td>
<td>
<label>
<input <?php if (!(strcmp($row_WMErgebnisse['wmplayed'],"1")))
{echo "checked=\"checked\"";} ?>
type="checkbox" name="checkbox1" id="Played" />
</label>
</td>
<?php $ergebnis1 = (int) isset($_POST["checkbox1"]);?>
<input type="hidden" name="wmErgebnis[Played][]" size="1" style="width:40"
maxlength="2" value="<?php echo $ergebnis1; ?>" />
</tr>
<?php }
while ($row_WMErgebnisse = mysql_fetch_assoc($WMErgebnisse)); ?>
</table>
<input type="submit" name="speichern" id="speichern" value="speichern" />
<p></p>
</form>
<?php }
/* Warteschleife, bis Tippformular abgesendet wurde */
if (isset($_POST['wmErgebnis']))
{
/* UPDATE CODE */
echo ("UPDATE");
$WMErg=$_POST['wmErgebnis'];
print_r($_POST['wmErgebnis']);
foreach($WMErg['SpielID'] as $key => $dummy)
{
mysql_select_db($database_wm2010, $wm2010);
$updateErg = sprintf("
UPDATE
wmspielplan SET wmToreA=%s, wmToreB=%s, wmplayed=%s
WHERE
wmSpielID=%s",
GetSQLValueString($WMErg['ErgA'][$key], "int"),
GetSQLValueString($WMErg['ErgB'][$key], "int"),
GetSQLValueString($WMErg['SpielID'][$key], "int"),
GetSQLValueString($WMErg['Played'][$key], "int")
);
mysql_query($updateErg, $wm2010);
}
echo ("Ergebnis gespeichert!");
}
?>
<p> </p>
|

13-05-2010, 00:21
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Was bezweckst du denn mit diesem Stück Code?
PHP-Code:
<td>
<label>
<input <?php if (!(strcmp($row_WMErgebnisse['wmplayed'],"1")))
{echo "checked=\"checked\"";} ?>
type="checkbox" name="checkbox1" id="Played" />
</label>
</td>
<?php $ergebnis1 = (int) isset($_POST["checkbox1"]);?>
<input type="hidden" name="wmErgebnis[Played][]" size="1" style="width:40"
maxlength="2" value="<?php echo $ergebnis1; ?>" />
$ergebnis1 ist doch immer erst beim nächsten Absenden da, oder ist das Absicht?
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

13-05-2010, 00:40
|
|
mark2911
Registrierter Benutzer
|
|
Registriert seit: May 2010
Beiträge: 13
|
|
Zitat:
Zitat von AmicaNoctis
Was bezweckst du denn mit diesem Stück Code?
PHP-Code:
<td> <label> <input <?php if (!(strcmp($row_WMErgebnisse['wmplayed'],"1"))) {echo "checked=\"checked\"";} ?> type="checkbox" name="checkbox1" id="Played" /> </label> </td> <?php $ergebnis1 = (int) isset($_POST["checkbox1"]);?> <input type="hidden" name="wmErgebnis[Played][]" size="1" style="width:40" maxlength="2" value="<?php echo $ergebnis1; ?>" />
$ergebnis1 ist doch immer erst beim nächsten Absenden da, oder ist das Absicht?
|
Hmm, da hast Du recht. Ich möchte eigentlich im Array wmErgebnis[Played][] den Status (0 oder 1) der Checkbox für die 8 Spiele speichern. Das Formular läuft ja in einer Schleife.
Das bedeutet ja, dass die Überprüfung erst nach dem Senden des Formulars erfolgen kann. Aber dann erhalte ich ja für die 8 Spiele nur die Werte (1) für die gecheckten Boxen.
Kann ich eigentlich auch einen Snapshot in einem Beitrag posten?
|

13-05-2010, 00:59
|
|
mark2911
Registrierter Benutzer
|
|
Registriert seit: May 2010
Beiträge: 13
|
|
So sieht mein Formular im Browser aus
|

28-06-2011, 10:29
|
|
Ingo71
Registrierter Benutzer
|
|
Registriert seit: Mar 2011
Beiträge: 10
|
|
gleiches Problem, und ich raffs nicht
Hi,
habe dasselbe Problem mit den checkboxen, und habe diverse Lösungsweg bereits getestet, leider ohne Erfolg.
Ich habe eine FIFA Onlineliga fifa-funbolzer.de und würde diese Variante für die freigabe der einzelnen Ligaspieltage benötigen siehe Bild.
Leider werden die Checkboxen nicht richtrig übergeben.
Wenn ich z.b Spieltag 6 ankreuze wird nur der Wert der Checkbox von Spieltag 5 übergeben.
Kreuze ich beide an, werden auch beide übergeben.
Siehe Bild
Einen Lösungsvorschlg mit der Bennenung name=\status[$i] habe ich auch getestet, danach wird aber immer nur Array[2] angezeigt, egal ob eine checkbox oder beide aktiviert sind.
Dies ist der Code meiner Checkbox.
PHP-Code:
PHP-Code:
while($row = mysql_fetch_array($zeige_gesperrte_spieltage))
{
$id = $row["id"];
$gameday = $row["gameday"];
$status = $row["status"];
echo "<tr>";
echo "<td align=\"left\"><input type=\"hidden\" name=\"id[]\" readonly value=\"$id\" size=\"5\"/></td>";
echo "<td align=\"center\"><b>SPIELTAG : </b><input type=\"text\" name=\"gameday[]\" readonly value=\"$gameday\" size=\"2\"/</td>";
echo "<td align=\"left\"><input type=\"checkbox\" name=\"status[]\" value=\"1\" /></td>";
//echo "<td align=\"left\"><select name=\"status[]\" <option>$status</option><option>-</option><option>0</option><option>1</option>/></td>";
echo "</tr>";
}
und hier das verabeitende Formular:
PHP-Code:
{
//daten vom league_admin_gameday_open_form formular
$id = $_POST["id"];
$liga = $_POST["liga"];
$gameday = $_POST["gameday"];
$status = $_POST["status"];
print_r ($id);
print_r ($status);
print_r ($gameday);
for($i=0; $i<count($id); $i++)
{
//$sqlab_update = mysql_query("UPDATE fmo_ligen_spieltage SET status = '$status[$i]' WHERE id = '$id[$i]'") OR die(mysql_error());
//$sqlab_update1 = mysql_query("UPDATE fmo_ligen_spielplan SET status = '$status[$i]' WHERE status <> '2' AND status_league = 'open' AND gameday = '$gameday[$i]' AND liga = '$liga'") OR die(mysql_error());
}
Ich hab echt kein Plan mehr, und wäre super für eure Hilfe dankbar
Gruß
Ingo
Geändert von AmicaNoctis (28-06-2011 um 10:37 Uhr)
Grund: URL entlinkt
|

28-06-2011, 10:34
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo,
wie bereits gesagt: ausgeschaltete CHeckboxen werden nie übermittelt, also musst du serverseitig selbst dafür sorgen, die anderen mit false oder ähnlichem vorzubelegen.
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

28-06-2011, 11:18
|
|
Ingo71
Registrierter Benutzer
|
|
Registriert seit: Mar 2011
Beiträge: 10
|
|
Danke für deine schnelle Antwort.
Leider komme ich mir gerade vor, als stehe ich mit beiden Beinen auf nem Schlauch und sitze mit meinem Hintern auf der Leitung.
Kannst du mir direkt helfen?
Mit nem konkreten Lösungsweg.
Sorry, muß die Hitze sein aber mein Kopf ist gerade leer.
Danke
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|