| 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! |
 |
|

28-06-2011, 11:25
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Problem: Von z. B. 5 Checkboxen im Formular kommen nur die an, die auch aktiviert sind (z. B. nur 2). Wenn man also die Post-Daten durchrattert, werden immer die ausgeschalteten fehlen. Dein Script kennt die Checkboxen aber und natürlich auch deren Bedeutung, denn es muss die Formulardaten ja auch verarbeiten.
Lösung: Erstelle für jedes erwartete Checkbox-Feld eine Boolean-Variable mit dem Wert false. Wenn die Post-Variable für diese Checkbox gesetzt ist, ändere den Wert auf true. Gruppen von Checkboxen lassen sich ebenso mit Gruppen von Variablen abbilden – also mit Arrays.
__________________
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:56
|
|
Ingo71
Registrierter Benutzer
|
|
Registriert seit: Mar 2011
Beiträge: 10
|
|
Danke für deine Hilfe.
Das übersteigt wohl aber gerade meinen php Horizont. ^^
Du meinst bestimmt deine Erklärung mit isset.
Aber hab leider überhaupt kein Plan, wo und wie ich das unterbringe.
Gruß
Ingo
|

28-06-2011, 12:54
|
|
Ingo71
Registrierter Benutzer
|
|
Registriert seit: Mar 2011
Beiträge: 10
|
|
Ne ich bekomms einfach nicht hin.
Es spuckt nie aus was ich möchte.
Kannst mir nochmal unter die Arme greifen??
Danke
Gruß Ingo
|

28-06-2011, 13:06
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Versuch's mal mit
HTML-Code:
<input ... name="status[$id]" .../>
dann hast du die korrekte Zuordnung über die ID, ansonsten verrutscht ja alles, weil eben nur die mitgeschickt werden, die angetickt sind:
Code:
id: 2, 3, 4, 10, 12
status: 0, 1, 0, 0, 1
ergibt den Request-Body
Code:
id[]=1&id[]=2&id[]=3&id[]=4&id[]=10&id[]=12&status[]=on&status[]=on
ergibt in PHP
PHP-Code:
array( "id" => array( 0 => 2, 1 => 3, 2 => 4, 3 => 10, 4 => 12, ), "status" => array( 0 => "on", // statt 1 => "on" 1 => "on" // statt 4 => "on" ) )
Wenn du aber im Namen des Feldes die ID als Array-Index benutzt, kann das nicht passieren.
__________________
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! 
Geändert von AmicaNoctis (28-06-2011 um 13:10 Uhr)
|

28-06-2011, 15:03
|
|
Ingo71
Registrierter Benutzer
|
|
Registriert seit: Mar 2011
Beiträge: 10
|
|
Das sieht schon mal vielversprechender aus ^^.
Hab den Code geändert in:
PHP-Code:
echo "<td align=\"left\"><input type=\"hidden\" name=\"id[$id]\" readonly value=\"$id\" size=\"5\"/></td>"; echo "<td align=\"center\"><b>SPIELTAG : </b><input type=\"text\" name=\"gameday[$id]\" readonly value=\"$gameday\" size=\"2\"/</td>"; echo "<td align=\"left\"><input type=\"checkbox\" name=\"status[$id]\" value=\"$id\"/></td>";
Das ergibt folgende Ausgabe:
Nur gibt er mit dem Folgeformular imme rnoch keine Spieltage frei:
PHP-Code:
$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 = '1' WHERE id = '$status[$i]'") OR die(mysql_error());
Irgendwo liegt der Hase noch begraben.
|

28-06-2011, 15:12
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
print_r($status) sollte dir doch sehr schön zeigen, dass der Array-Schlüssel jeweils die ID ist, oder etwa nicht? Wie kommst du dann auf die Idee, du könntest dir auf einmal die Werte eines assoziativen Arrays mit so 'ner blöden for-Schleife rausholen, die einfach stur fortlaufende numerische Schlüssel erzeugt? Warum nimmst du nicht foreach, was viel bequemer über ein Array iteriert und dir sogar noch die richtigen Schlüssel mitliefert?
Warum setzt du im SQL-Statement status auf 1 wenn die ID = 'on' ist? Das ergibt doch keinen Sinn. Sieh dir bitte nochmal ganz genau an, was print_r dir ausgibt, denk darüber nach, wie du das sinnvoll verwursten kannst und lass dir um Himmels Willen dein Statement mit echo ausgeben, bevor du es abschickst. EDIT: Achso, weil der Wert wieder die ID ist. Naja, ich würde das ändern, sonst zieht man aufgrund dieser verwirrenden Zusammenhänge noch falsche Schlüsse. Lass bei den Checkboxen einfach das value-Attribut weg.
Dann wäre noch die Sache mit SQL Injections, die du mit mysql_real_escape-string ohne viel Aufwand verhindern kannst.
__________________
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! 
Geändert von AmicaNoctis (28-06-2011 um 15:17 Uhr)
|

28-06-2011, 15:49
|
|
Ingo71
Registrierter Benutzer
|
|
Registriert seit: Mar 2011
Beiträge: 10
|
|
Das hört sich gerade nach nem verdienten Granatenanschiß an  ^^
Hab ich wohl verdient, aber ich blick überhaupt nix mehr.
Trotzdem  für deine Geduld und Mühe.
Vieleicht komme ich mit bischen Abstand auf den Trichter, wie du es meinst.
Gruß
Ingo
|

28-06-2011, 15:54
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Nimm's nicht persönlich, ich meinte es nicht böse.
Das mit der Auszeit klingt sinnvoll.
__________________
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! 
|
|
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
|