mit Selectfeld zwei Werte gleichzeitig aus DB abrufen

inspiron8

Mitglied
Hallo,
ich bräuchte bitte mal Hilfe für folgendes Problem.
Ein Selectfeld wird aus einer DB-Tabelle "dropdown_sendung" mit den Werten "sendung" gefüllt. Soweit alles i.O.

Die Auswahl "sendung" wird in einer neuen Fehlerliste gespeichert.

Nun möchte ich den dazu passenden Senderlogonamen mit in der Tabelle "Fehlerliste" speichern. Mit dem Selctfeld kann ich aber nur ein Wert auswählen. Ich weiß leider nicht weiter wo und wie ich da ansetzen soll.
Für ein Lösungsweg wäre ich dankbar!
Gruß


Tabelle "dropdown_sendung" für Selectfeld
--------------------------
id | sendung | senderlogo |
--------------------------
1 | Sendung_A | logo_a.png |
2 | Sendung_B | logo_b.png |
3 | Sendung_C | logo_c.png |
. |...
. |...


Tabelle "Fehlerliste"
--------------------------
id | sendung | senderlogo | fehler |... |...
--------------------------
1 | Sendung_B | logo_b.png | fehlertext |... |...
2 | Sendung_C | logo_c.png | ..
3 | Sendung_B | logo_b.png | ..
. |...
. |...

Selectfeld:
PHP:
<select name="sendung" id="sendung" >
    <?php
             //$sql = "SELECT sendung, senderlogo FROM dropdown_sendung "; = war ein Versuch
             $sql = "SELECT sendung FROM dropdown_sendung ";
             $result = mysql_query($sql);
                // für jeden Eintrag ein Option-Tag erstellen
             while ($arrsendung = mysql_fetch_array($result, MYSQL_ASSOC)) {
                
             foreach ($arrsendung as $zeile) {
             $sel = isselected($zeile, $_POST['sendung']);

             echo '<option value="'.$zeile.'"'.$sel .'>'.$zeile.'</option>';
             }
             }
    ?>
</select>
 
Zuletzt bearbeitet:
Im Dropdown hast du nur die ID als Wert und das Feld sendung als Anzeigewert. Das logo brauhst du ers beim Speichern. Also nach dem abschicken des Formulars. Dies kannst du beispielsweise über einen INSERT....INTO....SELECT machen

SQL:
-- die ID aus dem Fomular ist hier $selectId
-- Die Fehlermeldung ist in $fehler

INSERT INTO fehlerliste
(sendung, senderlogo, fehler)
SELECT
    ds.sendung,
    ds.senderlogo,
    '{$fehler}' AS fehler
FROM
    dropdown_sendung AS ds
WHERE
    ds.id = {$selectId}
 
Zuletzt bearbeitet von einem Moderator:
Hallo,
danke für die Hilfe.
Kann ich dein Vorschlag in mein vorhandenes integrieren oder muss das insert into zusätzlich aufgerufen werden?
Mein INSERT INTO sieht derzeit so aus.

PHP:
$sql = "INSERT INTO `FW_Fehlerbericht`
                (`DATUM`, `STEMPEL`, `UHRZEIT`, `DAUER`, `SENDUNG`, `SENDERLOGO`, `FEHLERKATEGORIE`, `ONAIR`, `BESCHREIBUNG`, `MASSNAHME`, `ANMERKUNG`, `M_NAME`, `SCHICHT`, `ORT`)
            VALUES(
                '" .mysql_real_escape_string( date_german2mysql($_POST["datum"])). "',
                '" .mysql_real_escape_string( $_POST["stempel"] ). "',
            	'" .mysql_real_escape_string( $_POST["uhrzeit"] ). "',
            	'" .mysql_real_escape_string( $_POST["dauer"] ). "',
            	'" .mysql_real_escape_string( $_POST["sendung"] ). "',
            	'" .mysql_real_escape_string( $_POST["senderlogo"] ). "',
            	'" .mysql_real_escape_string( $_POST["fehlerkategorie"] ). "',
            	'" .mysql_real_escape_string( $_POST["radio"] ). "',
            	'" .mysql_real_escape_string( $_POST["beschreibung"] ). "',
            	'" .mysql_real_escape_string( $_POST["massnahme"] ). "',
            	'" .mysql_real_escape_string( $_POST["anmerkung"] ). "',
            	'" .mysql_real_escape_string( $_SESSION["user_vorname"]." ".$_SESSION["user_nachname"] ). "',
                '" .mysql_real_escape_string( $_SESSION["schicht"] ). "',
                '" .mysql_real_escape_string( $_SESSION["ort"] ). "'      
                )";
 
Kannst du. Anstelle der VALUE-Sektion nimmst du den SELECT. Der Rest ist analog dem Feld `fehler`in meinem Besipiel

PHP:
//Alle mit maysql_real_escape parsen
$dbPost = array_map('mysql_real_escape_string', $_POST);
//Spezialfälle anderst behandeln
$dbPost['datum'] = date_german2mysql($_POST['datum']);
//Die Session ebenfalls escapen
$dbSession = array_map('mysql_real_escape_string', $_SESSION);
$sql = <<<SQL
INSERT INTO `FW_Fehlerbericht` (
    `DATUM`, 
    `STEMPEL`, 
    `UHRZEIT`, 
    `DAUER`, 
    `SENDUNG`, 
    `SENDERLOGO`, 
    `FEHLERKATEGORIE`, 
    `ONAIR`, 
    `BESCHREIBUNG`, 
    `MASSNAHME`, 
    `ANMERKUNG`, 
    `M_NAME`, 
    `SCHICHT`, 
    `ORT`)
SELECT
    '{$dbPost['datum']}',
    '{$dbPost['stempel']}',
    '{$dbPost['uhrzeit']}',
    '{$dbPost['dauer']}',
    ds.sendung,
    ds.senderlogo,
    '{$dbPost['fehlerkategorie']}',
    -- usw. in der Reihenfolge der oben genannenten Felder
    '{$dbSession['user_vorname']} {$dbSession['user_nachname']}'
    -- usw. in der Reihenfolge der oben genannenten Felder
FROM
    dropdown_sendung AS ds
WHERE
    ds.id = {$selectId}
SQL;
 
...mmhh,
irgendwie verstehe ich nicht wie du es meinst.
PHP:
INSERT INTO fehlerliste
(sendung, senderlogo, fehler)
SELECT
    ds.sendung,
    ds.senderlogo,
    '{$fehler}' AS fehler
FROM
    dropdown_sendung AS ds
WHERE
    ds.id = {$selectId}

Ich habe es mal versucht umzusetzen, leider werden keine Daten in Tabelle `FW_Fehlerbericht` gespeichert

PHP:
    $sql = "INSERT INTO `FW_Fehlerbericht`
                (`DATUM`, `STEMPEL`, `UHRZEIT`, `DAUER`, `SENDUNG`, `SENDERLOGO`, `FEHLERKATEGORIE`, `ONAIR`, `BESCHREIBUNG`, `MASSNAHME`, `ANMERKUNG`, `M_NAME`, `SCHICHT`, `ORT`)
            SELECT
            	(
                '" .mysql_real_escape_string( date_german2mysql($_POST["datum"])). "',
                '" .mysql_real_escape_string( $_POST["stempel"] ). "',
            	'" .mysql_real_escape_string( $_POST["uhrzeit"] ). "',
            	'" .mysql_real_escape_string( $_POST["dauer"] ). "',
            	'" .mysql_real_escape_string( ds.sendung ). "',
            	'" .mysql_real_escape_string( ds.senderlogo ). "',
            	'" .mysql_real_escape_string( $_POST["fehlerkategorie"] ). "',
            	'" .mysql_real_escape_string( $_POST["radio"] ). "',
            	'" .mysql_real_escape_string( $_POST["beschreibung"] ). "',
            	'" .mysql_real_escape_string( $_POST["massnahme"] ). "',
            	'" .mysql_real_escape_string( $_POST["anmerkung"] ). "',
            	'" .mysql_real_escape_string( $_SESSION["user_vorname"]." ".$_SESSION["user_nachname"] ). "',
                '" .mysql_real_escape_string( $_SESSION["schicht"] ). "',
                '" .mysql_real_escape_string( $_SESSION["ort"] ). "'
            FROM
    			dropdown_sendung AS ds WHERE ds.id = {$selectId}
    			)";
 
item: Was soll die Klammer im SELECT?

item: Ich habe dir weiteroben noch ein Beispiel angehängt
 
item: Was soll die Klammer im SELECT?

item: Ich habe dir weiteroben noch ein Beispiel angehängt
...oohh sorry,
das habe ich gar nicht gesehen. Ich hatte schon den Editor angewählt und wurde gerade abgelenkt.
Ich werde es mal ausprobieren.

...ich habe es mal getestet, es werden leider keine Daten in DB gespeichert.

PHP:
$dbPost = array_map('mysql_real_escape_string', $_POST);
//Spezialfälle anderst behandeln
$dbPost['datum'] = date_german2mysql($_POST['datum']);
//Die Session ebenfalls escapen
$dbSession = array_map('mysql_real_escape_string', $_SESSION);
$sql = "
	INSERT INTO `FW_Fehlerbericht` (
    	`DATUM`, 
    	`STEMPEL`, 
    	`UHRZEIT`, 
    	`DAUER`, 
    	`SENDUNG`, 
    	`SENDERLOGO`, 
    	`FEHLERKATEGORIE`, 
    	`ONAIR`, 
    	`BESCHREIBUNG`, 
    	`MASSNAHME`, 
    	`ANMERKUNG`, 
    	`M_NAME`, 
    	`SCHICHT`, 
    	`ORT`)
	SELECT
    	'{$dbPost['datum']}',
    	'{$dbPost['stempel']}',
    	'{$dbPost['uhrzeit']}',
    	'{$dbPost['dauer']}',
    	ds.sendung,
    	ds.senderlogo,
    	'{$dbPost['fehlerkategorie']}',
    	'{$dbPost['radio']}',
    	'{$dbPost['beschreibung']}',
    	'{$dbPost['massnahme']}',
    	'{$dbPost['anmerkung']}',
    	'{$dbSession['user_vorname']} {$dbSession['user_nachname']}',
    	'{$dbSession['schicht']}', 
    	'{$dbSession['ort']}'
	FROM
    	dropdown_sendung AS ds
	WHERE
    	ds.id = {$selectId}";

PHP:
echo "<pre>";
var_dump($_POST);
print_r($_POST);
echo "</pre>";

Code:
array(8) {
  ["datum"]=>
  string(10) "15.03.2013"
  ["stempel"]=>
  string(10) "1363344416"
  ["sendung"]=>
  string(15) "Sendung Früh"
  ["fehlerkategorie"]=>
  string(12) "Sendung i.O."
  ["azende"]=>
  string(0) ""
  ["bemerkung"]=>
  string(0) ""
  ["ueberpruefung"]=>
  string(1) "1"
  ["submitButton"]=>
  string(9) "Speichern"
}
Array
(
    [datum] => 15.03.2013
    [stempel] => 1363344416
    [sendung] => Sendung Früh
    [fehlerkategorie] => Sendung i.O.
    [azende] => 
    [bemerkung] => 
    [ueberpruefung] => 1
    [submitButton] => Speichern
)
 
Hallo,
ich komme nicht weiter. Ich habe jetzt mal ein Test gemacht.
Ohne "AS ds WHERE ds.id = {$selectId}" wird der Inhalt der Tabelle aufgelistet.
PHP:
<?php header ('Content-Type: text/html; charset=utf-8');
error_reporting(E_ALL );
//  Datenbankzugriff
include ('../admin/includes/config_db.php');
//-----------------------------------------------
$sql = "SELECT 
			sendung, 
			senderlogo 
		FROM 
			dropdown_sendung ";

$abfrageergebnis = mysql_query($sql) or die ("MySQL-Error: " . mysql_error());  
var_dump($abfrageergebnis); 
              
while ($datensatz = mysql_fetch_array( $abfrageergebnis)) 
{      
	echo $datensatz['id']."-";
	echo $datensatz['sendung']."-";
	echo $datensatz['senderlogo']."<br>";
}
mit "AS ds WHERE ds.id = {$selectId}" kommt diese Fehlermeldung:

bool(false) Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in index_sql.php on line 14

Zeile 14 = "while ($datensatz = mysql_fetch_array( $abfrageergebnis)) "

mit "or die ("MySQL-Error: " . mysql_error())"

MySQL-Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

PHP:
 $sql = "SELECT 
			ds.sendung, 
			ds.senderlogo 
		FROM 
			dropdown_sendung AS ds 
		WHERE 
			ds.id = {$selectId}";
.
.
.

...so, jetzt habe ich mir eine Testdatei gebastelt.

Das ist jetzt die Fehlermeldung:

SELECT ds.sendung, ds.senderlogo FROM dropdown_sendung AS ds WHERE ds.id = MySQL-Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 7

PHP:
<?php header ('Content-Type: text/html; charset=utf-8');
error_reporting(E_ALL );
ini_set('display_errors', 1);

$db_host="localhost";
$db_user="root"; 
$db_pass="xxxxxx"; 
$db_name="0815";

$conID = mysql_connect( $db_host, $db_user, $db_pass ) or die( "Die Datenbank konnte nicht erreicht werden!".mysql_error());
			if ($conID)
			{
		       mysql_set_charset("utf8");
    		       mysql_select_db( $db_name, $conID ) or die  ("Keine Verbindung möglich: ".mysql_error());
    		       mysql_query("SET NAMES utf8");
			}
//-----------------------------------------------
$selectId = '7';*
$sql = "SELECT 
			ds.sendung, 
			ds.senderlogo 
		FROM 
			dropdown_sendung AS ds 
		WHERE 
			ds.id = {$selectId}";

echo "{$sql}\n";			
$abfrageergebnis = mysql_query($sql) or die ("MySQL-Error: " . mysql_error());  
            
while ($datensatz = mysql_fetch_array( $abfrageergebnis)) 
{      
	echo $datensatz['id']."-";
	echo $datensatz['sendung']."-";
	echo $datensatz['senderlogo']."<br>";
}
 
Zurück