Ankündigung

Einklappen
Keine Ankündigung bisher.

Fremdschlüssel

Einklappen

Neue Werbung 2019

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

  • Fremdschlüssel

    Hi,

    vorweg: Ich bin noch Anfänger in PHP & MySQL.

    Ich habe zwei Datenbanken, für ein Shopsystem: Einmal eine Kundendatenbank und eine Benutzerdatenbank (die Struktur war vorgegeben).

    In der Kundendatenbank habe ich ein Kunden-ID als Primärschlüssel, die mit A_i erhöht wird. Diese soll nun auch in der Benutzerdatenbank als Primärschlüssel verwendet werden. Ich habe also in beiden Datenbanken einen KID-Wert erstellt, und mit PHPMyadmin über die Beziehungsübersicht bei der Benutzertabelle die KId von der Kundendaten-DB als auswärtiger Schlüssel (on delete restricted, on update cascade) eingestellt.

    Mein PHP sieht bisher so aus:
    PHP-Code:
      <?php
            $KName
    =$_POST['Name'];
            
    $KVorname=$_POST['Vorname'];
            
    $KKlasse=$_POST['Klasse'];
            
    $KEmail=$_POST['Email'];
            
    $KStrasse=$_POST['Strasse'];
            
    $KPlz=$_POST['PLZ'];
            
    $KOrt=$_POST['Ort'];
            
    $KTelefon=$_POST['Telefon'];

            
    $BName=$_POST['Benutzername'];
            
    $BPasswort=$_POST['Passwort']; // NYI: Passwort-Verschlüsselung

            
    require_once("verbindung.php");

            
    abfrage("INSERT INTO `kundendaten`(`KId`, `KName`, `KVorname`, `KKlasse`, `KEmail`, `KStrasse`, `KPlz`, `KOrt`, `KTelefon`) VALUES (NULL,'$KName','$KVorname','$KKlasse','$KEmail','$KStrasse','$KPlz','$KOrt','$KTelefon')");               abfrage("INSERT INTO `benutzerdaten`(`KId`, `BName`, `BPasswort`) VALUES (NULL,'$BName','$BPasswort')");
      
    ?>
    und die verbindung.php:
    PHP-Code:
    <?php
            
    function abfrage($query) {
                    
    $conn=mysqli_connect("localhost""root""passwort") or die(mysql_error());
                    
    $db=mysqli_select_db($conn"webshop") or die(mysql_error());
                    
    $GLOBALS['result']=mysqli_query($conn,$query) or die(mysql_error());
            }
    ?>

    Ich jetzt das Problem, dass die beiden KIds nicht gleich sind. Weiß jemand, wie ich das besser/überhaupt implementieren kann?`

    Danke im voraus.

  • #2
    Zitat von i7-2600k Beitrag anzeigen
    Hi,

    vorweg: Ich bin noch Anfänger in PHP & MySQL.

    Ich habe zwei Datenbanken, für ein Shopsystem: Einmal eine Kundendatenbank und eine Benutzerdatenbank (die Struktur war vorgegeben).
    Ich jetzt das Problem, dass die beiden KIds nicht gleich sind. Weiß jemand, wie ich das besser/überhaupt implementieren kann?`

    Danke im voraus.
    Mit einer gemeinsam genutzten Sequence. Kann MySQL aber nicht.
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Erst den Datensatz mit den Primärschlüssel einfügen, diesen Schlüssel mit LAST_INSERT_ID() holen und im nächsten Query als Fremdschlüssel verwenden.

      PHP-Code:
      abfrage("INSERT INTO ...")
      $id gib_mir_letzte_id(); //keine ahnung wie die funktion bei dir heißt
      abfrage("INSERT INTO ... (id, ...) VALUES (".$id.", ...)  "); 
      PS: Das nennt sich Tabellen und nicht Datenbanken. Und das solltest du unbedingt lesen und verstehen: http://de.wikipedia.org/wiki/SQL-Injection

      Kommentar


      • #4
        Zitat von erc Beitrag anzeigen
        Erst den Datensatz mit den Primärschlüssel einfügen, diesen Schlüssel mit LAST_INSERT_ID() holen und im nächsten Query als Fremdschlüssel verwenden.

        PHP-Code:
        abfrage("INSERT INTO ...")
        $id gib_mir_letzte_id(); //keine ahnung wie die funktion bei dir heißt
        abfrage("INSERT INTO ... (id, ...) VALUES (".$id.", ...)  "); 
        Vielen Dank, hat geklappt!

        Zitat von erc Beitrag anzeigen
        PS: Das nennt sich Tabellen und nicht Datenbanken.
        Stimmt natürlich...
        Zitat von erc Beitrag anzeigen
        Und das solltest du unbedingt lesen und verstehen: http://de.wikipedia.org/wiki/SQL-Injection
        Ja, ich bin mir der SQL-Injections durchaus bewusst. Aber der Shop soll sowieso nie wirklich genutzt werden, sondern ist mehr ein "learing-by-doing"-Projekt. Trotzdem danke für den Hinweis.

        Kommentar


        • #5
          Zitat von i7-2600k Beitrag anzeigen
          ist mehr ein "learning-by-doing"-Projekt.
          Ergo: Wenn du's nicht tust, lernst du's auch nicht.

          Kommentar

          Lädt...
          X