Ga naar inhoud

[PHP][MySQL] playlists uitlezen en ordenen


Aanbevolen berichten

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]
Link naar reactie
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>", "'", "\r\n"); $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>\n"; } ?> </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]
Link naar reactie
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.
Link naar reactie
[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...
Link naar reactie
[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.
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

  • Populaire leden

    Er is nog niemand die deze week reputatie heeft ontvangen.

  • Leden

    Geen leden om te tonen

×
×
  • Nieuwe aanmaken...