Checkbox Häkchen per mysql-Wert setzen

Hallo Forum,

Einführung:
Ich habe ein Formular, in dem ich Daten ändern kann. Dieses Formular hat genau eine Checkbox, dessen Wert in die Datenbank geschrieben wird. Wenn ich das Formular aufrufe, dann ist die Checkbox korrekterweise abgehakt, sollte der Wert „Ja“ in der Datenbank stehen. Andernfalls ist sie nicht abgehakt.

Folgendes Problem:
Wenn ich die Daten ändere, wird das Formular nach absenden direkt wieder aufgerufen und alle Textfelder oder dropdown-Menüs sind gefüllt.
Aber diese verflixte Checkbox ist nicht abgehakt, obwohl der Wert der Checkbox ein „Ja“ ist.

Mein Code:

<?php $ar_x_reparaturfreigabe = explode(",", $x_reparaturfreigabe);
$x\_reparaturfreigabeChk = ""; $x\_reparaturfreigabeChk .= " foreach ($ar\_x\_reparaturfreigabe as $cnt\_x\_reparaturfreigabe) { if (trim($cnt\_x\_reparaturfreigabe) == "Ja") { $x\_reparaturfreigabeChk .= " checked"; break; } } if($x\_reparaturfreigabe=="Ja"){ $x\_reparaturfreigabeChk .= " checked"; } echo $x\_reparaturfreigabeChk; ?\> Aus meiner SQL-Anweisung wird folgendes abgefangen: <?php SQL-Anweisung mit SELECT:
$GLOBALS["x\_reparaturfreigabe"] = $row["reparaturfreigabe"]; ?\><?php SQL-ANweisung mit INSERT:
$theValue = ($GLOBALS["x\_reparaturfreigabe"] != "") ? @implode(",", $GLOBALS["x\_reparaturfreigabe"]) : ""; $theValue = (!get\_magic\_quotes\_gpc()) ? addslashes($theValue) : $theValue; $theValue = ($theValue != "") ? " '" . $theValue . "'" : "NULL"; $fieldList["`reparaturfreigabe`"] = $theValue; ?\> Weiss jemand, wie ich meinen Wert aus der MySQL-DB so abfrage, sodass beim Wiederaufruf des Formulars die Checkbox beim entsprechenden Wert "Ja" automatisch abgehakt wird? Oder hat jemand vielleicht eine andere effektivere Lösung? Bin für jede Hilfe sehr dankbar! Viele Grüße aus Berlin Laurenzo

Hi Laurenzo,
bin mir nicht ganz sicher, ob ich dein Problem verstanden habe - war echt viel Code und die Vorgehensweise ist mir nicht ganz klar. Vor allem verstehe ich nicht, wieso du dazu eine globale Variable verwendest.

Du hast eine Checkbox

echo „“;

deren Wert in die Datenbank geschrieben wird.

if ($_POST[‚irgendwas‘] == „Ja“):
//irgendeine Insert-Anweisung
endif;

und jetzt noch einbauen, welcher Wert in der Datenbank steht, und entsprechend anhaken:

//irgendeine Select-Anweisung
if ($array[keineAhnung] == 1):
$wertIrgendwas = „checked“;
endif;

In die richtige Reihenfolge gebracht:

_<?php if ($_POST[‚irgendwas‘] == „Ja“):
//irgendeine Insert-Anweisung
endif;

if ($array[keineAhnung] == 1):
$wertIrgendwas = „checked“;
endif;

echo „<input type=’„checkbox“’ name=’„irgendwas“’ value=’„Ja“’ .>“;
?>_

Hmmm… sieht irgendwie nach viel weniger aus… entweder wir haben jetzt total aneinander vorbeigeredet oder dein Problem war doch eigentlich ganz simpel!?

Viele Grüße,
Julia

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Julia,

vielen Dank für deine schnelle Antwort.

Der Code ist deshalb so zusammengesetzt, weil ich mir mit implode den String, in dem auch meine checkbox steht, zusammensetze.
Eine Globale Variable verwende ich, weil ich per POST an einen Schalter eine Funktion ausführe, die die SQL-Anweisungen enthält und manche Werte aus dem Formular sonst nicht übergeben werden können.

Ich habe diese Art gewählt, da ich dies zu Anfang ganz cool fand. Aber das es viel Code ist…damit gebe ich dir recht.

Mit deiner Version kann ich meinen Wert leider nicht abfangen.

Du mußt dir folgendes vorstellen:

1.) Ich rufe mein Formular auf.
2.) Ich ändere meine Daten und den Status der Checkbox auf checked.
3.) Ich klicke auf den Button zum Speichern in die Datenbank.
Resultat ---->Die Daten werden gespeichert und das Formular öffnet sich wieder mit den aktuellen Daten und meiner abgehakten Checkbox.

Hättest du noch eine andere Idee?

Hi Laurenzo,
bin mir nicht ganz sicher, ob ich dein Problem verstanden habe

  • war echt viel Code und die Vorgehensweise ist mir nicht ganz
    klar. Vor allem verstehe ich nicht, wieso du dazu eine globale
    Variable verwendest.

Du hast eine Checkbox

echo „“;

deren Wert in die Datenbank geschrieben wird.

if ($_POST[‚irgendwas‘] == „Ja“):
//irgendeine Insert-Anweisung
endif;

und jetzt noch einbauen, welcher Wert in der Datenbank steht,
und entsprechend anhaken:

//irgendeine Select-Anweisung
if ($array[keineAhnung] == 1):
$wertIrgendwas = „checked“;
endif;

In die richtige Reihenfolge gebracht:

_<?php :if ($_POST[‚irgendwas‘] == „Ja“):
//irgendeine Insert-Anweisung
endif;

if ($array[keineAhnung] == 1):
$wertIrgendwas = „checked“;
endif;

echo "value=„Ja“ " . $wertIrgendwas . „>“;
?>_

Hmmm… sieht irgendwie nach viel weniger aus… entweder wir
haben jetzt total aneinander vorbeigeredet oder dein Problem
war doch eigentlich ganz simpel!?

Viele Grüße,
Julia

Hallo Forum,

Einführung:
Ich habe ein Formular, in dem ich Daten ändern kann. Dieses
Formular hat genau eine Checkbox, dessen Wert in die Datenbank
geschrieben wird. Wenn ich das Formular aufrufe, dann ist die
Checkbox korrekterweise abgehakt, sollte der Wert „Ja“ in der
Datenbank stehen. Andernfalls ist sie nicht abgehakt.

Folgendes Problem:
Wenn ich die Daten ändere, wird das Formular nach absenden
direkt wieder aufgerufen und alle Textfelder oder
dropdown-Menüs sind gefüllt.
Aber diese verflixte Checkbox ist nicht abgehakt, obwohl der
Wert der Checkbox ein „Ja“ ist.

Mein Code:

<?php ::
$ar\_x\_reparaturfreigabe = explode(",", $x\_reparaturfreigabe); $x\_reparaturfreigabeChk = ""; $x\_reparaturfreigabeChk .= "name=\"x\_reparaturfreigabe[]\". value=\"Ja\" "; foreach ($ar\_x\_reparaturfreigabe as $cnt\_x\_reparaturfreigabe) { if (trim($cnt\_x\_reparaturfreigabe) == "Ja") { $x\_reparaturfreigabeChk .= " checked"; break; } } if($x\_reparaturfreigabe=="Ja"){ $x\_reparaturfreigabeChk .= " checked"; } echo $x\_reparaturfreigabeChk; ?\> Aus meiner SQL-Anweisung wird folgendes abgefangen: <?php ::
SQL-Anweisung mit SELECT: $GLOBALS["x\_reparaturfreigabe"] = $row["reparaturfreigabe"]; ?\> <?php ::SQL-ANweisung mit INSERT:
$theValue = ($GLOBALS["x\_reparaturfreigabe"] != "") ? @implode(",", $GLOBALS["x\_reparaturfreigabe"]) : ""; $theValue = (!get\_magic\_quotes\_gpc()) ? addslashes($theValue) > $theValue; $theValue = ($theValue != "") ? " '" . $theValue . "'" : "NULL"; $fieldList["`reparaturfreigabe`"] = $theValue; ?\> Weiss jemand, wie ich meinen Wert aus der MySQL-DB so abfrage, sodass beim Wiederaufruf des Formulars die Checkbox beim entsprechenden Wert "Ja" automatisch abgehakt wird? Oder hat jemand vielleicht eine andere effektivere Lösung? Bin für jede Hilfe sehr dankbar! Viele Grüße aus Berlin Laurenzo

Mein Code:

> <?php :<br /> $ar\_x\_reparaturfreigabe = explode(",", $x\_reparaturfreigabe);


$x\_reparaturfreigabe ist also ein array?



> $x\_reparaturfreigabeChk = "";  
> $x\_reparaturfreigabeChk .= "<input type='\"checkbox\"' name='\"x_reparaturfreigabe[]\"' value='\"Ja\"'> foreach ($ar\_x\_reparaturfreigabe as $cnt\_x\_reparaturfreigabe)  
> {  
> if (trim($cnt\_x\_reparaturfreigabe) == "Ja") {  
> $x\_reparaturfreigabeChk .= " checked";  
> break;  
> }  
> }  
> if($x\_reparaturfreigabe=="Ja"){


hier ist es kein array mehr?



> $x\_reparaturfreigabeChk .= " checked";


und das it 3 zeilen weiter oben noch abhaengig von $cnt\_x\_reparaturfreigabe?



> }  
> Aus meiner SQL-Anweisung wird folgendes abgefangen:  
> ...  
>   
> $theValue = ($GLOBALS["x\_reparaturfreigabe"] != "") ? @implode(",", $GLOBALS["x\_reparaturfreigabe"]) : "";


hier wird es abgefahren:
wenn es kein leerstring ist dann muss es ein array sein und soll implodiert werden???

Weiss jemand, wie ich meinen Wert aus der MySQL-DB so abfrage,
sodass beim Wiederaufruf des Formulars die Checkbox beim
entsprechenden Wert „Ja“ automatisch abgehakt wird?

a) ganz wichtig zeitlich nach dem schreiben. - lasesst sich aus dem obigen code nicht lesen.
b) vermute ich kommst du mit deinen checkboxen durcheinander, weil nicht gecheckte checkboxen auch nicht in $_POST enthalten sind - 5 checkboxen von denen nur 1 gecheckt sind ergeben ein array mit length=1 nicht length=5.

Hi Laurenzo!

Mit deiner Version kann ich meinen Wert leider nicht abfangen.

Scheinbar reden wir wirklich aneinander vorbei…

1.) Ich rufe mein Formular auf.
2.) Ich ändere meine Daten und den Status der Checkbox auf
checked.
3.) Ich klicke auf den Button zum Speichern in die Datenbank.
Resultat ---->Die Daten werden gespeichert und das Formular
öffnet sich wieder mit den aktuellen Daten und meiner
abgehakten Checkbox.

Genau das kannst du nämlich mit meiner Version tun. Was mir natürlich fehlte, waren der Form-Tag, der Button und die korrekten Insert- und Select-Statements.

Die Fragen, die dog.je aufwirft, sind absolut berechtigt - hast du jetzt eine Checkbox oder mehrere und wenn nur eine, wozu dann das Array?

MfG
Julia

kleiner Hinweis…
du solltest nicht mit F5 neu laden wenn du das überprüfst…
Sondern schön das Formular per URI (GET) aufrufen…
ich hatte wegen sowas (in FF) schon öfter mal anzeigeprobleme :wink:

Hallo dog.e, Hallo Julia!

Zunächst vielen Dank für Eure Hilfe. Das schätze ich eben so an diesem Forum. :smile:

dog.e:

Ich prüfe ab, ob es sich um einen String handelt oder nicht. Handelt es sich um einen String (in meinem Fall „JA“) dann soll der Wert abgefangen werden und die Checkbox abgehakt werden, wenn was in der DB steht. Leider funktioniert das nicht :frowning: .
Würde es sich um einen Integer-Wert handeln, soll der sich dahinter verbergende String durch implode zusammengesetzt werden.

Zur Zeit handelt es sich zunächst um eine Checkbox und mehreren Textfeldern und Textareas. Künftig soll das Formular erweitert werden und es würden möglicherweise mehrere Checkboxen dazu kommen.
Daher dieses Konstrukt.

Julia:

Die Anmerkungen von dog.e sind vollkommen berechtigt.
Da es sich zunächst um eine Checkbox und mehreren Textfeldern und Textareas handelt, jedoch dieses Formular künftig erweitert werden soll, habe ich dieses Konstrukt geschrieben, sodass ich sowohl Strings als auch Integerwerte abfangen kann und mit implode zusammensetzen kann.

Leider funktioniert das nicht so ganz. Der Wert aus der Checkbox, sollte einer in der DB stehen, wird zwar übernommen aber macht sich in der Checkbox nicht bemerkbar. Das ist das Problem.

Es geht noch weiter:

Mein Formular ist folgendermassen aufgebaut:
Es gibt Textfelder, Textareas und Checkboxen.
Darunter verbirgt sich ein durch verborgenes Untermenü.
Rufe ich das Formular das erste Mal auf, dann wird die Checkbox abgehakt angezeigt, wie es auch sein soll.

Wenn ich aber dann auf meinen Button zum Anzeigen des Unterformulars klicke, dann erscheint das Unterformular mit einem weiteren Button zum absenden der veränderten Values dieser Objekte.
Nach dem Einblenden des Untermenüs verschwindet jedoch das Häkchen in der Checkbox, was aber nicht sein darf. Denn der Wert der Checkbox wurde ja übergeben, macht sich in der Checkbox aber nicht bemerkbar.

Und das ist eben mein Hauptproblem.

Wie bringe ich das Formular dazu den Wert nach dem Einblenden des untermenüs (wird durch If(!$_REQUEST[‚bearbeiten‘]) {

} else {
Blende das Untermenü mit dem SENDEN-Button ein
…mit der ganze Klumpatsch
}

Wie beschrieben wird beim ersten Aufruf des Formulars die Checkbox abgehakt angezeigt. Nach dem Einblenden des Untermenüs wird die Checkbox plötzlich nicht mehr abgehakt angezeigt, was aber nicht sein darf.

Was tun?

Hilft vielleicht eine Session? Aber der Wert wird ja aus der DB übergeben, also kann die session hier auch nichts mehr machen, oder?

Ich weis nicht mehr weiter.
Vielleicht sollte ich tatsächlich auf eine andere, einfachere Variant zurückgreifen. hmm…

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Munich!

Das hört sich fasst plausibel an.
Aber wird das Formular mit $_REQUEST[‚bearbeiten‘] etc. genauso gehandhabt, als würde ich einen refresh mit F5 machen? Lies dir mal bitte meine letzte Antwort an Julia und dog.e durch. Da siehst du genau, was ich meine und warum das Problem vorhanden ist.

Vielleicht liegt es ja tatsächlich daran und ich muß nicht mehr lange weiter probieren. Das wäre super cool!

du solltest nicht mit F5 neu laden wenn du das überprüfst…
Sondern schön das Formular per URI (GET) aufrufen…
ich hatte wegen sowas (in FF) schon öfter mal anzeigeprobleme
:wink:

Jaaaaaa…ich habs geschöfft :smiley: .

Endlich nach 398 Tage und 70 cent habe ich es endlich geschafft.

Tausend Dank Euch Allen!

Bis zum nächsten Problemchen.

Viele Grüße aus (zur Zeit) Berlin!
Laurenzo

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]