Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Schreiben in eine Datenbank geht nur in eine Tabelle, in eine andere nicht

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Schreiben in eine Datenbank geht nur in eine Tabelle, in eine andere nicht

    Ich bekomme aus einem Formular 2 Datensätze (Personendaten & Adresse).
    Diese möchte ich in 2 verschiedene Tabellen einer Datenbank schreiben.
    In der Tabelle "person" erscheint hinterher der Datensatz. In adresse nicht.

    <?php
    require_once "php/verbindung.php";
    require_once "php/header.php";

    $anzahl_daten = mysql_query("select * from person");
    $neue_id = mysql_num_rows($anzahl_daten) + 1;

    $insert_person = mysql_query("INSERT INTO person (
    person_id,
    anrede,
    zusatz,
    vorname,
    nachname,
    sichtbar
    )
    VALUES (
    '$neue_id',
    '$_POST[anrede]',
    '$_POST[zusatz]',
    '$_POST[vorname]',
    '$_POST[nachname]',
    '1'
    )"
    );

    $insert_adresse = mysql_query("INSERT INTO adresse (
    person_id,
    typ,
    firma,
    steuernummer,
    taetigkeitsgebiet,
    straße,
    hausnummer,
    plz,
    ort,
    ortsteil,
    postfach,
    bundesland,
    sichtbar
    )
    VALUES (
    '$neue_id',
    '$_POST[adress_typ]',
    '$_POST[firma]',
    '$_POST[steuernummer]',
    '$_POST[taetigkeitsgebiet]',
    '$_POST[straße]',
    '$_POST[hausnummer]',
    '$_POST[plz]',
    '$_POST[ort]',
    '$_POST[ortsteil]',
    '$_POST[postfach]',
    '$_POST[bundesland]',
    '1'
    )"
    );

    echo "Kontakt angelegt!";

    ?>


  • #2
    Schön hingeklatscht den Code. Nutze bitte [ PHP ][/ PHP ] Tags.

    Debugging mit: http://php.net/manual/de/function.mysql-error.php

    mysql_ ist veraltet, nutz mysqli_ oder PDO.
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      Zitat von mw210 Beitrag anzeigen
      Ich bekomme aus einem Formular 2 Datensätze (Personendaten & Adresse).
      Diese möchte ich in 2 verschiedene Tabellen einer Datenbank schreiben.
      In der Tabelle "person" erscheint hinterher der Datensatz. In adresse nicht.

      <?php

      $anzahl_daten = mysql_query("select * from person");
      $neue_id = mysql_num_rows($anzahl_daten) + 1;

      ?>

      Das ist selbst für blutige (My)SQL-Anfänger überdurchschnittlich schlecht. Du holst die komplette Tabelle, nur um die Anzahl der Records zu zählen. Du verwendest vollkommen falsche Datentypen für die ID. Das ganze funktioniert nicht transaktionssicher und auch nicht bei gleichzeitigen Zugriffen.

      Du hast sowas wie:

      Code:
      test=# create table t1 (id serial primary key, val text);
      CREATE TABLE
      test=*# create table t2(t1_id int references t1, val text);
      CREATE TABLE
      Um nun in T1 was einzufügen mit der nächsten freien ID, diese zu ermitteln und die neue ID und einen anderen Wert in T2 einzutragen reicht folgendes vollkommen aus:

      Code:
      test=*# with new_id as (insert into t1 (val) values ('neu in t1') returning id) insert into t2 select id, 'neu in t2' from new_id;
      • das läuft atomar ab, da nur ein Befehl
      • es zieht transaktions- und multiusersicher die nächste freie ID
      • für MySQL gibt es kein SERIAL, aber dafür so ein Auto-Dingens
      • MySQL kann keine WITH - Syntax, daher brauchst 2 separate Inserts und
      • es gibt eine Funktion, die den letzten generierten Wert einer auto_increment liefert
      • damit es immernoch atomar abläuft wurden Transaktionen erfunden
      PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

      Kommentar


      • #4
        Bei MySQL kannst du als Index "id int primary key auto_increment" verwenden, dabei musst du die ID nicht selbst einfügen sondern das macht MySQL von alleine. Die ID bekommst du dann über $last_insert_id/mysql_insert_id() oä. Am besten schaust du dir ein PHP-SQL-Tutorial an.

        http://www.php-einfach.de/einf_mysql.php

        Kommentar


        • #5
          ... nicht nett einen User der Verwendung von mysql_* zu ermutigen. Zeige lieber Beispiele für PDO (oder mysqli)
          Standards - Best Practices - AwesomePHP - Guideline für WebApps

          Kommentar


          • #6
            @rkr,

            du kannst ja deinen "Standard-Text" posten, der sagt ja alles

            LG
            https://github.com/Ma27
            Javascript Logic is funny:
            [] + [] => "", [] + {} => object, {} + [] => 0, {} + {} => NaN

            Kommentar


            • #7
              tkausl hat ja schon die TL;DR-Version gepostet...
              Standards - Best Practices - AwesomePHP - Guideline für WebApps

              Kommentar


              • #8
                Das wollte ich eigentlich mit dem $last_insert_id andeuten, auch wenns tatsächlich $pdo->lastInsertId() bzw $mysqli->InsertId ist. Und das Tutorial ist halt schon ein bisschen älter, aber sollte trotzdem noch fürs allgemeine Verständnis reichen

                Kommentar

                Lädt...
                X