Vraag & Antwoord

Webprogrammeren & scripting

[PHP][MySQL] playlists uitlezen en ordenen

Anoniem
ANNErd
5 antwoorden
  • ik heb een hele rits playlisten van een programma met de volgende structuur:[code:1:4e9659b217]<b>1</b>
    <n>Tieners</n>
    <s>076</s>
    <t>Dwell in Your house</t>[/code:1:4e9659b217]B = bundelnr
    N = bundeltitel
    S = nr binnen de bundel
    T = Titel

    nu wil ik met php en mysql analyseren hoevaak elk lied is geweest… Ik had het idee dat ik dan zoiets moest hebben[code:1:4e9659b217]<?php
    $playlist = "OPS30052004.pls";
    $playlist = readfile($playlist);
    $lied = explode("</t>", $playlist);
    ?>[/code:1:4e9659b217]Dan zou er een array aangemaakt moeten worden, maar als ik dat heb gedaan en ik echo hem, dan geeft hij aan dat de offset undefined is…, maar als ik de inhoud kopieer als de var $playlist en laat dat exploden, dan werkt het prima.
    wat doe ik nou fout…

    is het overigens slim de dit te onderzoeken met een explode?

    [b:4e9659b217]EDIT:[/b:4e9659b217] en hoe maak ik van[code:1:4e9659b217]<b>1</b>
    <n>Tieners</n>
    <s>076</s>
    <t>Dwell in Your house</t>[/code:1:4e9659b217]alles op 1 regel, dus[code:1:4e9659b217]<b>1</b><n>Tieners</n><s>076</s><t>Dwell in Your house</t>[/code:1:4e9659b217]
  • ik heb dit probleem nu zelf al gefixt, maar nu zit ik met iets anders. De eerste keer(als de db leeg is) werkt alles prima. De 2e keer worden alleen de eerste 2 geupdate, en dan komt er steeds 1 extra reload bij om hem erbij te krijgen. dus na 1x 3, vervolgens nog eens 2x voor 4, en dan nog eens 3x voor 5 enzovoort.
    op de duur ontstaat er een eternalloop(nouja, tot max exe time), waarin hij maar blijft updaten. (als er 1 nr in het bestand staat al na 4 keer) Er wordt hierbij geschreven naar een lege regel

    Waar gaat het mis in de volgende code
    [code:1:f6162e4e82]<table cellpadding="3" cellspacing="3">

    <?php
    $playlist = "OPS12102004.pls";
    $playlist = file_get_contents($playlist);

    $charsfout = array("<b>", "</b>", "<n>", "</n>", "<s>", "</s>", "<t>", "</t>", "'", "
    ");
    $charsgoed = array("", "", "%", "", "%", "", "%", "%end%", "", "");
    $playlist = str_replace($charsfout, $charsgoed, $playlist);

    $lied = explode("%end%", $playlist);
    $aantal = count($lied)-1;
    for($i=0; $i<$aantal; $i++){
    $data = explode("%", $lied[$i]);

    // $data[0] = Bundelnr
    // $data[1] = Bundelnaam
    // $data[2] = Liednr
    // $data[3] = Liednaam

    require("verbind.php");
    $geupdate = "no";
    $sql_read = 'SELECT *, COUNT(*) AS tablesize FROM ' . $tabel . ' WHERE `bundelnaam` = ''.$data[1].'' AND `liednr` = ''.$data[2].'' GROUP BY `liednr`';
    $query_r = mysql_query($sql_read) or die (mysql_error());
    while ($result = mysql_fetch_array($query_r)) {
    if ($result["tablesize"] >= "1") {
    $aantal = $result["aantal"]+1;
    $sql_update = 'UPDATE `register` SET `aantal` = ''.$aantal.'' WHERE `bundelnaam` = ''.$data[1].'' AND `liednr` = ''.$data[2].''';
    $query_u = mysql_query($sql_update) or die (mysql_error());
    $geupdate = "yes";
    } }

    if ($geupdate == "no"){
    $sql_add = 'INSERT INTO ' . $tabel . ' (`id`, `bundelnaam`, `liednr`, `liednaam`) VALUES ('', ''.$data[1].'', ''.$data[2].'', ''.$data[3].'')';
    $query_a = mysql_query($sql_add) or die (mysql_error());
    }

    print "<tr><td align='right'>" . $data[1] . "</td><td align='center'>".$data[2]."</td><td align='left'>" . $data[3] . "</td></tr>
    ";

    }
    ?>

    </table>[/code:1:f6162e4e82] de instellingen van mijn db zijn:[code:1:f6162e4e82] `id` int(11) NOT NULL auto_increment,
    `bundelnaam` varchar(99) NOT NULL default '',
    `liednr` varchar(11) NOT NULL default '',
    `liednaam` varchar(99) NOT NULL default '',
    `aantal` int(11) NOT NULL default '1',
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;[/code:1:f6162e4e82]

  • Wat is nu precies de rol van de database? Je doet iets met een file en iets met die tabellen. Ik begrijp niet goed wat je nu precies wilt.

    Wil je alle data vanuit die playlist in je database stoppen? en vervolgens tellen hoe vaak een liedje voorkomt?

    Als je dat wilt dan zou ik met foreach van alle waardes in je array die je krijgt door je explode steeds een insert query doen in je database. Misschien begrijp ik je niet goed hoor.

    Trouwens, voor bug-fixen op je bestaande code kan ik je aanraden om eens wat query's te echoen en te bekijken hoe die eruit zien en waarom die dus niet goed in je DB gestopt worden. Het is voor ons lastig om op deze manier je code te debuggen.
  • [quote:8492522ee8="Japaveh"]Wil je alle data vanuit die playlist in je database stoppen? en vervolgens tellen hoe vaak een liedje voorkomt?[/quote:8492522ee8]
    Ja dat was het idee. Ik snap alleen niet hoe je die foreach dan moet gebruiken… Is dat niet wat ik doe met [code:1:8492522ee8]$lied = explode("%end%", $playlist);
    $aantal = count($lied)-1;

    for($i=0; $i<$aantal; $i++){[/code:1:8492522ee8]Zou je mij kunnen uitleggen op welke manier ik zo'n foreach gebruik (in mijn voorbeeld)? Ik heb wel gekeken op php.net/foreach maar dan nog snap ik niet hoek dat hier toepas…
  • [quote:07f91ce3b3="ANNErd"][quote:07f91ce3b3="Japaveh"]Wil je alle data vanuit die playlist in je database stoppen? en vervolgens tellen hoe vaak een liedje voorkomt?[/quote:07f91ce3b3]
    Ja dat was het idee. Ik snap alleen niet hoe je die foreach dan moet gebruiken… Is dat niet wat ik doe met [code:1:07f91ce3b3]$lied = explode("%end%", $playlist);
    $aantal = count($lied)-1;

    for($i=0; $i<$aantal; $i++){[/code:1:07f91ce3b3]Zou je mij kunnen uitleggen op welke manier ik zo'n foreach gebruik (in mijn voorbeeld)? Ik heb wel gekeken op php.net/foreach maar dan nog snap ik niet hoek dat hier toepas…[/quote:07f91ce3b3]

    Op zich is de foreach niet strikt noodzakelijk, en het zal je probleem ook niet oplossen. Het is gewoon een nettere manier om deze string waarde voor waarde af te lopen . Daarom heet het ook foreach.

    Echo je strings eens en zie welke querys uitgevoerd worden. Alleen op deze manier kun je er achter komen waarom het pas bij de tweede keer werkt.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.

Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord