PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   MySQL/MySQLi (http://www.selfphp.de/forum/forumdisplay.php?f=22)
-   -   Dropdown Auswahl wird nicht an DB übergeben (http://www.selfphp.de/forum/showthread.php?t=22645)

ThinkFlou 06.01.2010 16:25:53

Dropdown Auswahl wird nicht an DB übergeben
 
Hallo Forumser,

Mein PHP Formular gibt die Daten (Vor- und Nachname) soweit korrekt an meine MySQL DB weiter.
Nun habe ich aber ein Dropdown Menü für das Geschlecht (m oder w) hinzugefügt (rot markierter Code-Schnippsel). Daraufhin wurde nur das Standardmäßig ausgewählte Geschlecht (m) übergeben, Vor- und Nachname gingen leider nicht mit in die Datenbank ein.

Ich habe die Übergabe des Dropdown Menüs mit einer Schleife (im Code rot markiert) realisiert, ich schätze hier liegt der Fehler. (Ohne den rot markierten Codeschnipsel werden Vor- und Nachname korrekt übergeben)

Im Dropdown Menü "Geschlecht" hat der Name "m" hat den Wert 0 und der Name "w" hat im Formular den Wert 1.

Kann mir jemand einen Tipp geben, was ich verändern muss, damit eins der beiden Werte aus dem Dropdown Menü an die DB mit übergeben werden ?

Die meisten Dropdown Threads hier beziehen sich ja auf die Übergabe von DB an das Dropwon Menü, da bin ich nicht mit weiter gekommen :-|

Ich danke schonmal für die Mühe bis hier hin gelesen zu haben :)

Gruß
Flo


Code:

<?php

$db_host = "localhost";
$db_user = "****";
$db_pass = "*****";
$db_name = "***";
$tabelle = "Tabelle";

if (isset( $_POST['senden'] ))
{

        $_POST = get_magic_quotes_gpc() ? array_map( 'stripslashes', $_POST ) : $_POST;

        $Name = $_POST['Name'];
        $Vorname = $_POST['Vorname'];
        $Geschlecht = $_POST['Geschlecht'];
               
        $conID = mysql_connect( $db_host, $db_user, $db_pass ) or die( "Die Datenbank wurde nicht erreicht!" );
        if ($conID)
        {
                mysql_select_db( $db_name, $conID );
        }
       
        $sql = "INSERT INTO `Tabelle`
                        (`Name`, `Vorname`)
                        VALUES(
                                '" .mysql_real_escape_string( $Name ). "',
                                '" .mysql_real_escape_string( $Vorname ). "'
                          )";

    mysql_query( $sq1 );



if($Geschlecht == 0) {
        $sq2 = "INSERT INTO `Tabelle` (`Geschlecht`) VALUES ('m')";
    }
else {
        $sq2 = "INSERT INTO `Tabelle` (`Geschlecht`) VALUES ('w')";
    }

    mysql_query( $sq2 );




        if (mysql_affected_rows() == 1)
        {
                echo "Der Datensatz wurde hinzugefügt!";
               
        }
        else
        {
                echo "Der Datensatz konnte nicht hinzugefügt werden!";
               
        }
}

?>


vt1816 06.01.2010 16:33:31

AW: Dropdown Auswahl wird nicht an DB übergeben
 
wozu gibt's hier wohl ein unterforum MYSQL...?

[mod: verschoben]

ThinkFlou 06.01.2010 16:36:54

AW: Dropdown Auswahl wird nicht an DB übergeben
 
Zitat:

Zitat von vt1816 (Beitrag 133512)
wozu gibt's hier wohl ein unterforum MYSQL...?

[mod: verschoben]

Hatte es nicht als "Unterforum" angesehen.
Ich bitte um Entschuldigung und gelobe Besserung.
*sorry*

vt1816 06.01.2010 16:43:29

AW: Dropdown Auswahl wird nicht an DB übergeben
 
Zitat:

Zitat von ThinkFlou (Beitrag 133511)
[...]
Kann mir jemand einen Tipp geben, was ich verändern muss, damit eins der beiden Werte aus dem Dropdown Menü an die DB mit übergeben werden ?

Tipp:

PHP-Code:

...
if(
$_POST['Geschlecht'] == 0)
{
  
$Geschlecht 'm';
}
else
{
  
$Geschlecht 'w';
}

$sql "INSERT INTO `Tabelle` (`Name`, `Vorname`, `Geschlecht`)
        VALUES(
            '" 
.mysql_real_escape_string$_POST['Name']). "',
            '" 
.mysql_real_escape_string$_POST['Vorname'] ."',
            '" 
.$Geschlecht ."' )";

mysql_query$sql ) or die(mysql_error());
... 

** ungetestet!! **

urvater 06.01.2010 16:47:29

AW: Dropdown Auswahl wird nicht an DB übergeben
 
Nun eigentlich recht einfach zu erklären dein Problem. Dein INSERT nach dem IF fügt ja auch nur das Geschlecht per INSERT ein. Vor dem IF hast du ein INSERT mit den anderen POST-Daten.
PHP-Code:

if($Geschlecht == 0) {
$sql "INSERT INTO `Tabelle`
                        (`Name`, `Vorname`,`Geschlecht`)
            VALUES(
                '" 
.mysql_real_escape_string$Name ). "',
                '" 
.mysql_real_escape_string$Vorname ). "','m'
                      )"
;
} else {
$sql "INSERT INTO `Tabelle`
                        (`Name`, `Vorname`,`Geschlecht`)
            VALUES(
                '" 
.mysql_real_escape_string$Name ). "',
                '" 
.mysql_real_escape_string$Vorname ). "','w'
                      )"
;


So wird dir je nach Geschlecht gleich der gesamte Datensatz eingetragen.
Einfacher wäre es aber zu lösen, wenn du dir dein Formular gleich richtig erstellst. Besser gesagt dem Select die korrekten Daten übergibst.
HTML-Code:

<select name="Geschlecht" size="1">
 <option value="m">Männlich</option>
 <option value="w">Weiblich</option>
</select>

So wird dir gleich "m" oder "w" in POST übergeben. Musst du halt nur noch eine Prüfung setzen, daß auch wirklich nur diese Werte übergeben wurden.

ThinkFlou 06.01.2010 17:07:27

AW: Dropdown Auswahl wird nicht an DB übergeben
 
@ vt1816:
Dein Tipp leider funktioniert nicht, der Datensatz konnte nicht hinzugefügt werden :(

@ urvater:

Ich habe alles so wie du sagtest umgesetzt, leider konnte auch hier der Datensatz nicht hinzugefügt werden.

Ist es oben bei der Variablen Deklaration denn richtig mit:
Code:

$Geschlecht = $_POST['Geschlecht'];

Zitat:

Zitat von urvater (Beitrag 133515)
Einfacher wäre es aber zu lösen, wenn du dir dein Formular gleich richtig erstellst. Besser gesagt dem Select die korrekten Daten übergibst.
[...]
So wird dir gleich "m" oder "w" in POST übergeben. Musst du halt nur noch eine Prüfung setzen, daß auch wirklich nur diese Werte übergeben wurden.

Die Werte habe ich nun von 0 und 1 in "m" und "w" geändert.
Also muss bei der IF-Schleife das dort auch geändert werden, ich weiß nur nicht von welcher Prüfung du sprichst und was diese Änderung an meinem Problem "ändert" :)

Danke schonmal für eure beiden Tipps.

Gruß
Flo

vt1816 06.01.2010 17:10:27

AW: Dropdown Auswahl wird nicht an DB übergeben
 
Zitat:

Zitat von ThinkFlou (Beitrag 133516)
@ vt1816:
Dein Tipp leider funktioniert nicht, der Datensatz konnte nicht hinzugefügt werden :(

Fehlermeldung(en)? Code Deines Formulars?

ThinkFlou 06.01.2010 17:12:30

AW: Dropdown Auswahl wird nicht an DB übergeben
 
Zitat:

Zitat von vt1816 (Beitrag 133517)
Fehlermeldung(en)?

Naja, das
Code:

(mysql_affected_rows() == 1)
sagt mir, dass nichts in die Datenbank hinzugefügt wurde. Wie ich an weitere Fehlermeldungen komme weiß ich momentan nicht :-|


Der Quellcode des HTML Formulars wird mit NetObjekt Fusions generiert, also nicht gerade passend hier hin geschrieben zu werden.
Das PHP Script hab ich ja schon gepostet.

urvater 06.01.2010 17:29:25

AW: Dropdown Auswahl wird nicht an DB übergeben
 
Zitat:

Zitat von ThinkFlou (Beitrag 133516)
Die Werte habe ich nun von 0 und 1 in "m" und "w" geändert.
Also muss bei der IF-Schleife das dort auch geändert werden, ich weiß nur nicht von welcher Prüfung du sprichst und was diese Änderung an meinem Problem "ändert" :)

Meine Prüfung bezieht sich auf die Werte in SELECT, die per POST übergeben werden. Da diese manipuliert werden können müssen sie geprüft werden.
Ich hab mal ne kleine Seite erstellt in der ein Form drin ist, welche auch funktioniert. Mit den INSERT wurde ja alles erklärt. Denke ich zumindest.
PHP-Code:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
<title>Teste mal POST Daten</title>
</head>
<body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post" name="personen">
Nachname: <input type="text" size="20" name="Name"> <br>
Vorname: <input type="text" name="Vorname"><br>
Geschlecht: <select name="Geschlecht" size="1">
 <option value="0">Bitte wählen</option>
 <option value="m">Männlich</option>
 <option value="w">Weiblich</option>
</select>
<input type="submit" value="Senden" name="Senden">
</form>
<?php
if(isset($_POST['Senden'])) {
    
/*Nur eingefügt, damit man sieht was übergeben wird*/
    
echo '<pre>';
    
print_r($_POST);
    echo 
'</pre>';
    
/*ende der Testanzeige*/
    
$Geschlecht $_POST['Geschlecht'];
    
$PruefGesch = array('m','w');
    if(
in_array($Geschlecht,$PruefGesch)) {
        echo 
'Geschlecht wurde mit '.$Geschlecht.' übergeben';
    } else {
        echo 
'Fehlerbehandlung setzen, da Geschlecht nicht oder falsch übergeben wurde';
    }
}
?>


</body>
</html>


urvater 06.01.2010 17:37:15

AW: Dropdown Auswahl wird nicht an DB übergeben
 
Zitat:

Zitat von ThinkFlou (Beitrag 133516)
Ist es oben bei der Variablen Deklaration denn richtig mit:
Code:

$Geschlecht = $_POST['Geschlecht'];

Wenn der SELECT im Formular auch als Namen "Geschlecht" hat, dann ja ansonsten nein.

PS: So wie ich es sehe müsste das Beispiel von vt1816 funktionieren. Ist eigentlich genau das gleiche was ich umgesetzt habe nur mit einer optisch schöneneren und einfacher zu pflegenden Umsetzung.


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:43:43 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.