Update mit einer Select-Box-Auswahl


CreativPur

Erfahrenes Mitglied
#1
Hi,

ich habe folgendes Problem.

Ich habe ein Änderungsformular mit einer Selectbox.
HTML:
<form action="?save=sitterart" method="post" class="form-horizontal">
    <div class="row">
        <div class="col-lg-5">
            <select class="form-control" name="art">
                <option value="<?php echo $user['art'] ?>"><?php echo $user['art'] ?></option>
                <option value="Babysitter">Babysitter</option>
                <option value="Hundesitter">Hundesitter</option>
                <option value="Babysitter und Hundesitter ">Baby,- und Hundesitter</option>
            </select>
        </div>
        <div class="col-lg-12">
            <button type="submit" class="btn btn-primary">Änderung speichern</button>
        </div>
    </div>
</form>
Wenn ich Hundesitter auswähle funktioniert es mit folgendem Code:

PHP:
if($save == 'sitterart') {
    $art = trim($_POST['art']);
    $erfahrung_hund = trim($_POST['erfahrung_hund']);
    $kenntnisse_hund = trim($_POST['kenntnisse_hund']);
    $statement = $pdo->prepare("UPDATE sitters SET art = :art, erfahrung_hund = :erfahrung_hund, kenntnisse_hund = :kenntnisse_hund WHERE id = :userid");
    $result = $statement->execute(array('art' => $art, 'erfahrung_hund' => NULL, 'kenntnisse_hund' => NULL, 'userid' => $user['id'] ));
    }
}
Damit werden "$erfahrung_hund" und "$kenntnisse_hund" wieder auf NULL gesetzt.
Wie kann ich es aber erreichen, dass, wenn Babysitter ausgewählt wird, nicht $erfahrung_hund und $kenntnisse_hund auf NULL gesetzt werden, sondern $erfahrung_baby und $kenntnisse_baby auf NULL gesetzt wird
 

Yaslaw

n/a
Moderator
#2
Du musst $art mit einem if() oder einem switch auswerten
PHP:
Switch($art) {
    case 'Babysitter':
        //TODO: Mach was für den Babysitter
        break;
    case 'Hundesitter':
        //TODO: Mach was für den Hundesitter
        break;
    case 'ABC':
        //TODO: Mach was für ABC
        break;
    Default:
        //Mach was Standardmässiges
}
 

CreativPur

Erfahrenes Mitglied
#3
Ich habe es folgend versucht zu lösen. Leider ohne Erfolg.
PHP:
if($save == 'sitterart') {
    $art = trim($_POST['art']);
    $erfahrung_hund = trim($_POST['erfahrung_hund']);
    $kenntnisse_hund = trim($_POST['kenntnisse_hund']);
    $erfahrung_baby = trim($_POST['erfahrung_baby']);
    $kenntnisse_baby = trim($_POST['kenntnisse_baby']);
    $statement = $pdo->prepare("UPDATE sitters SET art = :art, erfahrung_hund = :erfahrung_hund, kenntnisse_hund = :kenntnisse_hund, erfahrung_baby = :erfahrung_baby, kenntnisse_baby = :kenntnisse_baby WHERE id = :userid");
    $art = $_POST['art'];                   
        switch ($art)
        {   
        case "Hundesitter":
        echo '$result = '.$statement.'->execute(array("art" => '.$art.', "erfahrung_baby" => NULL, "kenntnisse_baby" => NULL, "userid" => '.$user['id'].' ))';
        break;
        case "Babysitter":
        echo '$result = '.$statement.'->execute(array("art" => '.$art.', "erfahrung_hund" => NULL, "kenntnisse_hund" => NULL, "userid" => '.$user['id'].' ))';
        break;
        default:
        echo '';
        }
}
Ich bekomme nur eine weiße Seite und in der Datenbank ändert sich auch nichts..
Wo liegt der Fehler ?
 

CreativPur

Erfahrenes Mitglied
#4
Muss ich da von meiner Selectbox noch eine Variable übergeben ?
HTML:
<form action="?save=sitterart" method="post" class="form-horizontal">
    <div class="row">
        <div class="col-lg-5">
            <select class="form-control" name="art">
                <option value="<?php echo $user['art'] ?>"><?php echo $user['art'] ?></option>
                <option value="Babysitter">Babysitter</option>
                <option value="Hundesitter">Hundesitter</option>
                <option value="Babysitter und Hundesitter ">Baby,- und Hundesitter</option>
            </select>
        </div>
        <div class="col-lg-12">
            <button type="submit" class="btn btn-primary">Änderung speichern</button>
        </div>
    </div>
</form>
 

Yaslaw

n/a
Moderator
#5
Hä?
Beim hundesitter übergibst du nur die Baby-Variabeln mit Null, aber keine Hundevariablen.
Beim Babysitter gerade umgekehrt.
Eigentlich übergibst du so nur leere Werte.
Ob du eine weitere Variable übergeben musst? Keine Ahnung. Ich verstehe sowieso nicht, woher dass du deine Hundeerfahrung und Babyerfahrung beziehen willst.
 

CreativPur

Erfahrenes Mitglied
#6
Du hast recht. Ich habe da die Variablen vergessen.

Im Einzelfall würde es so funktionieren..
PHP:
$statement = $pdo->prepare("UPDATE sitters SET art = :art, erfahrung_baby = :erfahrung_baby, kenntnisse_baby = :kenntnisse_baby, erfahrung_hund = :erfahrung_hund, kenntnisse_hund = :kenntnisse_hund WHERE id = :userid");
    $result = $statement->execute(array("art" => $art, "erfahrung_baby" => NULL, "kenntnisse_baby" => NULL, "erfahrung_hund" => 'Bitte wählen', "kenntnisse_hund" => 'Bitte wählen', "userid" => $user["id"] ));
Jetzt möchte ich es aber mit der Selectbox auswählen können wo ich doch die Variablen übergebe. Oder ?
PHP:
<form action="?save=sitterart" method="post" class="form-horizontal">
    <div class="row">
        <div class="col-lg-5">
            <select class="form-control" name="art">
                <option value="<?php echo $user['art'] ?>"><?php echo $user['art'] ?></option>
                <option value="Babysitter">Babysitter</option>
                <option value="Hundesitter">Hundesitter</option>
                <option value="Babysitter und Hundesitter ">Baby,- und Hundesitter</option>
            </select>
        </div>
        <div class="col-lg-12">
            <button type="submit" class="btn btn-primary">Änderung speichern</button>
        </div>
    </div>
</form>
Dann müsste es doch wie folgend aussehen.. Oder ?
PHP:
if($save == 'sitterart') {
    $art = trim($_POST['art']);
    $erfahrung_hund = trim($_POST['erfahrung_hund']);
    $kenntnisse_hund = trim($_POST['kenntnisse_hund']);
    $erfahrung_baby = trim($_POST['erfahrung_baby']);
    $kenntnisse_baby = trim($_POST['kenntnisse_baby']);
    $statement = $pdo->prepare("UPDATE sitters SET art = :art, erfahrung_hund = :erfahrung_hund, kenntnisse_hund = :kenntnisse_hund, erfahrung_baby = :erfahrung_baby, kenntnisse_baby = :kenntnisse_baby WHERE id = :userid");
    $art = $_POST['art'];                 
        switch ($art)
        { 
        case "Hundesitter":
        echo '$result = '.$statement.'->execute(array("art" => '.$art.', "erfahrung_baby" => NULL, "kenntnisse_baby" => NULL, "erfahrung_hund" => "Bitte wählen", "kenntnisse_hund" => "Bitte wählen", "userid" => '.$user['id'].' ))';
        break;
        case "Babysitter":
        echo '$result = '.$statement.'->execute(array("art" => '.$art.', "erfahrung_hund" => NULL, "kenntnisse_hund" => NULL, "erfahrung_baby" => "Bitte wählen", "kenntnisse_baby" => "Bitte wählen", "userid" => '.$user['id'].' ))';
        break;
        default:
        echo '';
        }
}
Oder setze ich die Zeichen "" oder '' falsch ?
 

Yaslaw

n/a
Moderator
#7
Was sollen die ' ?
echo '$result = '.$Statement

Du setzt ja nur ein Strung zusammen und führst far nix aus?

Zudem fehlen die folgenden 4 Fleder in deinem Form
PHP:
    $erfahrung_hund = [URL='http://www.php.net/trim'][U]trim[/U][/URL]($_POST['erfahrung_hund']);
    $kenntnisse_hund = [URL='http://www.php.net/trim'][U]trim[/U][/URL]($_POST['kenntnisse_hund']);
    $erfahrung_baby = [URL='http://www.php.net/trim'][U]trim[/U][/URL]($_POST['erfahrung_baby']);
    $kenntnisse_baby = [URL='http://www.php.net/trim'][U]trim[/U][/URL]($_POST['kenntnisse_baby']);
Ansonsten, sauber arbeiten..
PHP:
$art = $_POST['art'];                 
$erfahrung_hund = trim($_POST['erfahrung_hund']);
$kenntnisse_hund = trim($_POST['kenntnisse_hund']);
$erfahrung_baby = trim($_POST['erfahrung_baby']);
$kenntnisse_baby = trim($_POST['kenntnisse_baby']);

$sql = <<<SQL
    UPDATE 
        sitters 
    SET 
        art = :art, 
        erfahrung_hund = :erfahrung_hund, 
        kenntnisse_hund = :kenntnisse_hund, 
        erfahrung_baby = :erfahrung_baby, 
        kenntnisse_baby = :kenntnisse_baby 
    WHERE 
        id = :userid
SQL;

$sth = $pdo->prepare($sql);

$sth->bindValue(':art', $art, PDO::PARAM_STR);
$sth->bindValue('userid', $user['id'], PDO::PARAM_INT);
switch ($art) { 
    case "Hundesitter":
        $sth->bindValue('erfahrung_hund', $erfahrung_hund, PDO::PARAM_STR);
        $sth->bindValue('kenntnisse_hund', $kenntnisse_hund, PDO::PARAM_STR);
        $sth->bindValue('erfahrung_baby', null, PDO::PARAM_STR);
        $sth->bindValue('kenntnisse_baby', null, PDO::PARAM_STR);
        break;
    case "Babysitter":
        $sth->bindValue('erfahrung_hund', null, PDO::PARAM_STR);
        $sth->bindValue('kenntnisse_hund', null, PDO::PARAM_STR);
        $sth->bindValue('erfahrung_baby', $erfahrung_baby, PDO::PARAM_STR);
        $sth->bindValue('kenntnisse_baby', $kenntnisse_baby, PDO::PARAM_STR);
        break;
}

$sth->execute();
 

CreativPur

Erfahrenes Mitglied
#8
Super.. Es klappt..
Ich verstehe zwar den Code nicht ganz, aber ich werde mich bemühen, den Code zu verstehen. Mit anderen Worten werde ich weiterhin mich in die Welt des PDO rein knien.
Aber dennoch vielen Dank..
 

Neue Beiträge