Lösungsansätze für meinen Script

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

  • Lösungsansätze für meinen Script

    Hi zusammen,

    ich beschäftige mich seit einige Monaten mit PHP und habe mich neben der Buchlektüre dazu entschlossen ein kleines Projekt zu erarbeiten um das Gelernte auch umzusetzten.

    Ich habe dafür meine DVD Sammlung als Ausgangspunkt genommen und mir eine kleine DB geschrieben wo ich die Filme, Schauspieler, Regisseure etc. erfassen kann.

    Soweit so gut. Die Hauptfunktionen der DB habe ich hingekriegt (Film anzeigen, suchen sortieren). Nun möchte ich aber noch gerne wissen welche Schauspieler in wie vielen Filmen mitgespielt haben. Dazu habe ich untenstehendes Script geschrieben, das mir die Schauspieler aus der DB liest und sie so gruppiert, dass mir angezeigt wird in wie vielen Filmen die Schauspieler mitgespielt haben. Hier mal das (funktionierende) Script:

    PHP-Code:

    <?

    include("inc/var.inc.php");
    include("inc/functions.inc.php");


    $db_table = "dvd";
    include("inc/connect.inc.php");

    //DB nnd Anzahl der Resultate abfragen

     mysql_select_db($db_table,$db);
      $result = mysql_query("SELECT id, schauspieler FROM $db_table");
    $anzahl = mysql_num_rows(mysql_query("SELECT id, schauspieler FROM $db_table"));

    // Array erstellen

    $str = array();


     while(list($id[],$schauspieler[]) = mysql_fetch_row($result));

     for($i=0; $i < $anzahl; $i++)
    {




    // Array schauspieler bei jedem Durchlauf in array str anhängen.

    array_push($str,$schauspieler[$i]);




        }


    // Datenbank schliessen

      $db_close = @MYSQL_CLOSE($db);




    $str = implode(", ", $str); //array in Zeichenkette umwandeln, um alle Teile zusammen zu fügen
    $str = explode(", ", $str); //Schauspieler in einzelne Arrays unterteilen

    // Funktion um Name und Vorname umzudrehen

    foreach($str as $key => $wert){
    $worte = explode(" ",$wert);

    // ¨berprüfen ob Schauspieler 2 Vornamen hat und diese entsprechend zusammensetzten

    if (isset($worte[2]))
    {

    $str[$key] = $worte[2]." ".$worte[0] . " " . $worte[1] ;
    }

    else
    {

    $str[$key] = $worte[1]." ".$worte[0];
    }
    }

    // Array sortieren

    natcasesort($str);

    // überprüfen ob $buchstabe übergeben wurde

    if(isset ($buchst))

    {

    // Tabelle erstellen für Ausgabe:

        echo "<table width=\"800\" border=\"0\">
      <tr>
        <td width=\"700\"><strong><u>Schauspieler</strong></u></td>
        <td width=\"100\"><b><u><div align=\"center\">Anzahl Filme</div></b></u></td>
      </tr>";
        
    // Array gruppieren
        
        $anz_darsteller = array_count_values($str);
    foreach($anz_darsteller as $darsteller=>$anzahl)
    {


    // überprüfen ob $darsteller mit dem übergebenen Buchstaben übereinstimmt

    if(eregi("^$buchst.*",$darsteller))
    {


    // Zeichenkette $darsteller auseinander nehmen und in Vor- und Nachname unterteilen

    $pos = strpos($darsteller, " ");
    $nn = substr($darsteller,0,$pos);

    $pos = $pos +1;

    $vn = substr($darsteller,$pos);

    // Ausgabe der Ergebnisse in Tabelle

    echo "<tr>
        <td width=\"700\">" . $vn . " " . $nn . "</td>
        <td width=\"100\"><a href='index.php?site=search&what=darsteller&search="
    .$vn ." ".$nn ."'><div align=\"center\">" 
    . $anzahl . "</div></a>
    </b></td></tr>";




    }
    }


    }

    else
    {

    // Meldung falls kein Buchstabe übergeben wurde.

    echo "Es wurde kein Buchstabe ausgewählt.";

    }

    echo "</table>";

    ?>
    Die Schauspieler sind in der DB als der Spalte schauspieler gespeichert und so erfasst: vorname nachname1, vorname nachname2, etc...


    Nun möchte ich gerne noch zwei Funktionen einbauen. Das übersteigt meinen Horizont in Sachen PHP leider doch etwas. Habe sehr viele Foren durchsucht und Tutorials angeschaut, verzweifle aber doch langsam daran.

    1. Möchte ich eine Meldung ausgeben, wenn es bei einem Buchstaben keine Schauspieler gibt. Ich weiss aber nicht wo ich das einbauen soll, denn bei allem was ich bis jetzt versucht habe, gibt er mir die Meldung immer bei allen Buchstaben aus und vor allem auch über der Ueberschriftstabelle.

    2. Möchte ich das Resultat nach circa 20 Einträgen seitenweise verteilen. Ich habe jetzt sicherlich jeden Thread in diesem (und anderen Foren) zum Thema "blättern" gelesen, aber keinen Ansatz gefunden wie ich das hier in meinem Script anwenden könnte.

    Ich wäre für jede Unterstützung bzw. Lösungshilfe dankbar.

    Gruss
    Michael

  • #2
    PHP-Code:
     $anz_darsteller array_count_values($str);
    foreach(
    $anz_darsteller as $darsteller=>$anzahl)
    {


    // überprüfen ob $darsteller mit dem übergebenen Buchstaben übereinstimmt

    if(eregi("^$buchst.*",$darsteller))

    Du hast hier ein paar variablen durcheinander geschmissen..

    die erste Zeile benötigst du nicht, da du im anschluss mit foreach arbeitest...

    foreach erwartet ein array...

    hier also foreach($str as $darsteller)

    denn jedes element von $str enthält genau einen darsteller...
    nun sollte es funktionieren....


    Insgesamt gibt es noch viele Stellen, die man einfach und eleganter lösen kann, aber für die ersten Gehversuche auf PHP nicht schlecht..

    greetz, high
    Good programming is 40% experience, 20% skill, 20% RTFM, 15% caffeine, and 5% attention to detail.
    When everything else fails, manipulate the data...
    Beschriftungen / Großformatdruck / Werbemittel

    Kommentar


    • #3
      Hallo High,

      danke für den Hinweis... aber:


      die erste Zeile benötigst du nicht, da du im anschluss mit foreach arbeitest...

      foreach erwartet ein array...

      hier also foreach($str as $darsteller)

      denn jedes element von $str enthält genau einen darsteller...
      nun sollte es funktionieren....
      ich benötige ja die Anzahl der Schauspieler also Schauspieler X spielt in *anzahl* Filmen mit. Wenn ich das weglasse Funktioniert die Zahlangabe nicht mehr.

      Habs dann mal trotzdem ohne das Versucht und nach der if anweisung mit einer else Anweisung "keine Schauspieler gefunden" ausgegeben. Also so:

      PHP-Code:
      if(eregi("^$buchst.*",$darsteller))
      {  
      //code von oben }
      else
      { echo 
      "Keine Schauspieler gefunden"; } 
      //code von oben 
      Es gibt mir dann trotzdem bei allen Buchstaben ein "Kein Schauspieler gefunden".

      Insgesamt gibt es noch viele Stellen, die man einfach und eleganter lösen kann, aber für die ersten Gehversuche auf PHP nicht schlecht..
      Danke dir . Bin natürlich auch für verbesserungsvorschläge offen. Nur aus Fehlern lernt man schliesslich.

      Gruss
      Michael

      Kommentar


      • #4
        und es ist auch klar warum.

        Das $-zeichen deliniert das ende der regexp also sucht es nach "^$"

        Du musst es entweder markieren oder besser so machen:

        eregi("^".$buchst.".*",$darsteller)

        noch besser wäre du würdest preg_match verwenden was schneller ist:

        preg_match("^".$buchst.".*",$darsteller)

        Kommentar

        Lädt...
        X