• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Eine einzige Checkbox verarbeiten

Tobi44

Mitglied
Hallo,

ich verbringe nun schon mehrere Stunden meines Abends mit einer eigentlich recht simplen Sache, die mich allmählich zum verzweifeln bringt.

Ich habe eine Checkbox:
HTML:
Video owner? <input id="videoowner" name="videoowner" type="checkbox">
Theoretisch sollte beim Absenden des Formulares bei gesetzter Checkbox ein "on" und bei nicht gesetzter Checkbox ein gar nichts gesendet (und in diesem Fall in der Datenbank gespeichert) werden.

Es wird aber in jedem Fall, also egal ob die Box gesetzt ist oder nicht, ein "on" oder ein entsprechender Wert, den ich bei value="" eingebe, gesendet.

Wie zum Teufel kriege ich es hin, dass NUR bei gesetzter Checkbox irgendein Wert raus geht?

Gruß
 
Die Formulardaten werden via Javascript an eine php-Datei übermittelt und dort verarbeitet.

Im Netz habe ich folgende Methode gefunden, diese ergibt aber auch immer nur den "Endwert" = no.

if (isset($_POST["videoowner"])) { $videoowner = "no"; } else { $videoowner = "yes"; }
 
Also AJAX. Dann würde ich mit jQuery so etwas versuchen.

(ungestet)
Code:
$(button).on('click', function(e) {
     e.preventDefault();
    if ($('#videoowner').prop('checked')) {
        // AJAX Call
    } else {
        return false;
    }
    // Falls der User weitergeleitet werden soll
    window.location.href = "http://www.example.com";
});
 
Wie gesagt, wenn ich einen value-Wert eingebe, wird dieser immer gesendet. D.h. egal ob die Checkbox vom User gesetzt wurde oder nicht, in der Datenbank steht der Wert drin...
 
Also da muss doch was am JavaScript falsch laufen. Die Überprüfung ob es 'gecheckt' ist ergibt anscheinend immer true und wird deshalb beim serialize mitgeschickt.

Da ich auch gerade an einem Riesen-Ajax-Formular dran bin, im PHP wird's wie folgt abgefragt:
PHP:
$sql[] = $this->request['Aktiv'] ? 1 : 0; //$this->request == $_POST

Die Checkbox:
HTML:
<input name="Aktiv" value="true" checked="checked" type="checkbox">

jQuery:
Code:
[FONT=Monaco]$.ajax({[/FONT]     
     type: [COLOR=#2a00ff]"POST"[/COLOR],
     url: module.find([COLOR=#2a00ff]'form'[/COLOR]).attr([COLOR=#2a00ff]'action'[/COLOR]),
     data: module.find([COLOR=#2a00ff]'form'[/COLOR]).serialize(),
     success: [COLOR=#7f0055]function[/COLOR](data) {
          ...
     }
[FONT=Verdana][FONT=Monaco]});[/FONT][/FONT]


Und das funktioniert.
 
Hmm, bei mir steht im JS lediglich:
formData.append( 'videoowner', $( '#videoowner' ).val() );

Gleiches verwende ich bei einem input-Feld, das funktioniert. Dachte, das könnte vielleicht auch mit ner Checkbox funzen. :-D
 
Ja und das ist der Fehler. Du prüfst garnichts, nicht ob es gecheckt ist sondern übergibst immer den value. Und dieser ist ja immer da, egal ob gecheckt oder nicht. Auch beim text-input prüfst du nicht ob es leer ist sondern übergibst einfach den leeren value. Das passt aber.

serialize() nimmt dir die ganze Arbeit ab.
 
Ich möchte gerne verstehen, wie das funktioniert. Den Code für meinen Datei-Upload habe ich mir machen lassen.
Für das titel-Feld existiert im JS noch folgende Überprüfung:
Code:
if( ! ( $( '#title' ).val().length >= 3 ) ){
					error( 'Title must be more than 3 chars long.' );
					console.log( 'Title must be more than 3 chars long.', $( '#title' ).length );
					$("#file_upload").prop('disabled', false);
					$( '#file_upload' ).removeClass( 'forbidden' );
					return;
				}
Im weiteren Verlauf kommt titel nur noch hier vor:
Code:
formData.append( 'title', $( '#title' ).val() );
Damit wird das Feld vermutlich an die upload.php, die den Wert in der DB speichert und vorher mittels PHP nochmals auf eine Mindestlänge von 3 Zeichen überprüft, gesendet bzw. für die Übermittlung vorbereitet. So meine Interpretation.

Dass ich im JS noch eine Überprüfung für die Checkbox erstellen muss, habe ich verstanden. Nur wie diese auszusehen hat, ist mir ein Rätsel.
Code:
if (document.getElementById('videoowner').checked){

wie speichere ich einen Wert für die gecheckte Checkbox hier, damit ich ihn in einer PHP-Variable in der upload.php ausgeben kann?

}else{

Und wie speichere ich hier den Wert für die nicht gecheckte Checkbox, z.B. "not_checked", den ich mittels einer PHP-Variable ausgeben kann in der upload.php???

}
Ist das so realisierbar? Am Beispiel des title-Feld kann ich evtl. auch if ($( '#videoowner' ).attr('checked')) anstelle von if (document.getElementById('videoowner').checked) nehmen?
 
Update:

Ich habe es geschafft!

Code:
if (document.getElementById('videoowner').checked){
					var videoowner = 'no_new';
				}else{
					var videoowner = 'yes_new';
				}

formData.append( 'videoowner', videoowner );
In der PHP-Datei wird via $_POST[ 'videoowner' ]; der Wert empfangen und gespeichert.

Super :-D
 
Zurück
Oben