Wert wird nicht eingetragen
Bernd
- php
Guten Morgen,
ich verstehe mal wieder etwas nicht. Und zwar wird ein Wert nicht in die Datenbank eingetragen.
<form method="post">
<ul>
<label>
<input
type="checkbox"
name="bereich[]"
value="0"
<?php if (in_array("0", $teile25)): ?>checked<?php endif ?>>
P1
</label>
<label>
<input
type="checkbox"
name="bereich[]"
value="1"
<?php if (in_array("1", $teile25)): ?>checked<?php endif ?>>
P2
</label>
</ul>
<button type="submit" name="action">Filter anwenden </button>
</form>
if(isset($_POST['action'])){
$stmt_userBereiche = $mysqli->prepare("DELETE FROM settings WHERE kps_userid=?");
$stmt_userBereiche->bind_param("s",$object->user_code);
$stmt_userBereiche->execute();
if(is_array($_POST["bereich"]) && $_POST["bereich"][0]){
foreach($_POST["bereich"] as $v){
$stmt = $mysqli->prepare("
INSERT INTO settings (kps_userid, kps_kalenderid) VALUES (?, ?)");
$kps_userid = $object->user_code;
$kps_kalenderid = $v;
$stmt->bind_param("ss", $kps_userid, $kps_kalenderid);
$stmt->execute();
header("Location: $extra");
}
}
}
Der Wert mit 1 wird eingetragen, wenn ich nur den ersten wähle also 0 wird nicht eingetragen, wähle ich beide aus, wird ebenfalls nicht eingetragen. Da es mit dem zweiten Wert also der 1 funktioniert gehe ich stark davon aus, es liegt an der 0. Diese benötige ich aber in der Datenbank.
Wenn ich
var_dump($_POST["bereich"]);
ausgeben lasse, erhalte ich
array(2) { [0]=> string(1) "0" [1]=> string(1) "1" }
also beide Werte sind vorhanden? Was kann ich machen bzw. wo liegt überhaupt das Problem?
Ok, wenn ich diese Zeile
if(is_array($_POST["bereich"]) && $_POST["bereich"][0])
in
if(is_array($_POST["bereich"]))
ändere, dann bekomme ich auch den ersten Wert in die Datenbank geschrieben. Aber verstehe tu ich es ehrlich gesagt nicht.
Tach!
Ok, wenn ich diese Zeile
if(is_array($_POST["bereich"]) && $_POST["bereich"][0])
in
if(is_array($_POST["bereich"]))
ändere, dann bekomme ich auch den ersten Wert in die Datenbank geschrieben. Aber verstehe tu ich es ehrlich gesagt nicht.
Gar nicht? Auch nicht soweit, dass der erste Teil-Ausdruck zwar true
ergeben muss, wegen des &&
dann wohl der zweite Ausdruck false
liefern muss, als einzige Möglichkeit, dass die Bedingung nicht erfüllt werden kann?
dedlfix.
Hallo Bernd,
du solltest dir den Unterschied klar machen zwischen „Prüfen auf Wert“ und „Prüfen auf Vorhandensein“.
Gruß
Jürgen
Tach!
ich verstehe mal wieder etwas nicht. Und zwar wird ein Wert nicht in die Datenbank eingetragen.
Das ist zwar dein eigentliches Ziel, aber ist das Datenbank-Handling auch Teil des Problems?
Der Wert mit 1 wird eingetragen, wenn ich nur den ersten wähle also 0 wird nicht eingetragen, wähle ich beide aus, wird ebenfalls nicht eingetragen. Da es mit dem zweiten Wert also der 1 funktioniert gehe ich stark davon aus, es liegt an der 0. Diese benötige ich aber in der Datenbank.
Also wo konkret geht die 0 verloren - das ist hier die eigenliche Frage. Ob das DBMS-Handling schuld ist, kann man testen, indem man eine einfache Query erstellt ohne weiteren Schnickschnack drumherum.
Ich greife mal vor und löse den Teil auf, dass das Ergebnis sein wird, dass das problemlos geht. Also muss es an anderer Stelle hapern.
Wenn ich
var_dump($_POST["bereich"]);
ausgeben lasse, erhalte ich
array(2) { [0]=> string(1) "0" [1]=> string(1) "1" }
also beide Werte sind vorhanden?
Sehr schön bis hierher. Kontrollausgaben sind immer gut.
Was kann ich machen bzw. wo liegt überhaupt das Problem?
Nun hast du da aber auch noch zwei if
im Text. Verzweigt denn dein Code wie erwartet? Setz mal ein echo 'bin verzweigt und nicht verzweifelt';
oder ähnliches in den Anweisungsblock des if
.
Nachdem du nun gesehen hast, dass das Problem am zweiten if liegt, kann das Debugging dort weitergehen. Was liefert?
var_dump(is_array($_POST["bereich"]) && $_POST["bereich"][0]);
var_dump(is_array($_POST["bereich"]));
var_dump($_POST["bereich"][0]);
var_dump(boolval($_POST["bereich"][0])); // beachte das boolval()
Aha ... aber das wirst du ja selbst sehen.
Warum das Ergebnis so ist, steht im Handbuch unter Booleans - Converting to boolean. Ebenfalls nützlich sind die PHP type comparison tables.
dedlfix.