tutorials.de Buch-Aktion 05/2012
Seite 1 von 3 123 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
31
ZUGRIFFE
8238
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Hektik
    Hektik Hektik ist offline Mitglied Brokat
    Registriert seit
    May 2004
    Ort
    Kleve (NRW)
    Beiträge
    300
    Hallo liebe Tutorials.de-Gemeinde!

    Da ich zurzeit eine Webseite für einen DJ mit PHP realisiere, bin ich auf ein, für mich jedenfalls, sehr interessantes Thema gestoßen.

    Ebenjener DJ möchte gerne "monthly charts" auf seiner Seite haben, seine liebsten Stücke, und die in Form einer Charts-Tabelle präsentieren. Ich denke, sowas hat bestimmt schon jeder auf VIVA.TV oder ähnlichem gesehen.

    Anfänglich wollte ich das einfach mit einem 20 mal 2 Inputfelder-Formular lösen, halt 20 Plätze und jeweils eins für den Rang und eins für das Lied. Anschließend hätte ich die Einträge dann sortiert nach Rang ausgegeben.

    Ich halte das jedoch für eine "gefrickelte" Lösung, ein krummes Hinbiegen. Zudem weiß ich auch nicht, wie sich so eine Chart-Tabelle wie auf Viva generiert, also, wie das z.b. gemacht wird, dass die Vorwoche im Vergleich berechnet wird usw.

    Kann mir da mal einer das System erklären? Und vielleicht, wenn er schon was kennt, ein wenig Code posten? Google und die Forensuche haben mich nur eine unnütze halbe Stunde gekostet.

    Aber auch einfach eine Anregung, eine Idee zur Vorgehensweise wäre super

    Ziel ist es, dem DJ später über ein Formular (in welcher Form auch immer) die Möglichkeit zu geben, unkompliziert und ohne großen Aufwand seine Charts aktuell zu halten.

    Bis hier hin erst einmal ein "Danke" für das lesen meines Threads

    Thread frei!
     

  2. #2
    kne kne ist offline Mitglied Bronze
    Registriert seit
    Mar 2006
    Beiträge
    45
    Hallo.
    Du kannst doch ne ganz normale Tabelle erstellen.
    Und die füllt dann der DJ mit den Daten.
    Und über ein Formular kann er die dann immer beliebig ändern?!

    Ich würde es mir nicht so schwer machen.

    //Kne
     

  3. #3
    Avatar von Dennis Wronka
    Dennis Wronka Dennis Wronka ist offline Soulcollector
    Registriert seit
    Apr 2002
    Ort
    Hong Kong
    Beiträge
    12.296
    Blog-Einträge
    231
    Ich koennte mir das so vorstellen:
    Bei weniger als 20 bestehenden Eintraegen wird bis 20 mit Input-Feldern aufgefuellt.
    Bestehende Eintraege koennen einfach hoch und runter geschoben werden und natuerlich auch editiert werden.
     
    PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
    Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
    __________________
    EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
    EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
    __________________
    Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
    __________________
    Zitat Zitat von Friedrich Nietzsche
    Man muss noch Chaos in sich haben, um einen tanzenden Stern gebaeren zu koennen.

  4. #4
    Avatar von Hektik
    Hektik Hektik ist offline Mitglied Brokat
    Registriert seit
    May 2004
    Ort
    Kleve (NRW)
    Beiträge
    300
    Zitat Zitat von kne
    Hallo.
    Du kannst doch ne ganz normale Tabelle erstellen.
    Und die füllt dann der DJ mit den Daten.
    Und über ein Formular kann er die dann immer beliebig ändern?!

    Ich würde es mir nicht so schwer machen.

    //Kne
    Die Idee hatte ich ja schon... Je mehr Gedanken ich mir mache, desto mehr fallen mir Gründe ein, die gegen eine andere Lösung sprechen...

    Zitat Zitat von Dennis Wronka
    Ich koennte mir das so vorstellen:
    Bei weniger als 20 bestehenden Eintraegen wird bis 20 mit Input-Feldern aufgefuellt.
    Bestehende Eintraege koennen einfach hoch und runter geschoben werden und natuerlich auch editiert werden.
    Das auffüllen ist ne super Idee. Hätte ich garnicht dran gedacht *hihi* Einziger Knackpunkt deiner Lösung: Hab über das "verschieben" von Positionen schon öfter mal geknobelt, hab aber leider nie auch nur ansatzweise eine Idee gehabt, wie ich das lösen soll. Mein Problem wäre dabei: wenn ich Platz 1 runterschiebe, dann hab ich Platz 2 doppelt. Also muss ich dafür sorgen, dass Platz 2 hochgeschoben wird. Und da hörts dann auch schon auf, weil ich nicht weiß, wo und wie ich da anfangen soll. Wahrscheinlich ist die Lösung aber sooo einfach, dass ich einfach nicht drauf komme, wie damals mit "<font color:"black"> funktioniert nicht, warum?" Schäme mich heute noch für den Doppelpunkt
     

  5. #5
    Avatar von Dennis Wronka
    Dennis Wronka Dennis Wronka ist offline Soulcollector
    Registriert seit
    Apr 2002
    Ort
    Hong Kong
    Beiträge
    12.296
    Blog-Einträge
    231
    Ich schau mal nach, vielleicht hab ich fuer die Verschieberei irgendwo ein Beispiel rumfliegen.
     
    PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
    Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
    __________________
    EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
    EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
    __________________
    Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
    __________________
    Zitat Zitat von Friedrich Nietzsche
    Man muss noch Chaos in sich haben, um einen tanzenden Stern gebaeren zu koennen.

  6. #6
    Registriert seit
    Mar 2005
    Ort
    Bühl/Baden
    Beiträge
    2.330
    Mach das ganze nicht mit 1, 2, 3, 4 usw, sondern mit einer Extraspalte (hier: chart_order) in der 10, 20, 30, 40, usw. steht.
    Wenn du dann sagt, gehe von Platz 1 auf 2, zählst du zum Platz 1 (1 = 10) einfach 15 dazu. Somit sind wir bei 25. Also 5 mehr als Platz 2. Umgekehrt natürlich 15 abziehen.

    Dann kommt diese Funktion zum Einsatz.
    PHP-Code:
    <?
    function reorder()
    {
        
    $sql "SELECT * FROM `charts` ORDER BY chart_order ASC";
        
    $result mysql_query($sql) or die(mysql_error());

        
    $i 1;
        
    $j 10;

        while( 
    $row mysql_fetch_assoc($result) )
        {
            
    $sql "UPDATE `charts`
                SET `chart_order` = "
    .$j.",
                SET `chart_place` = "
    .$i."
                WHERE `id` = "
    .$row['id'];
            
    mysql_query($sql) or die(mysql_error());

            
    $j += 10;
            
    $i++;
        }

    }
    ?>
    Ich habe jetzt folgende Spalten in der Tabelle 'charts' verwendet.
    id = ID des Eintrages. bleibt immer gleich (auto_increment? !)
    chart_order = Die Position in der Chartliste
    chart_place = Chartplatz (Könnte man auch weglassen, wenn man nach chart_order geht, kommt man aus gleiche. Muss dann halt etwas anders bei der Ausgabe vorgehen.)

    Ich hoffe, dass ich keinen Denkfehler in dem Script habe.
    Geändert von fanste (06.04.06 um 17:33 Uhr)
     
    Gruß fanste

    Benutze bitte immer die passende Highlight-Tags.(z.B: für PHP [php] [/php] Allgemein: [highlight=SCRIPTSPRACHE]Code[/highlight] )

    Problem gelöst? Dann markiere das Thema bitte als erledigt!
    Beachte bitte die Netiquette. Insbesondere Punkt 15.

  7. #7
    Avatar von Hektik
    Hektik Hektik ist offline Mitglied Brokat
    Registriert seit
    May 2004
    Ort
    Kleve (NRW)
    Beiträge
    300
    Zitat Zitat von fanste
    Mach das ganze nicht mit 1, 2, 3, 4 usw, sondern mit einer Extraspalte (hier: chart_order) in der 10, 20, 30, 40, usw. steht.
    Wenn du dann sagt, gehe von Platz 1 auf 2, zählst du zum Platz 1 (1 = 10) einfach 15 dazu. Somit sind wir bei 25. Also 5 mehr als Platz 2. Umgekehrt natürlich 15 abziehen.

    Dann kommt diese Funktion zum Einsatz.
    PHP-Code:
    <?
    function reorder()
    {
        
    $sql "SELECT * FROM `charts` ORDER BY chart_order ASC";
        
    $result mysql_query($sql) or die(mysql_error());

        
    $i 1;
        
    $j 10;

        while( 
    $row mysql_fetch_assoc($result) )
        {
            
    $sql "UPDATE `charts`
                SET `chart_order` = "
    .$j.",
                SET `chart_place` = "
    .$i."
                WHERE `id` = "
    .$row['id'];
            
    mysql_query($sql) or die(mysql_error());

            
    $j += 10;
            
    $i++;
        }

    }
    ?>
    Ich habe jetzt folgende Spalten in der Tabelle 'charts' verwendet.
    id = ID des Eintrages. bleibt immer gleich (auto_increment? !)
    chart_order = Die Position in der Chartliste
    chart_place = Chartplatz (Könnte man auch weglassen, wenn man nach chart_order geht, kommt man aus gleiche. Muss dann halt etwas anders bei der Ausgabe vorgehen.)

    Ich hoffe, dass ich keinen Denkfehler in dem Script habe.
    Wenn ich nach dem Beispiel Platz 1 (10) auf Platz 2 verschiebe (10+15=25) und dann Platz 4 (40) auf Platz 3 (40-15=25) verschiebe, haben beide den Wert 25. Geht also auch nicht so richtig :/
     

  8. #8
    Avatar von Dennis Wronka
    Dennis Wronka Dennis Wronka ist offline Soulcollector
    Registriert seit
    Apr 2002
    Ort
    Hong Kong
    Beiträge
    12.296
    Blog-Einträge
    231
    So, hier mal ein Beispiel.
    Ich weiss, dass es nicht gerade das verstaendlichste Beispiel ist was jetzt moeglich waere, aber grad das einzige was ich zur Hand habe.
    Code php:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    if (($_GET['action']=="up") && (isset($_GET['chain'])) && (isset($_GET['rule'])))
        {
            $chain_copy=$fw_chain_{$chains[$_GET['chain']]};
            $chain_copy[$_GET['rule']-1]=$fw_chain_{$chains[$_GET['chain']]}[$_GET['rule']];
            $chain_copy[$_GET['rule']]=$fw_chain_{$chains[$_GET['chain']]}[$_GET['rule']-1];
            $fw_chain_{$chains[$_GET['chain']]}=$chain_copy;
            unset($chain_copy);
        }
    if (($_GET['action']=="down") && (isset($_GET['chain'])) && (isset($_GET['rule'])))
        {
            $chain_copy=$fw_chain_{$chains[$_GET['chain']]};
            $chain_copy[$_GET['rule']+1]=$fw_chain_{$chains[$_GET['chain']]}[$_GET['rule']];
            $chain_copy[$_GET['rule']]=$fw_chain_{$chains[$_GET['chain']]}[$_GET['rule']+1];
            $fw_chain_{$chains[$_GET['chain']]}=$chain_copy;
            unset($chain_copy);
        }
    Auf jeden Fall sieht das so aus:
    Du legst alle Eintraege in einem Array ab. Platz 1 hat dann Index 0, Platz 20 hat den Index 19.
    Wenn nun ein Eintrag verschoben werden soll legst Du eine Kopie des Arrays an.
    Soll ein Eintrag nach oben geschoben werden setzt Du in der Kopie den Eintrag $x-1 ($x ist jetzt mal der Index des zu verschiebenden Eintrages) auf den Wert in Index $x des Originalarrays und Eintrag $x setzt Du auf den Wert in Index $x-1 des Originalarrays.
    Wenn nach unten verschoben werden soll ist halt $x-1 durch $x+1 zu ersetzen.
    Anschliessend ueberschreibst Du den Original-Array durch die veraenderte Kopie und schon hast Du die neue Reihenfolge.
     
    PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
    Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
    __________________
    EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
    EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
    __________________
    Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
    __________________
    Zitat Zitat von Friedrich Nietzsche
    Man muss noch Chaos in sich haben, um einen tanzenden Stern gebaeren zu koennen.

  9. #9
    Registriert seit
    Mar 2005
    Ort
    Bühl/Baden
    Beiträge
    2.330
    Doch, das geht. Nach jedem mal ändern musst du natürlich die Funktion aufrufen. Also immer die DB aktuallisieren, bevor du nen neuen Datensatz verschiebst.

    So wie ich das sehe, ist es bei Dennis nicht anders. Da muss man auch nach jedem verschieben die Seite neu aufrufen.
    Geändert von fanste (07.04.06 um 14:49 Uhr)
     
    Gruß fanste

    Benutze bitte immer die passende Highlight-Tags.(z.B: für PHP [php] [/php] Allgemein: [highlight=SCRIPTSPRACHE]Code[/highlight] )

    Problem gelöst? Dann markiere das Thema bitte als erledigt!
    Beachte bitte die Netiquette. Insbesondere Punkt 15.

  10. #10
    Avatar von Hektik
    Hektik Hektik ist offline Mitglied Brokat
    Registriert seit
    May 2004
    Ort
    Kleve (NRW)
    Beiträge
    300
    Zitat Zitat von Dennis Wronka
    So, hier mal ein Beispiel.
    Ich weiss, dass es nicht gerade das verstaendlichste Beispiel ist was jetzt moeglich waere, aber grad das einzige was ich zur Hand habe.
    Code php:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    if (($_GET['action']=="up") && (isset($_GET['chain'])) && (isset($_GET['rule'])))
        {
            $chain_copy=$fw_chain_{$chains[$_GET['chain']]};
            $chain_copy[$_GET['rule']-1]=$fw_chain_{$chains[$_GET['chain']]}[$_GET['rule']];
            $chain_copy[$_GET['rule']]=$fw_chain_{$chains[$_GET['chain']]}[$_GET['rule']-1];
            $fw_chain_{$chains[$_GET['chain']]}=$chain_copy;
            unset($chain_copy);
        }
    if (($_GET['action']=="down") && (isset($_GET['chain'])) && (isset($_GET['rule'])))
        {
            $chain_copy=$fw_chain_{$chains[$_GET['chain']]};
            $chain_copy[$_GET['rule']+1]=$fw_chain_{$chains[$_GET['chain']]}[$_GET['rule']];
            $chain_copy[$_GET['rule']]=$fw_chain_{$chains[$_GET['chain']]}[$_GET['rule']+1];
            $fw_chain_{$chains[$_GET['chain']]}=$chain_copy;
            unset($chain_copy);
        }
    Auf jeden Fall sieht das so aus:
    Du legst alle Eintraege in einem Array ab. Platz 1 hat dann Index 0, Platz 20 hat den Index 19.
    Wenn nun ein Eintrag verschoben werden soll legst Du eine Kopie des Arrays an.
    Soll ein Eintrag nach oben geschoben werden setzt Du in der Kopie den Eintrag $x-1 ($x ist jetzt mal der Index des zu verschiebenden Eintrages) auf den Wert in Index $x des Originalarrays und Eintrag $x setzt Du auf den Wert in Index $x-1 des Originalarrays.
    Wenn nach unten verschoben werden soll ist halt $x-1 durch $x+1 zu ersetzen.
    Anschliessend ueberschreibst Du den Original-Array durch die veraenderte Kopie und schon hast Du die neue Reihenfolge.
    Hi Dennis

    Deine Beschreibung habe ich verstanden und ich denke, dass ich das mit ein wenig basteln auch hinbekommen würde. Dein Codebeispiel hat mir jedoch definitiv zu viele "chains" *lach* Aber ich setz mich da mal dran
     

  11. #11
    Avatar von Dennis Wronka
    Dennis Wronka Dennis Wronka ist offline Soulcollector
    Registriert seit
    Apr 2002
    Ort
    Hong Kong
    Beiträge
    12.296
    Blog-Einträge
    231
    Das liegt daran, dass das ein Ausschnitt aus meinem Firewall-Admin-Script ist.
    Aber es freut mich, dass es Dir auf die Spruenge geholfen hat.
     
    PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
    Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
    __________________
    EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
    EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
    __________________
    Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
    __________________
    Zitat Zitat von Friedrich Nietzsche
    Man muss noch Chaos in sich haben, um einen tanzenden Stern gebaeren zu koennen.

  12. #12
    Avatar von Hektik
    Hektik Hektik ist offline Mitglied Brokat
    Registriert seit
    May 2004
    Ort
    Kleve (NRW)
    Beiträge
    300
    Also, ich hab mich jetzt für die Version von Fanste entschieden (Sry Dennis :P ).
    Jetzt hab ich aber ein Problem bei der Ausgabe: Wenn ich die Top20 habe, und dann sortieren lasse, erhalte ich ja den Rang als Zahl. Bei der Ausgabe setzt er mir aber Rang 11, 12, 13 usw VOR Rang 2, d.h. er sortiert alphabetisch. Wie krieg ichs hin, das er eine "normale" Reihenfolge einhält?
    Geändert von Hektik (02.05.06 um 15:04 Uhr)
     

  13. #13
    Registriert seit
    Mar 2005
    Ort
    Bühl/Baden
    Beiträge
    2.330
    Wie sortierst du denn? Per MySql, oder einer PHP Funktion?

    Dieser Code würde bei mir richtig sortieren. (PHP Funktion)
    PHP-Code:
    <?
    $ar 
    = array(23112341013123517);

    print_r($ar);
    sort($ar);
    print_r($ar);
    ?>
    Wenn nach Keys sortiert werden soll, musst du ksort() nehmen.


    Bei MySql dürfte es nicht viel anders sein.

    Code sql:
    1
    
    SELECT * FROM tabelle ORDER BY spalte ASC
     
    Gruß fanste

    Benutze bitte immer die passende Highlight-Tags.(z.B: für PHP [php] [/php] Allgemein: [highlight=SCRIPTSPRACHE]Code[/highlight] )

    Problem gelöst? Dann markiere das Thema bitte als erledigt!
    Beachte bitte die Netiquette. Insbesondere Punkt 15.

  14. #14
    Avatar von Dennis Wronka
    Dennis Wronka Dennis Wronka ist offline Soulcollector
    Registriert seit
    Apr 2002
    Ort
    Hong Kong
    Beiträge
    12.296
    Blog-Einträge
    231
    Die koenntest mittels sprintf() alle Zahlen auf eine bestimmte Laenge formatieren, also, dass bei Bedarf fuehrende Nullen eingefuegt werden. Dann sollte die Sortierung kein Problem darstellen.

    Und es stoert mich nicht, dass Du Dich nicht fuer meine Loesung entschieden hast. Ich muss ja nicht immer mit der besten Loesung um die Ecke kommen. Vor allem weil ja mein Vorschlag ja auch nicht individuell zusammengestrickt sondern nur fix aus einem fertigen Script rauskopiert war.
     
    PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
    Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
    __________________
    EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
    EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
    __________________
    Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
    __________________
    Zitat Zitat von Friedrich Nietzsche
    Man muss noch Chaos in sich haben, um einen tanzenden Stern gebaeren zu koennen.

  15. #15
    Registriert seit
    Mar 2005
    Ort
    Bühl/Baden
    Beiträge
    2.330
    Meine war auch nicht frisch zusammengestrickt. Einfach aus meinem Forum rausgerissen. Hat aber seinen Zweck erfüllt, so wie es aussieht.
     
    Gruß fanste

    Benutze bitte immer die passende Highlight-Tags.(z.B: für PHP [php] [/php] Allgemein: [highlight=SCRIPTSPRACHE]Code[/highlight] )

    Problem gelöst? Dann markiere das Thema bitte als erledigt!
    Beachte bitte die Netiquette. Insbesondere Punkt 15.

Ähnliche Themen

  1. Suche Software zum Erstellen von Charts und Diagrammen
    Von Transmitter im Forum Office-Anwendungen
    Antworten: 0
    Letzter Beitrag: 20.09.08, 21:59
  2. Musik verwalten
    Von C-H im Forum Audiotechnik, Recording & Audio-Software
    Antworten: 7
    Letzter Beitrag: 06.05.08, 03:48
  3. Antworten: 5
    Letzter Beitrag: 04.03.05, 13:46
  4. selbstverwaltende Abstimmung (z.B. Musik-Charts)
    Von Grumph im Forum HTML & XHTML
    Antworten: 3
    Letzter Beitrag: 19.04.04, 14:01