Zwei Tabellen mit einem Formular füllen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Zwei Tabellen mit einem Formular füllen

    [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.

    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));
    }
    ?>
    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ß.
    Zuletzt geändert von black-elch; 11.12.2005, 14:19.
    Hinfallen ist nicht schlimm!...... liegen bleiben unverzeihlich.

  • #2
    warum ermittelst du nicht am Anfang die letzte vegebene Lf_nr?
    Diese kannst du um eins erhöhen, und dann beliebig damit arbeiten.
    Die wenigsten Fehltritte begeht man mit den Füssen.

    Kommentar


    • #3
      Hallo illusion

      Das ist nicht mein Problem.
      Mit der Funktion

      $lf_nr = mysql_insert_id();

      erhalte ich die zuletzt vergebene lf_nr.
      Diese möchte ich in der Tabelle "lieferant_details"
      erneut entagen lassen, jedoch mit all den anderen Informationen
      im Formularteil "liefernat_details.
      Hinfallen ist nicht schlimm!...... liegen bleiben unverzeihlich.

      Kommentar


      • #4
        und wo ist das

        mysql_select_db($database_elchtest, $elchtest);
        $Result1 = mysql_query($insertSQL, $elchtest) or die(mysql_error());


        für die 2 Tabelle ??
        Bei Risiken und Nebenwirkungen fragen Sie Dr.Alban

        Kommentar


        • #5
          Danke Arni für Deinen Hinweis.
          Hatte diesen durch das viele experimentieren versehendlich gelöscht.
          Aber auch nach dem hinzufügen kein Erfolg.
          Hinfallen ist nicht schlimm!...... liegen bleiben unverzeihlich.

          Kommentar


          • #6
            [COLOR=blue]Konnte Problem soeben beheben.[/COLOR]
            Danke
            black-elch
            Hinfallen ist nicht schlimm!...... liegen bleiben unverzeihlich.

            Kommentar

            Lädt...
            X