kostenloser Webspace werbefrei: lima-city


Hilfe zu deinem PHP Charts script

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    hansolo

    Kostenloser Webspace von hansolo

    hansolo hat kostenlosen Webspace.

    Hallo ihr lieben,

    bin derzeit mal wieder dabei einem Webradio mit einem Musik chart script zuhelfen.
    Das folgende Script habe ich bei www.tutorials.de gefunden und wollte es für das Webradio auch benutzen und weitere entwickeln, jedoch behindert es mich irgendwie.


    SQL Eintrag:
    -- 
    -- Tabellenstruktur für Tabelle `charts_lists`
    -- 
    
    CREATE TABLE `charts_lists` (
      `eintrag_id` int(10) unsigned NOT NULL auto_increment,
      `song_id` int(10) unsigned NOT NULL default '0',
      `platz` int(10) NOT NULL default '0',
      `woche` int(10) unsigned NOT NULL default '0',
      PRIMARY KEY  (`eintrag_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
    
    -- --------------------------------------------------------
    
    -- 
    -- Tabellenstruktur für Tabelle `charts_songs`
    -- 
    
    CREATE TABLE `charts_songs` (
      `song_id` int(10) unsigned NOT NULL auto_increment,
      `interpret` varchar(255) collate latin1_general_ci NOT NULL default '',
      `titel` varchar(255) collate latin1_general_ci NOT NULL default '',
      PRIMARY KEY  (`song_id`),
      UNIQUE KEY `unique_songs` (`interpret`,`titel`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;



    Skript zum Erstellen des Chartlistings (chartshow.php):
    <?php
    mysql_connect('localhost', 'foo', 'bar');
    mysql_select_db('test');
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml" lang="de">
    
    <head>
      <title>Chart Listing</title>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
      <style type="text/css">
        .neu { color: blue; }
        .aufsteiger { color: green; }
        .absteiger { color: red; }
        .gleich { color: gray; }
      </style>
    </head>
    
    <body>
    
    <table>
    <tr><th>Platz</th><th>+/-</th><th>Song</th></tr>
    <?php
    $woche = 0;
    
    if (isset($_GET['woche'])) {
        $woche = intval($_GET['woche']);
    }
    
    if ($woche <= 0) {
        // Wenn keine Wochenzahl übergeben wurde (oder eine ungültige), dann hole die Zahl
        // der aktuellsten Woche
        $woche = mysql_result(mysql_query('SELECT MAX(`woche`) FROM `charts_lists` LIMIT 1'), 0);
    }
    
    $result = mysql_query('
        SELECT 
            `diese_woche`.`platz`,
            (`letzte_woche`.`platz` - `diese_woche`.`platz`) AS `veraenderung`,
            `songs`.`interpret`,
            `songs`.`titel`
        FROM
            `charts_lists` AS `diese_woche`,
            `charts_songs` AS `songs`
        LEFT JOIN
            `charts_lists` AS `letzte_woche` ON (
                `letzte_woche`.`woche` = `diese_woche`.`woche` - 1 AND
                `letzte_woche`.`song_id` = `diese_woche`.`song_id`
            )
        WHERE
            `diese_woche`.`woche` = '.$woche.' AND
            `songs`.`song_id` = `diese_woche`.`song_id`
        ORDER BY
            `diese_woche`.`platz` ASC');
    
    while ($row = mysql_fetch_assoc($result)) {
        echo '<tr><td>'.$row['platz'].'</td>';
        if (is_null($row['veraenderung'])) {
            $class = 'neu';
            $row['veraenderung'] = 'NEU!';
        } elseif ($row['veraenderung'] > 0) {
            $class = 'aufsteiger';
            $row['veraenderung'] = '+'.$row['veraenderung'];
        } elseif ($row['veraenderung'] < 0) {
            $class = 'absteiger';
        } else {
            $class = 'gleich';
            $row['veraenderung'] = '&plusmn;0';
        }
        echo '<td class="'.$class.'">'.$row['veraenderung'].'</td>';
        echo '<td>'.htmlspecialchars($row['interpret'].' - '.$row['titel']).'</td>';
        echo '</tr>'."\n";
    }
    
    ?>
    </table>
    
    </body>
    
    </html>


    Skript zum Erstellen eines neuen Chartlistings und zum Eintragen neuer Songs (chartedit.php):
    <?php
    mysql_connect('localhost', 'foo', 'bar');
    mysql_select_db('test');
    
    function qstr($str) {
        return "'".mysql_real_escape_string($str)."'";
    }
    
    // Aktuelle Wochen-Nummer ist letzte Wochen-Nummer plus eins
    $woche = mysql_result(mysql_query('SELECT MAX(`woche`) FROM `charts_lists` LIMIT 1'), 0) + 1;
    // Anzahl der Plätze in den Charts
    $plaetze = 10;
    
    
    if (isset($_POST['addnew'])) {
        // Neue Chartliste eintragen, sofern der entsprechende Button gedrückt wurde
        $error = '';
    
        if (count($_POST['platz']) != $plaetze) {
            $error = 'Formulardaten ungültig!';
        } elseif (count(array_unique($_POST['platz'])) != $plaetze) {
            $error = 'Doppelte Einträge sind nicht möglich!';
        } else {
    
            $values = array();
    
            foreach ($_POST['platz'] as $platz => $song_id) {
                if (intval($song_id) == 0) {
                    $error = 'Jeder Platz muss mit einem Song belegt sein!';
                    break;
                }
                $values[] = '('.intval($song_id).', '.intval($platz).', '.$woche.')';
            }
    
    
            if (empty($error)) {
                $query = '
                    INSERT INTO `charts_lists` (`song_id`, `platz`, `woche`)
                    VALUES '.join(', ', $values);
                mysql_query($query) or die($query.mysql_error());
                header('Location: chartedit.php');
            }
        }
    
        if (!empty($error)) {
            echo htmlentities($error);
        }
    }
    
    if (isset($_POST['addsong'])) {
        // Neuen Song in die Datenbank einfügen
        $result = mysql_query('
            INSERT INTO    `charts_songs` (`interpret`, `titel`)
            VALUES ('.qstr($_POST['interpret']).', '.qstr($_POST['titel']).')'
        );
    
        echo '<p>&quot;'.htmlentities($_POST['interpret'].' - '.$_POST['titel']).'&quot ';
    
        if ($result) {
            // Alles ok, neuer Eintrag wurde erstellt
            echo 'hinzugef&uuml;gt!';
        } else {
            // Duplikat
            echo 'bereits vorhanden!';
        }
    
        echo '</p>';
    }
    
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml" lang="de">
    
    <head>
      <title>Chart Editing</title>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>
    
    <body>
    
    <table>
    <form action="chartedit.php" method="post">
    
    <h2>Charts erstellen</h2>
    
    <table>
    <tr><th>Platz</th><th>Song</th><th>Aktion</th></tr>
    <?php
    
    $songs = array(0 => '(kein Eintrag)');
    
    // Songliste holen und in Array $songs schreiben
    $result = mysql_query('SELECT `song_id`, `interpret`, `titel` FROM `charts_songs` ORDER BY `interpret`, `titel`');
    while ($row = mysql_fetch_assoc($result)) {
        $songs[$row['song_id']] = htmlentities($row['interpret'].' - '.$row['titel']);
    }
    
    
    $chart_data = array();
    
    if (count($_POST) == 0) {
        // Formular wurde noch nicht abgeschickt
    
        // Chart-Liste von Vorgängerwoche holen und in $chart_data speichern
        $result = mysql_query('SELECT `platz`, `song_id` FROM `charts_lists` WHERE `woche` = '.($woche-1).' ORDER BY `platz` ASC');
        while ($row = mysql_fetch_assoc($result)) {
            $chart_data[$row['platz']] = $row['song_id'];
        }
    
        if (count($chart_data) < $plaetze) {
            // Zu wenig/keine Platzierungen in Vorwoche
            for ($i = count($chart_data) + 1; $i <= $plaetze; ++$i) {
                $chart_data[$i] = 0;
            }
        }
    } else {
        // Formular wurde abgeschickt
        // Chart-Liste aus Formulardaten holen
        $chart_data = $_POST['platz'];
    
        if (isset($_POST['pos'])) {
            // Song verschieben
            $platz = array_pop(array_keys($_POST['pos']));
            if ($_POST['pos'][$platz] == '+' && isset($chart_data[$platz-1])) {
                // Einen Platz nach oben verschieben
                $temp = $chart_data[$platz-1];
                $chart_data[$platz-1] = $chart_data[$platz];
                $chart_data[$platz] = $temp;
            } elseif ($_POST['pos'][$platz] == '-' && isset($chart_data[$platz+1])) {
                // Einen Platz nach unten verschieben
                $temp = $chart_data[$platz+1];
                $chart_data[$platz+1] = $chart_data[$platz];
                $chart_data[$platz] = $temp;
            }
        }
    }
    
    // Chart-Tabelle mit Dropdown-Feldern zur Songauswahl aus $chart_data erstellen
    foreach ($chart_data as $platz => $song_id) {
        echo '<tr>';
        echo '<td>'.$platz.'</td>';
        echo '<td><select name="platz['.$platz.']">';
        // Songliste aus $songs in Dropdown-Feld schreiben
        foreach ($songs as $id => $name) {
            echo '<option value="'.$id.'"';
            // Aktuell gewählten Song laut $chart_data vorselektieren
            if ($id == $song_id) echo ' selected="selected"';
            echo '>'.$name.'</option>';
        }
        echo '</select></td>';
        echo '<td>';
        if ($platz > 1) echo '<input type="submit" name="pos['.$platz.']" value="+" />';
        if ($platz < $plaetze) echo '<input type="submit" name="pos['.$platz.']" value="-" />';
        echo '</td>';
        echo '</tr>'."\n";
    }
    
    ?>
    
    </table>
    
    <input type="submit" name="addnew" value="Charts f&uuml;r Woche #<?php echo $woche; ?> speichern" />
    
    
    <h2>Song hinzuf&uuml;gen</h2>
    <label for="addsong-interpret">Interpret:</label> <input id="addsong-interpret" name="interpret" /><br />
    <label for="addsong-titel">Titel:</label> <input id="addsong-titel" name="titel" /><br />
    <input name="addsong" type="submit" />
    
    </form>
    
    </body>
    
    </html>



    Beim starten des Chartshow scriptes zeigt er mir an das die sql function "mysql_fetch_assoc()" noch einen zusätzlichen parameter benötigt. Da sich ja im Laufe der Zeit auch die php versionen geändert haben schließe ich also nicht aus das diese function längst überholt ist.
    Meine Veränderungen hinsichtlich dieser function (austausch mit mysql_fetch_array) brauchte leider den selben erfolg.
    Als ich mir jedoch mal den sql code anguckte fand ich herraus das gewissen bereiche wie 'diese_woche' oder 'letzte woche' nicht in der Datenbank Struktur auftauchen.

    Fehlt da noch etwas in der Datenbak?
    Wenn Nein wie müsste ich das script den anpassen damit er mir die auflistung der aktuellen woche anzeigt.

    lg H4nSolo
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Ich kann mir nicht wirklich vorstellen, dass der Fehler lautet, dass ein Parameter fehlt. Das passt nämlich soweit.
    Füge mal ein or die(mysql_error()) an diesen Ewig langen SQL-Befehl an, also dass das so aussieht:
    ORDER BY
            `diese_woche`.`platz` ASC') or die(mysql_error());


    Dann führ die sache nochmal aus und (Falls du aus der Fehlermeldung nicht schlau wirst) poste sie mal hier.
  4. Autor dieses Themas

    hansolo

    Kostenloser Webspace von hansolo

    hansolo hat kostenlosen Webspace.

    Unknown column 'diese_woche.woche' in 'on clause'


    wie ich schon sagte also da muss es irgendwo einen fehler geben ^^
  5. Der Fehler liegt jedenfalls in der Spalte woche der Tabelle charts_lists. Wo genau kann ich dir ohne Einblick in die Datenbank nicht sagen. Allerdings gibt es diese Spalte in der Tabelle (laut deinem SQL Befehl). Kann es vielecht sein, dass sie aus irgend einem Grund in der Datenbank nicht erstellt wurde (oder die spalte woche ausgelassen wurde)? Check das mal. Ansonsten wär ein kleiner einblick in die Datenbank nicht ganz schlecht (tabelle charts_lists über PHPMyAdmin exportieren und die SQL-Daten hier posten)....
  6. Autor dieses Themas

    hansolo

    Kostenloser Webspace von hansolo

    hansolo hat kostenlosen Webspace.

    OK werds mir mal in ruhe angucken und auswerten.

    Des weiteren kannst du es ja auch mit versuchen ;)
    im ersten Post sind alles sachen drin angeblich gebraucht werden.
    title kannste auch so per chartedit.php eintragen ;) weil das funktioniert.

    lg H4nSolo
  7. Hi,
    vertausche die beiden unteren Zeilen in
    FROM
            `charts_lists` AS `diese_woche`,
            `charts_songs` AS `songs`
    zu
    FROM
            `charts_songs` AS `songs`,
            `charts_lists` AS `diese_woche`
    und werde (hoffentlich) glücklich.

    Erklärung: der "LEFT JOIN" nimmt nur zwei Argumente. In der ersten Version gibt das dann
    songs LEFT JOIN letzte_Woche
    Zum einen ist das nicht was gewollt ist, zum anderen wird bei diesem JOIN der Alias "diese_Woche" nicht erkannt, da er ja kein Argument ist.

    Gruß
    Manni
  8. Autor dieses Themas

    hansolo

    Kostenloser Webspace von hansolo

    hansolo hat kostenlosen Webspace.

    Danke es funktioniert.

    Wäre nicht im Leben drauf gekommen das mal zu überprüfen bzw zu ändern ;)

    Danke schön und habe wieder etwas hoffentlich gelernt

    lg H4nSolo
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!