ilch Forum » Allgemein » HTML, PHP, SQL,... » Dynamische MySql Befehle

Geschlossen
  1. #1
    User Pic
    Malcolm Mitglied
    Registriert seit
    09.08.2012
    Beiträge
    14
    Beitragswertungen
    0 Beitragspunkte
    Hallo,
    ich könnte da mal eure Hilfe gebrauchen. Hat zwar grundsätzlich noch nichts mit dem Clanscript zu tun aber ich hoffe ihr helft trotzdem. Will das auf Dauer wahrscheinlich in den Adminbereich unserer Seite einbauen.
    Mein Problem ist folgendes:
    Ich möchte eine Datenbank mit Interpreten und deren Genre anlegen. Da einige Interpreten ja mehrere verschiedene Genres bedienen, muss das auch so eingetragen werden.
    Die DB Struktur ist folgende:

        CREATE TABLE interpret (
        ID INT AUTO_INCREMENT PRIMARY KEY,
        interpret VARCHAR(100) NOT NULL,
        genre1 VARCHAR(20) NOT NULL, 
        genre2 VARCHAR(20), 
        genre3 VARCHAR(20), 
        genre4 VARCHAR(20), 
        genre5 VARCHAR(20), 
        genre6 VARCHAR(20), 
        genre7 VARCHAR(20), 
        genre8 VARCHAR(20), 
        genre9 VARCHAR(20), 
        genre10 VARCHAR(20), 
        genre11 VARCHAR(20), 
        genre12 VARCHAR(20), 
        genre13 VARCHAR(20), 
        genre14 VARCHAR(20))


    Eingetragen wird das ganze über folgendes Formular:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
           "http://www.w3.org/TR/html4/strict.dtd">
    <html>
    <head>
    <title>Interpreten eintragen</title>
    </head>
    <body>
    <h1>Interpreten eintragen</h1>
    
    <form action="interpret_eintragen.php" method="post">
      <p>Interpret<br><input name="name" type="text" size="30" maxlength="100"></p>
      <br>Genre:<br>
       <input type="checkbox" name="genre[]" value="Rock"> Rock<br>
       <input type="checkbox" name="genre[]" value="Pop"> Pop<br>
       <input type="checkbox" name="genre[]" value="A-Capella"> A-Capella<br>
       <input type="checkbox" name="genre[]" value="Alternative"> Alternative<br>
       <input type="checkbox" name="genre[]" value="R&B"> R&amp;B<br>
       <input type="checkbox" name="genre[]" value="Jazz"> Jazz<br>
       <input type="checkbox" name="genre[]" value="Soul"> Soul<br>
       <input type="checkbox" name="genre[]" value="Volksmusik"> Volksmusik<br>
       <input type="checkbox" name="genre[]" value="HipHop"> HipHop<br>
       <input type="checkbox" name="genre[]" value="Klassik"> Klassik<br>
       <input type="checkbox" name="genre[]" value="Trance">Trance<br>
       <input type="checkbox" name="genre[]" value="House"> House<br>
       <input type="checkbox" name="genre[]" value="Techno"> Techno<br>
       <input type="checkbox" name="genre[]" value="Metall"> Metall<br>
       <?php
    $zahl1 = rand(1,10);
    $zahl2 = rand(1,10);
    $summe = $zahl1+$zahl2;
    echo 'Tragen sie hier das Ergebnis der Rechnung ein:<br>';
    echo $zahl1; echo  '+'; echo $zahl2; echo '<br>';
    echo '<input type="hidden" name="summe" value="'.$summe.'">';
    echo '<input type="text" name="ergebnis">'; ?>
       <input type="submit" value=" Absenden ">
       <input type="reset" value=" Abbrechen">
    </form>
    
    </body>
    </html>


    Nun mein Problem kommt in der letzten Datei wo ich alles verarbeite:
    <?PHP
    mysql_connect("localhost", "nutzername", "pass") or die(mysql_error());
    mysql_select_db("interpreten") or die(mysql_error());
    $summe = $_POST['summe'];
    $ergebnis = $_POST['ergebnis'];
    $genre = $_POST['genre'];
    $name = $_POST['name'];
    
    if($summe==$ergebnis) 
     {           
       $genrezahl=count ($genre);
       echo $name;
       echo '<br>';
       $i = 0;
       while($i < count($genre))
          {
          echo $genre[$i]."<br>";
          $i++;
          }
    
     }
    
    else
    {                
    echo 'Dein Ergebnis is leider Falsch.<br>Versuche es noch einmal!';    
    }
    
    
    ?>




    Mir fehlt momentan jeder Ansatz wie ich die Eingaben nun in die Datenbank eintragen soll... Es wird nie ein Interpret alle Genres haben... wie gesagt mir fehlt komplett der Ansatz ob ich die DB anders strukturieren sollte oder das ganze Formular anders gestalten muss. Ziel des ganzen soll es sein, dass in der DB die Interpreten und jedes Genre in eine eigene Spalte sein sollen...

    Danke schonmal im vorraus:)


    Zuletzt modifiziert von Malcolm am 12.08.2012 - 03:09:40
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    Mikro Mitglied
    Registriert seit
    05.10.2011
    Beiträge
    237
    Beitragswertungen
    21 Beitragspunkte
    Ich hab schon viel solche Sachen für Radiosender usw. gemacht.
    Erstmal würde ich Genre und Interpret in getrennten Tabellen machen.

    Also tabelle genre mit genre_name eventuell noch beschreibung und genere_id als autoincrement.

    Diese Tabelle dann dafür auslesen:
    <input type="checkbox" name="genre[genre_id]" value="genre_name">

    Ein feld für das eintragen wenn genre noch nicht vorhanden, wichtig ist die null es gibt keine ID mit 0 ,ist dann immer der erste wert im Array genre:
    <input name="genre[0]" type="text" size="30" maxlength="100">Genre NEU

    Die Genres dann immer zuerst eintragen in die Datenbank wenn neuer genre, dann mit mysql_insert_id() die null in genre[0] ersetzen mit dieser genre[mysql_insert_id()] danach unset(genre[0])

    Array genre[] ist fertig für Zuordnung.

    Tabelle Interpret:
    ID Name genre und was du halt noch haben willst.

    In der Spalte genre bei Interpret dann alle ID's und wirklich nur die ID's vom Array genre eintragen, und zwar mit serialize(genre). Und beim auslesen dann wieder die Spate genre unserialize($row->genre) dann ist es wieder ein Array.
    Oder halt in dem Format spalte genre bei Interpret 4,7,9,33 und dann wieder explode(",",$row->genre) ist noch besser .


    Dann kannst du so viele genres pro Interpret haben wie du willst, hoffe du konntest mir folgen.


    EDIT: Jo, auf alle fälle wirst du nicht um hin kommen mehrere Tabellen anzulegen, den anders ist es nicht sinnvoll und dynamisch zu lösen. Wenn du das was Mairu und ich geschrieben haben begriffen hast wird dir vieles leichter fallen zu Coden.


    Zuletzt modifiziert von Mikro am 12.08.2012 - 11:28:05
    Wer Rechtschreibfehler findet darf sie behalten!
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Noch richtiger (Normalisierung von Datenbanken) wäre eigentlich eine Kreuztabelle, also insgesamt 3 Tabellen.

    Interpret, Genre, Interpret_x_Genre

    Wobei in Interpret_x_Genre dann nur die Ids der beiden anderen Tabellen stehen, die zusammengehören. Sicher muss man für sich entscheiden, ob man das braucht, da es nicht unbedingt performanter sein muss.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    Malcolm Mitglied
    Registriert seit
    09.08.2012
    Beiträge
    14
    Beitragswertungen
    0 Beitragspunkte
    Danke für eure Antworten:) Irgendwie bin ich garnicht auf die Idee gekommen mehrere Tabellen zu nehmen, bin schon zu lang raus lachen
    Danke:) Werd das nun in den nächsten Tagen umsetzen.
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu HTML, PHP, SQL,...

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten