Announcement

Collapse
No announcement yet.

PHP Fremdschlüssel korrekt ausgeben

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • PHP Fremdschlüssel korrekt ausgeben

    Hi, nach schon langer Suche, wo ich immer nur gefunden habe wie man Fremdschlüssel anlegt, aber nicht wie man sie ausgibt, habe ich nun beschlossen einfach zu fragen:

    Also wie gibt man folgenden Fremdschlüssel richtig aus?
    Code:
    CREATE TABLE `family_names` (
      `id` int(11) NOT NULL,
      `familyname` varchar(40) character set latin1 default NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;
    
    
    CREATE TABLE `family_members` (
      `id` int(11) NOT NULL,
      `surname` varchar(40) character set latin1 default NULL,
      `family_id` int(11) default NULL,
      `gbdatum` varchar(15) character set latin1 default NULL,
      `adress` varchar(50) character set latin1 default NULL,
      `telefon` varchar(40) character set latin1 default NULL,
      `fax` varchar(40) character set latin1 default NULL,
      `email` varchar(50) character set latin1 default NULL,
      `products` varchar(255) character set latin1 default NULL,
      PRIMARY KEY  (`id`),
      KEY `family_id` (`family_id`),
      CONSTRAINT `family_members` FOREIGN KEY (`family_id`) REFERENCES `family_names` (`id`) ON DELETE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;
    Und das ist der PHP-Code womit ich die Adressen ausgebe. Was auch an sich klappt, jedoch erscheint da nur die Zahlen die er ja eigentlich durch den Fremdschlüssel ersetzen soll, z.B. Kommt da statt 'Mustermann' einfach eine 1 bzw. 2 oder 3.
    PHP Code:
    <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
        <title>Adressdatenbank</title>
        <style type="text/css" media="all">
          /*<![CDATA[*/  
          @import url(format.css);
          /*]]>*/
        </style>
      </head>
      <body>
      <div>
      <h1>Adressliste</h1>
      <p>Folgende Einträge sind bereits in der Datenbank vorhanden:</p>
    <?php
    include("db_connect1.inc.php");

    $col1 "#CCCCCC"
      
    $col2 "#FFFFFF";

    if(@
    mysql_connect($host$user$pwd)) {
      if(@
    mysql_select_db($dbname)) {
        
    $erg = @mysql_query("SELECT id, surname, family_id, gbdatum, adress, telefon, fax, email, products FROM family_members");
        if (
    $erg) {
        

        
                echo 
    "<table border=2 >\n";
                echo 
    "<tr bgcolor=\"FF66CC\">\n";
                echo 
    "<th>Eintrag-ID</th><th>Vorname</th><th>Nachname</th><th>Geburtsdatum</th><th>Anschrift</th>"
                        
    ."<th>Telefon</th><th>Fax</th><th>E-Mail</th><th>Produkte</th>\n";
                echo 
    "</tr>\n";
                
        for(
    $num=0$num 20$num++) {  
            
    $color = ($color == $col1) ? $col2 $col1
        }
                while(
    $row mysql_fetch_row($erg)) {
                    echo 
    "<tr bgcolor=\"$color\">\n";
                    for(
    $i=0$i<mysql_num_fields($erg); $i++) {
                        
                        
                        
                        switch (
    $i) {
                            case 
    3:
                                if(
    $row[$i] == NULL) {
                                    echo 
    "<td><center> -   </center></td>\n";
                                
                                }
                                else {
                                    echo 
    "<td>  $row[$i]  </td>\n";
                                }
                                break;
                            case 
    7:
                                    echo 
    "<td><a href=\"mailto:" $row[$i]
                                        . 
    "\">" $row[$i] . "</a></td>\n";
                                break;
                            default:
                                echo 
    "<td>"  $row[$i] . "</td>\n";
                      } 
                    }
                    echo 
    "</tr>\n";
                }
                echo 
    "</table>\n";
            }
            else
              echo 
    "<h5>Es konnten keine Datens&auml;tze gefunden "
                     
    "werden.</h5>\n";
        }
        else
            echo 
    "<h5>Verbindung zur Datenbank ist im Moment nicht m&ouml;glich!</h5>\n";
        
        
    mysql_close();
    }
    else
        echo 
    "<h5>Der Server ist wegen Wartungsarbeiten "
                    
    "vor&uuml;bergehend nicht erreichbar.</h5>\n";
    ?>
         <hr />
        <p><a href="index.html">Zur&uuml;ck zur Haupt&uuml;bersicht</a></p>
        </div>
      </body>
    </html>
    Wie gebe ich nun das korrekt aus?

  • #2
    Hallo,

    Fremdschlüssel dienen in erster Linie zur Sicherstellung Referentieller Integrität. Sie dienen in keiner Weise der automatischen Ersetzung von Schlüsselwerten durch Referenzen. (Dieses Verhalten wird maximal durch Programme oder Frameworks nachgebildet.)

    Wenn du in der Ausgabe statt der family_id lieber den familyname haben möchtest, dann mußt du das auch so selektieren. Dafür verwendet man s.g. JOINs

    Für dein konkretes Bsp.:
    [highlight=sql]
    SELECT fm.id, fm.surname, fn.familyname, fm.gbdatum,
    fm.adress, fm.telefon, fm.fax, fm.email, fm.products
    FROM family_members fm
    inner join family_names fn on fn.id = fm.family_id
    [/highlight]

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      ah danke dir!

      Comment

      Working...
      X