Eli .. tarkoituksena olisi saada radion sivuille toivo kappale osio.
haluaisin siis tuoda tietokannasta ensin valinta ikkunan mistä voisi valita artistin. (sellanen alasvedettävä kenttä missä olisi kaikki tietokannassa olevat artistit) sen jälkeen voisi valita albumin samalla tavalla. ja kun kummatkin on valittu nii näkyviin tulisi kappaleet mitä voisi toivoa.
mahdollisesti alkuun vielä kysely että millä kirjaimella artisti alkaa.
kysymys kuuluukin että miten saan artistin ja albumin sellaiseen valinta laatikkoon ja miten sellainen tehdään .. olen vielä aloittelija näissä hommissa.
Jotenkin näin sen itse tekisin.. Riippuu vähän.. Huom ei tarkistettu..
<html> <head> <title></title> <body> <form name="check" method="post" action=""> <table> <tr> <td>Artisti</td> <td><select name="artisti"><?php valikko(1); ?></select></td> <td>Albumi</td> <td><select name="albumi"><?php valikko(2); ?></select></td> </tr> <tr> <td><input type="submit" value="Hae kappaleet!" name="nappi"></td></tr> </table> </form> <?php if(!empty($_POST['artisti']) || !empty($_REQUEST['albumi'])){ // Kappaleet(); } function valikko($arvo) { $kentta = ($arvo == 1) ? 'artisti' : 'albumi'; $k = "SELECT artistin_id, $kentta FROM tietokanta"; if(!($t = mysql_query($k))) { echo mysql_error(); return; } while($r = mysql_fetch_row($t)) { $id = intval($rivi[0]); $nimi = htmlspecialchars(ucfirst($rivi[1])); if($tunniste == $_REQUEST[$kentta]){ echo "<option value='$id' selected='selected'>$nimi</option>\n"; } else{ echo "<option value='$id'>$nimi</option>\n"; } } } function Kappaleet(){ // Kyselyt sun muut } ?> </body> </html>
kiitos vastauksesta.
kerrottakoon että käytän SAM Broadcaster radio-ohjelmistoa joka pitää kaiken informaation "SAMDB" nimisestä tietokannassa. kappaleet haetaan "songlist" taulukosta jossa on kaikki kappaleet. kenttiä on esim. artist, album, title, ja ID + 30 muuta kenttää jota ohjelma käyttää :)
tässä yritän tuota kyseistä koodia käyttää mutta sivuille tulee seuraavanlainen teksti formin alle:
$nimi\n"; } else{ echo "$nimi\n"; } } } function Kappaleet(){ // Kyselyt sun muut } ?>
mistähän tuo johtuisi. toistettakoon että olen aloittelija :)
kiitos jo etukäteen mahdollisista vastauksista.
SAMDB on mulle aika tuntematon tuote, mutta yleisesti homma voisi toimia jotenkin seuraavan periaatteen mukaan. Ensiksi pyydetään käyttäjältä select valinnalla jokin artisti, jonka perusteella haetaan tietokannasta kaikki kappaleet, jotka on merkitty kyiseselle artistille. Alla on vielä mysql toteutus asiasta.
<?php /* GET parametrin kiinninappaaminen oletamme tämän int luvuksi */ if(isset( $_GET['artist'])){ $artist = siivoaSyote( $_GET['artisti'] ); /* Laulujen hakeminen */ $kysely = "SELECT songname FROM songlist WHERE artist = {$artist} ORDER BY name"; /* Tsekataan kysely */ if(mysql_query( $kysely, $yhteys ){ /* Käy läpi kyselyn tulokset */ }else{ echo mysql_error(); } } ?>
Tuossa kohdassa oli vire
Heippa stageradio!
imppaa ja asentele ekaks MySQL Connector/ODBC 3.51 ja testaa sit oheista ajax-purkka-viritelmää...
<html><head> <script language="javascript"> var adoConn; var adoRS; function lst1_fill() { adoConn_open(); if(adoConn == null){return;} var select = document.getElementById('lstdiv1').innerHTML; adoRS.Open("SELECT artist FROM songlist", adoConn, 1, 3); while (!adoRS.EOF){ var item = adoRS(adoRS.Fields(0).name) if(select.indexOf(item) == -1){ select = select.replace("</SELECT>",""); select += "<OPTION>" + item + "</OPTION></SELECT>" } adoRS.MoveNext(); } document.getElementById('lstdiv1').innerHTML = select; adoConn_close(); lst2_fill(0); } function lst2_fill(index){ var option = document.getElementById('lst1').options[index].text ; adoConn_open(); if(adoConn == null){return;} document.getElementById('lst2').innerHTML = "" var select = document.getElementById('lstdiv2').innerHTML; adoRS.Open("SELECT album FROM songlist WHERE artist='" + option + "'", adoConn, 1, 3); while (!adoRS.EOF){ select = select.replace("</SELECT>",""); select += "<OPTION>" + adoRS(adoRS.Fields(1).name) + "</OPTION></SELECT>" adoRS.MoveNext(); } document.getElementById('lstdiv2').innerHTML = select; adoConn_close(); } //jne... function adoConn_open(){ try { adoConn = new ActiveXObject("ADODB.Connection"); adoRS = new ActiveXObject("ADODB.Recordset"); adoConn.Open("DRIVER={MySQL ODBC 3.51 Driver};SERVER=" + "localhost;DATABASE=SAMDB;UID=root;PWD="); } catch(err){} } function adoConn_close() { adoRS.Close(); adoRS = null; adoConn.Close(); adoConn = null; } </script></head> <body onload="lst1_fill();"> <form id="frm1"> <table id="tbl1"> <tr><td> <div id="lstdiv1"> <select id="lst1" size="1" onchange="lst2_fill(this.selectedIndex);"> </select></div> </td><td> <div id="lstdiv2"> <select id="lst2" size="1" onchange=""> </select> </div> <!-- jne. --> </td></tr> </table> </form></body></html>
kiitos kaikille avunannoista.. kokeilen saada toiminaan noilla :)
olen saanut koodinpätkän aikaiseksi ja se on netissä (http://www.stageradio.com/request.php)
ongelmana ilmeisesti yhteys tietokantaa. mihin väliin tulee laittaa yhteyden aloitus..
nimittäin kun katselee tuota lähdekoodia niin siellä on tälläistä pätkää:
Access denied for user 'nobody'@'localhost' (using password: NO)
stageradio kirjoitti:
nimittäin kun katselee tuota lähdekoodia niin siellä on tälläistä pätkää:
Access denied for user 'nobody'@'localhost' (using password: NO)
Eipä tuota oikein muutenkaan voi tulkita. Toivottavasti sinulla olemassa tunnukset ja salasana tuolle tietokannalle, koska erittäin harvoin kannattaa pitää kantaa ilman salasanaa.
on olemassa joo .. mutta en käsitä mistä se nuo nobody@localhost on repinyt käteensä .. tietokanta on omalla koneella ja serveri ameriikassa...
kysymys kuuluukin että mihin väliin pistän tietokantaan yhdistämisen kun ei se tällä hetkellä tunnu toimivan .. (käyttäjänimi ja salasana ovat ihan toiset)
tässä vielä koodi:
(itse sivu)
<? require("config.php"); require("header.php"); ?> <table valign=top> <tr> <td colspan="2"> <h2>Toivo kappale</h2> </td> </tr> <tr> <td> <form> <table> <tr> <td>Artisti</td> <td><select name="artisti"><?php valikko(1); ?></select></td> <td>Albumi</td> <td><select name="albumi"><?php valikko(2); ?></select></td> </tr> <tr> <td><input type="submit" value="Hae kappaleet!" name="nappi"></td></tr> </table> </form> <?php require(yhdista.php) if(!empty($_POST['artisti']) || !empty($_REQUEST['albumi'])){ // Kappaleet(); } function valikko($arvo) { $kentta = ($arvo == 1) ? 'artisti' : 'albumi'; $k = "SELECT artist, $kentta FROM songlist"; if(!($t = mysql_query($k))) { echo mysql_error(); return; } while($r = mysql_fetch_row($t)) { $id = intval($r[0]); $nimi = htmlspecialchars(ucfirst($r[1])); if($id == $_REQUEST[$kentta]){ echo "<option value='$id' selected='selected'>$nimi</option>\n"; } else{ echo "<option value='$id'>$nimi</option>\n"; } } } function Kappaleet(){ // Kyselyt sun muut } ?> </td> </tr> </table> </td> <? require("footer.php"); ?>
(yhdista.php)
Heippa stageradio!
tsekkaa alla luetellut tiedostot...
dbconfig.xml.php
<?php <CONFIG application="SAM" version="3.4.2"> <Database> <Driver>MYSQL</Driver> <Host>localhost</Host> <Port>3306</Port> <Database>SAMDB</Database> <Username>root</Username> <Password></Password> </Database> </CONFIG> ?>
SAMBC.core.xml
<CONFIG application="SAM" version="3.4.2"> <Database> <Driver>MYSQL</Driver> <Host>localhost</Host> <Port>3306</Port> <Database>SAMDB</Database> <Username>root</Username> <Password></Password> <ServerMode>EMBEDDED</ServerMode> </Database> <!-- tiedosto jatkuu... -->
ADO ActiveX ojeita mikäli sattuisi kiinnostamaan...
dbconfig.xml.php on kunnossa. toimiihan kaikki muu data haku tietokannasta sivuilla.
sammb.core.xml on tietääkseni tiedosto mitä radio-ohjelma käyttää yhteyden luomiseen. ja kokeilin vaihtaa siihen tuon no-ip osoitteen niin ei tuntunut toimivan.
ihmettelen vain sitä kun vikailmoitus oli että käyttäjänimi oli nobody@localhost ja salasana NO .. kun salasana on kyllä määritettynä.
Tässä ajattelin että tuo album haku on turha ..
miten menisi pelkkä artistin valitseminen tuohon dropdown listaan ja sitte nappulasta haettaisiin kappaleet. voisi olla helpompi toteuttaakkin :D
Heippa stageradio!
mielestäni alkuperäinen idea on toimiva, eli ensin tekstikenttään kirjain, jonka perusteella tuodaan (rajataan) taulusta songlist artistit ensimmäiseen valikkoon ja em. valikon valinnan perusteella tuodaan samasta taulusta valitun artistin albumit toiseen valikkoon. Näyttäisi siltä ettei songlist tauluun (järkevästä syystä) pakata soittolistaa, joten olettaisin, että request'n yhteydessä pitäis palautuman soittolista, josta kappaleiden nimet voisi mahdollisesti poimia ja pukata kolmanteen valikkoon, jonka valinnan (indeksi=trackno) perusteella sitten määräytyy kulloinkin soitettava raita...kysymys kuuluukin: mistä (miltä serveriltä) biisit haetaan/millä niitä toistetaan...
toisekseen: jos kävi niin, että SAMPC-tryout aika umpeutui niin voi olla, että rekisteriin ilmestyi kannaltasi epämieluisaa sälää (mikäli näin...kortin vingutus voisi tehdä 'nobody'@'localhost' ilmoituksille ihmeitä & BTW host'n pitäisi löytyä taulusta requestlist)...
kyseessä on jo ostettu versio joten sen ei pitäisi olla ongelma ..
internet serveri on siis stream101.com missä sijaitsee internetsivut.
itse sam on koti koneella jossa myös tietokanta jossa tiedot joita haetaan.
tähän asti olen onnistunut saamaan yhteyden internetsivuilta omaan koneeseen mutta tässä tapauksessa se ei tunnu toimivan .. olenkin tässä yrittänyt muodostaa kokonaan uutta koodin pätkää, mutta olen vielä vasta-alkaja ja tuloksena on tähän mennessä vain kynitty päänahka.
en tiedä onko sam tuttu ohjelma sinulle ennestään, mutta sehän siis on jatkuvassa yhteydessä oman tietokantansa kanssa jossa pidetään kaikki tarvittavat tiedot ja johon ohjelma päivittää kokoajan biisit mitkä soi jne. ja tietokanta siis on samalla koneella kuin tämä ohjelma. ohjelman mukanahan tulee jo valmiit internet sivut jotka ovatkin toimivat, mutta vain karun näköiset. niitten päälle olenkin tässä yrittänyt tehdä omanlaista sivustoa ja olen saanut "nyt soi" osion valmiiksi. tämä onkin se vaikein tämä toive kappale puoli sillä se eroaa aika lailla vanhasta tyylistä toteuttaa toiveet.
vanhan tyylin mukaan se luo kaikista kappaleista luettelon (lohkottu jokaisen artistin alkukirjaimen mukaan) mutta siitä listasta tuppaa tulla niin pitkä kun kappaleita rupee olemaan jo nyt 5000 ja lisää on kokoajan tulossa. joten siksi uudenlainen ratkaisu on kaivattu :)
jipii .. löysin toisen laisen koodi pätkän ohjelman tukisivuilta joka ei vain toimi.. osaisiko joku kertoa miksi kyseiset koodin antavat seuraavan laisen virheilmoituksen.
Parse error: syntax error, unexpected $end in /home/stagerad/public_html/request1.php on line 31
ja kyseisellä rivillähän on vain
<? require("footer.php"); ?>
ja tässä koodin pätkät:
request.php
<? require("config.php"); require("header.php"); ?> <? $artistListSQL = "SELECT DISTINCT(artist),ID from songlist WHERE songtype='S' GROUP BY artist"; $artistList = mysql_db_query($db, $artistListSQL , $sqlCon); if (!$artistList ) { echo( mysql_error()); ?> <form name="form1" id="form1"> <select name="artistList" onchange="getArtist('parent',this,0)"> <? while ($artistListRow = mysql_fetch_array($artistList )) { ?> <option value="<? echo $artistListRow["ID"] ?>"><? echo $artistListRow["artist"] ?></option> <? } ?> </select> </form> <script type="text/JavaScript"> function getArtist(targ,selObj,restore) { eval("window.location.href='artistList.php?id=" + selObj.selectedIndex + "'"); } </script> </td> </tr> </table> </td> <? require("footer.php"); ?>
ja artistList.php
<? require("config.php"); require("header.php"); ?> <table valign=top> <tr> <td colspan="2"> <? $songID = $_GET["id"]; $getArtistSQL = "SELECT artist FROM songlist WHERE ID='".$songID."'"; $getArtist= mysql_db_query($db, $getArtistSQL , $sqlCon); $getArtistRow = mysql_fetch_array($getArtist); if (!$getArtist) { echo( mysql_error()); $artist = $getArtistRow["artist"]; $getArtistSongsSQL = "SELECT * FROM songlist WHERE artist='".$artist."' ORDER BY album ASC"; $getArtistSongs= mysql_db_query($db, $getArtistSongsSQL , $sqlCon); if (!$getArtistSongs) { echo( mysql_error()); ?> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td>Artist</td> <td>Title</td> <td>Album</td> </tr> <? while ($getArtistSongsRow= mysql_fetch_array($getArtistSongs)) { ?> <tr> <td><? echo $getArtistSongsRow["artist"]; ?></td> <td><? echo $getArtistSongsRow["title"]; ?></td> <td><? echo $getArtistSongsRow["album"]; ?></td> </tr> <? } ?> </table> </td> </tr> </table> </td> <? require("footer.php"); ?>
kiitokset etukäteen avuista :D
Mistä lie löysit noin purkan koodipätkän. Ensimmäisenä silmään kävi noiden short-tagien käyttö, josta on keskustelua tällä hetkelläkin täällä foorumilla. Sitten tuolla on muutamassa kohtaa:
eli eihän tässä mitään logiikkaa ole; lohko avataan, mutta sitä ei suljeta missään. Noissa kyselyissä on myös SQL-injektion mahdollisuus, joten en suosittele tuon käyttämistä tuotantokäytössä.
ok .. hyvä tietää .. otinkin kokonaan toisen pätkän käyttöön joka toimii ajax:illa ja sen sellasilla.. pistän sitten infoa jos ja kun saan toimimaan .. kiitoksia kaikille avusta!!! oppinu taas jotain uutta :D
Aihe on jo aika vanha, joten et voi enää vastata siihen.