Checkbox auswerten Datenbank
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
array
attribut
code
dank
datenbank
element
ende
fehler
form
helfen
http
inhalt
set
standard
stehen
submission
tabelle
url
verzichten
-
Hallo,
ich stehe vor folgendem Problem:
Ich möchte, falls eine Checkbox angekreuzt wird, etwas in eine Tabelle meiner Datenbank schreiben.
So sieht die Checkbox aus:
<input type="checkbox" name="lock_del" id="lock_del" />
So die Annahme in der nächsten Datei:
$private_lock_del = $_POST['lock_del'];
und so die Fallunterscheidung:
if ($lock_del == "on")
Damit der Wert in der Datenbank dann aber 1 annimmt, weise ich der Variable einen neuen Wert zu:
$lock_del == 1;
Danach maskiere ich noch die $lock_del:
$safe_private_lock_del = mysql_real_escape_string($private_lock_del);
Und schreibe das ganze in die Datenbank:
mysql_query('INSERT INTO conf(lock_del, lock_pass) VALUES ( \''.$safe_private_lock_del.'\', \''.$safe_private_lock_pass.'\' ) ') or die (mysql_error());
Trotzdem steht in der Datenbank, dass lock_del == 0 ist...
Findet einer den Fehler?
Gruß,
lifels -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Aaaalso... ^^
Zuallerst nen allgemeiner Tipp:
<?php $mysql_escaped = array (); // Array mit Variablen für MySQL, deren Inhalt maskierten sind $mysql_escaped['lock_del'] = (isset ($_POST['lock_del']) && $_POST['lock_del'] == 'on') ? 1 : 0;
Formulareingaben kann man meist noch wesentlich abstrakter behandeln, aber das würde den Rahmen sprengen.
Zum Tipp:
Ich würde in einer bestimmten Art von Variablen (z.B. ein Array) deine Variablen speichern, die escaped wurden. Sonst besteht die Gefahr, dass du nachher durcheinander kommst.
Darüberhinaus ist es bei Abfragen, ob z.B. eine Variable gesetzt und deren Inhalt xy ist, übersichtlicher das Konstrukt $var = (Condition) ? ExprIfTrue : ExprIfFalse;zu nutzen.
Zu deinem Problem. Ich würde darauf tippen, dass bei dem Markieren deiner Checkbox nicht "on" übergeben wird. Lass dir einfach mal dein $_POST['lock_del'] zu Testzwekcen ausgeben.
Gruß Lucas -
Hallo,
auf die Idee kam ich auch;
mir wird on ausgegeben.
Auch das Zeug in der Fallunterscheidung scheint richtig zu sein, da ich dort eingetragen habe
echo 'Bis hier hin scheint alles zu gegen';
Dieser Text wurde auch ausgegeben...
Gruß,
lifels -
Gebe mal bei meinem Script $mysql_escaped['lock_del'] aus.
Und dann schau dir die Datenbank an. Evtl. verdrehst du beide Einträge (lock_del & lock_pass).
Oder du hast eine Verbindung zur falschen Datenbank aufgebaut... Ist mir schon passiert, da sucht man sich dann wirklich zu Tode. =D
Ansonsten ist evtl. das MySQL Query fehlerhaft. Falls keine Fehlermeldung ausgegeben wird, kann dies an der php.ini liegen, dort kann man die Ausgabe verhindern. -
Hallo,
$mysql_escaped['lock_del'];
gab 0 aus.
Aber ich habe den Fehler behoben:
Ich habe einfach am Ende der Fallunterscheidung (vor dem schließendem }) folgendes eingefügt:
mysql_query("UPDATE conf SET lock_del = 1");
Jetzt geht's :)
Danke für deine Hilfe,
Gruß.
lifels -
Warum gibst du lock_del nicht einfach den Wert 1?
<input type="checkbox" name="lock_del" id="lock_del" value="1" />
Damit wäre das Problem doch eigentlich gelöst. Oder verstehe ich das gerade alles falsch?
Zumal ich mich frage, woher "on" kommt, da dies ja eigentlich auch ein Wert sein muss.... -
fabo schrieb:
Zumal ich mich frage, woher "on" kommt, da dies ja eigentlich auch ein Wert sein muss....
Der HTML Standard besagt, dass "on" übergeben wird, falls die Checkbox markiert wurde. Wenn nicht, dann wird das input-Element einfach ignoriert, d.h. $_POST['lock_del'] wäre nicht verfügbar. Kannst du genau nachlesen im Form Submission Algorithm der HTML5 Spezifikation.
Beitrag zuletzt geändert: 16.5.2010 12:16:06 von nikic -
On getting, if the element has a value attribute, it must return that attribute's value; otherwise, it must return the string "on". On setting, it must set the element's value attribute to the new value.
Gut, dann wäre das Mysterium ja geklärt :D Wieder etwas gelernt, danke ;)
Jedoch bleibe ich dabei, dass es weniger Umstände machen würde, den Wert der Checkbox einfach direkt auf 1 zu setzen.
Beitrag zuletzt geändert: 16.5.2010 12:19:14 von fabo -
Hallo,
fabo, dein Vorschlag scheint zu funktionieren: Ich habe mal eine Testseite geschrieben, siehe hier. Wenn man der Checkbox nen Hacken gibt, kommt tatsächlich 1 als Ergebnis. Bei leerer Checkbox wird aber nichts übertragen.
Gruß,
lifels -
So würde ich das machen:
$checkbox = isset($_POST['checkbox']);
Egal, welchen value="" du nun der checkbx gibts, isset($_POST['checkbox']) wird immer genau dann true, wenn die Checkbox gecheckt wurde. -
Das wiederrum ist korrekt. Um mit einer nicht angeklickten Checkbox entsprechend arbeiten zu können, sollte der Standardwert der Spalte in der Tabelle auf 0 stehen d.h. wird ein neuer Datensatz hintugefügt, ist lock_del standardmäßig 0. Wird lock_del mitgegeben, ist es $val. ich hoffe, du kannst mir folgen :)
Du könntest auch auf isset prüfen. Wäre vielleicht noch eine Nummer einfacher.
EDIT:
niki war schneller :D
Beitrag zuletzt geändert: 16.5.2010 13:02:29 von fabo -
lifels schrieb:
Hallo,
$mysql_escaped['lock_del'];
gab 0 aus.
Aber ich habe den Fehler behoben:
Ich habe einfach am Ende der Fallunterscheidung (vor dem schließendem }) folgendes eingefügt:
mysql_query("UPDATE conf SET lock_del = 1");
Jetzt geht's :)
[...]
Kannst du mir helfen die Fallunterscheidung in dem von dir gepostet Script zu finden?
@Fabo:
Ob die Checkbox nun "1" oder "on" als Value hat ist eigentlich egal, wie nikic schon sagte.
Den Value direkt weiterverarbeiten sollte man sowieso nicht, deshalb würde ich dann definitiv den Standard "on" nehmen. -
Wenn er aber den Wert 1 in der Datenbank stehen haben will, kann er auf eine zusätzliche Abfrage verzichten ;)
-
fabo schrieb:
Wenn er aber den Wert 1 in der Datenbank stehen haben will, kann er auf eine zusätzliche Abfrage verzichten ;)
Er kann auf die Abfrage verzichten, welchen Inhalt die gesendete Checkbox hat - ja.
Aber dafür ist es dann erst recht irrlevant, was darin steht.
Wenn er aber auch den Inhalt überprüft, dann kommt er nicht um eine Abfrage herum, ob jetzt "1" oder "on" darin steht. -
lucas9991 schrieb:
Kannst du mir helfen die Fallunterscheidung in dem von dir gepostet Script zu finden?
Gerne:
lifels schrieb:
und so die Fallunterscheidung:
if ($lock_del == "on")
Steht im Eingangsbeitrag, direkt ganz oben :)
Gruß,
lifels -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage