[COLOR=blue]Werte MySQL / PHP Gemeinde -- Neueinsteiger benötigt Eure Hilfe[/COLOR]
Mein Ziel ist es, mit dem Absenden eines Formular’s gleichzeitig zwei Tabellen mit Daten
zu füllen (Master- und Detail-Tabelle).
Wobei es möglich sein sollte, mehrere „Detaildatensätze“ einzutragen und diese mit
Hilfe der zuletzt vergebenen „lf_nr“ aus der Mastertabelle eindeutig zu identifizieren.
Nicht vollständig ausgefüllte Formularfelder (im Detailbereich) sollen auch nicht in die
DB geschrieben werden.
Ich möchte Euch diese Problematik einem einfachen Beispiel veranschaulichen.
Ausgangspunkt ist eine Datenbank mit dem Namen [COLOR=red]"elchtest"[/COLOR].
In dieser DB befinden sich zwei Tabellen mit dem Namen
[COLOR=red]"lieferant"[/COLOR] und [COLOR=red]"lieferant_details"[/COLOR].
[COLOR=blue]Master-Tabelle: lieferant[/COLOR]
[COLOR=blue]==================[/COLOR]
CREATE TABLE lieferant
(lf_nr TINYINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
anrede VARCHAR(20) NOT NULL,
firmenname VARCHAR(30) NOT NULL,
vorname VARCHAR(15) NOT NULL,
name VARCHAR(20) NOT NULL,
strasse VARCHAR(30) NOT NULL,
haus_nr VARCHAR(5) NOT NULL,
plz VARCHAR(10) NOT NULL,
ort VARCHAR(25) NOT NULL,
angelegt_am datetime NOT NULL default '0000-00-00 00:00:00');
[COLOR=blue]Detail-Tabelle: lieferant_details[/COLOR]
[COLOR=blue]=======================[/COLOR]
CREATE TABLE lieferant_details
(lf_nr TINYINT UNSIGNED NOT NULL,
anrede VARCHAR(10),
vorname VARCHAR(15),
name VARCHAR(20),
funktion VARCHAR(15),
telefon VARCHAR(10),
angelegt_am DATETIME NOT NULL default '0000-00-00 00:00:00');
[COLOR=blue]Das dazugehörige Formular mit dem Namen: form_neuer_lieferant[/COLOR]
[COLOR=blue]================================================[/COLOR]
Hinweis: Die jeweiligen Felder im Formular "lieferant_details" abe ich fortlaufend benannt.
(anrede1, anrede2, anrede3 - vorname1, vorname2, vorname 3 usw.)
[COLOR=blue]Hier seht Ihr den PHP-Teil zu diesem Formular:[/COLOR]
[COLOR=blue]==================================[/COLOR]
(Hinweis: Ich benutze zur Zeit noch Dreamweaver……….
ich weiß dass einige von Euch jetzt schmunzeln!!!!!
Doch ich bin bestrebt (bald) ohne dieses Programm auszukommen, weil man mit
diesen Grafischen Benutzeroberflächen ja nichts wirklich lernt. Mit anderen Worten…
das was Dreamweaver nicht beherrscht, versuche ich per Hand nachzuschreiben.)
Das was ich im PHP-Teil hinzugefügt habe ist zwischen zwei Kommentaren markiert.
Nun, das Eintagen der Formulardaten in die Tabelle „lieferant“ klappt, auch das ermitteln
der zuletzt vergebenen lf_nr.
Aber dann hört’s auch schon auf.
War der Meinung dass hier eine if-Schleife zu Erfolg führen könnte, habe auch einige
Stunden rumexperimentiert, doch bisher ohne richtigen Erfolg.
Nun meine Frage an Euch.
1. Kann mir jemand mit Hilfe eines (verständlichen) Beispieles auf die Sprünge helfen?
2. Kennt jemand einen Link wo dieses Problem behandelt wird?
Danke für Eure Zeit!
PS: Mir geht es nicht um eine fertige Lösungen dieses Problems Eurerseits, sondern um einen Gedankenanstoß.
Mein Ziel ist es, mit dem Absenden eines Formular’s gleichzeitig zwei Tabellen mit Daten
zu füllen (Master- und Detail-Tabelle).
Wobei es möglich sein sollte, mehrere „Detaildatensätze“ einzutragen und diese mit
Hilfe der zuletzt vergebenen „lf_nr“ aus der Mastertabelle eindeutig zu identifizieren.
Nicht vollständig ausgefüllte Formularfelder (im Detailbereich) sollen auch nicht in die
DB geschrieben werden.
Ich möchte Euch diese Problematik einem einfachen Beispiel veranschaulichen.
Ausgangspunkt ist eine Datenbank mit dem Namen [COLOR=red]"elchtest"[/COLOR].
In dieser DB befinden sich zwei Tabellen mit dem Namen
[COLOR=red]"lieferant"[/COLOR] und [COLOR=red]"lieferant_details"[/COLOR].
[COLOR=blue]Master-Tabelle: lieferant[/COLOR]
[COLOR=blue]==================[/COLOR]
CREATE TABLE lieferant
(lf_nr TINYINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
anrede VARCHAR(20) NOT NULL,
firmenname VARCHAR(30) NOT NULL,
vorname VARCHAR(15) NOT NULL,
name VARCHAR(20) NOT NULL,
strasse VARCHAR(30) NOT NULL,
haus_nr VARCHAR(5) NOT NULL,
plz VARCHAR(10) NOT NULL,
ort VARCHAR(25) NOT NULL,
angelegt_am datetime NOT NULL default '0000-00-00 00:00:00');
[COLOR=blue]Detail-Tabelle: lieferant_details[/COLOR]
[COLOR=blue]=======================[/COLOR]
CREATE TABLE lieferant_details
(lf_nr TINYINT UNSIGNED NOT NULL,
anrede VARCHAR(10),
vorname VARCHAR(15),
name VARCHAR(20),
funktion VARCHAR(15),
telefon VARCHAR(10),
angelegt_am DATETIME NOT NULL default '0000-00-00 00:00:00');
[COLOR=blue]Das dazugehörige Formular mit dem Namen: form_neuer_lieferant[/COLOR]
[COLOR=blue]================================================[/COLOR]
Hinweis: Die jeweiligen Felder im Formular "lieferant_details" abe ich fortlaufend benannt.
(anrede1, anrede2, anrede3 - vorname1, vorname2, vorname 3 usw.)
[COLOR=blue]Hier seht Ihr den PHP-Teil zu diesem Formular:[/COLOR]
[COLOR=blue]==================================[/COLOR]
(Hinweis: Ich benutze zur Zeit noch Dreamweaver……….
ich weiß dass einige von Euch jetzt schmunzeln!!!!!
Doch ich bin bestrebt (bald) ohne dieses Programm auszukommen, weil man mit
diesen Grafischen Benutzeroberflächen ja nichts wirklich lernt. Mit anderen Worten…
das was Dreamweaver nicht beherrscht, versuche ich per Hand nachzuschreiben.)
Das was ich im PHP-Teil hinzugefügt habe ist zwischen zwei Kommentaren markiert.
PHP-Code:
<?php
function GetSQLValueString($theValue, $theType,
$theDefinedValue = "", $theNotDefinedValue = "")
{
$theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form_neuer_lieferant")) {
$insertSQL = sprintf("INSERT INTO lieferant (anrede, firmenname,
vorname, name, strasse, haus_nr, plz, ort, angelegt_am)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, NOW())",
GetSQLValueString($_POST['anrede'], "text"),
GetSQLValueString($_POST['firmenname'], "text"),
GetSQLValueString($_POST['vorname'], "text"),
GetSQLValueString($_POST['name'], "text"),
GetSQLValueString($_POST['strasse'], "text"),
GetSQLValueString($_POST['haus_nr'], "text"),
GetSQLValueString($_POST['plz'], "text"),
GetSQLValueString($_POST['ort'], "text"));
mysql_select_db($database_elchtest, $elchtest);
$Result1 = mysql_query($insertSQL, $elchtest) or die(mysql_error());
// Start eintrag elch - liefert die letzte vergebene lf_nr zurück
$lf_nr = mysql_insert_id();
$insertSQL = sprintf("INSERT INTO lieferant_details (ku_nr, anrede, vorname, name,
funktion, telefon, angelegt_am)
VALUES (%s, %s, %s, %s, %s, %s, NOW())",
GetSQLValueString($lf_nr, "int"),
GetSQLValueString($_POST['anrede'], "text"),
GetSQLValueString($_POST['vorname'], "text"),
GetSQLValueString($_POST['name'], "text"),
GetSQLValueString($_POST['funktion'], "text"),
GetSQLValueString($_POST['telefon'], "text"),
GetSQLValueString($_POST['fax'], "text"),
GetSQLValueString($_POST['funk'], "text"),
GetSQLValueString($_POST['email'], "text"));
//ende eintrag elch
$insertGoTo = "form_neuer_lieferant.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}
?>
der zuletzt vergebenen lf_nr.
Aber dann hört’s auch schon auf.
War der Meinung dass hier eine if-Schleife zu Erfolg führen könnte, habe auch einige
Stunden rumexperimentiert, doch bisher ohne richtigen Erfolg.
Nun meine Frage an Euch.
1. Kann mir jemand mit Hilfe eines (verständlichen) Beispieles auf die Sprünge helfen?
2. Kennt jemand einen Link wo dieses Problem behandelt wird?
Danke für Eure Zeit!
PS: Mir geht es nicht um eine fertige Lösungen dieses Problems Eurerseits, sondern um einen Gedankenanstoß.
Kommentar