Kirjoittelin tällaiset funktion, mutta ajettaessa sitä tulee herjaus "Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /polunnimi)", enkä tunnu keksivän mikä argumentissa olisi väärin
function box_list() { $link = mysql_connect($host, $db_user, $db_password); mysql_select_db($database, $link); $query = mysql_query("SELECT * FROM text_box ORDER BY sort_number DESC"); while ( $row = mysql_fetch_array ($query, MYSQL_ASSOC) ) { $row_topic = $row["topic"]; $row_text = $row["text"]; $row_task = $row["task"]; $row_name_first = $row["name_first"]; $row_name_last = $row["name_last"]; $row_time = $row["time"]; print "<table align='center' cellspacing='0' cellpadding='0' style='box' width='401'> \n"; print "<tr><td class='shout_1' width='401'><p class='shout'> \n"; print "<b>$row_topic \n"; print "<tr><td class='shout_2' width='401'><p class='small'> \n"; print "kirjoittanut $row_task $row_name_first $row_name_last "; print date("G:i d.m.y", $row_time); print "<br> \n"; print "$row_text </p></table><br> \n"; } mysql_free_result($query); }
Olisiko vika siinä, että olet käyttänyt funktiossa muuttujia $host, $db_user, $db_password sekä $database, joille ei ole annettu mitään aloitusarvoa? Toinen syy virheilmoitukseen voi olla, että tietokantakysely on väärin, mutta epäilisin tuota ensimmäistä. Yhteys tietokantaan kannattaa muuten avata vain kerran skriptin alussa eikä joka kerta, kun haet rivejä tietokannasta.
Olin määritellyt muuttujat aiemmin ja olen käyttänyt tuota muuttujilla kytkeytymistä muissa funktioissa onnistuneesti, mutta jostain kumman syystä sain sen toimimaan kun laitoin suoraan arvot noihin kytkeytymiskohtiin. Pitäisikö nuo muuttujat määritellä globaaleiksi funktion sisällä, jotta kytkeytymisessä voitaisiin käyttää muuttujia? Helpottaisi nimittäin siirtämistä jos pitää vaihtaa tietokantapalvelinta.
Ongelma ratkesi, olin unohtanut määritellä muuttujat globaaleiksi :)
Globaalien muuttujien käytössä ei kyllä oikeastaan ole mitään järkeä, ainakaan tuossa tapauksessa. Järkevämpi vaihtoehto on tuo makeuun koodi, jossa muutujat annetaan parametreinä, järkevin tuo Antin tapa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.