Hennikenno Posted September 3, 2009 Report Share Posted September 3, 2009 Sveiki. Man ir tāda problēma, ka uzrakstīju dziesmu topu kodu, bet kā vienmēr kautkur ir kāda kļūda kuru nu es nekādīgi nevaru atrast. Tātad šeit ir kods: <?php require_once "core/main.php"; checklogin(); draw_head("Charts", "charts"); ?> <h1>Some charts:</h1> <? $chart_res = sql_query("SELECT * FROM charts ORDER BY id DESC"); if(mysql_num_rows($chart_res) >= 1) { while($chart_arr = mysql_fetch_array($chart_res)) { $id = $chart_arr["id"]; $sql_id = sqlesc($id); $name = $chart_arr["name"]; ?> <div class="chart_entry"> <a href="javascript: collapse('a<? echo "$id"; ?>')"><? echo "$name"; ?></a> <div id="ka<? echo "$id"; ?>" class="chart_entry_info" style="display: none;"> <? if($chart_arr["onair"] == "yes") { ?> <b>Broadcast:</b> <? echo $chart_arr["broadcast"]; ?><br/><br/> <? } $ip = getip(); $sql_ip = sqlesc($ip); $once = $chart_arr["voteonce"]; $curdate = date('d.m.Y'); $an_res = sql_query("SELECT * FROM chart_an WHERE chid = $sql_id AND ip = $sql_ip")or die(mysql_error()); if(mysql_num_rows($an_res) >= 1) { $last_an_res = sql_query("SELECT date FROM chart_an WHERE chid = $sql_id AND ip = $sql_ip ORDER BY date DESC LIMIT 1")or die(mysql_error()); $last_an_row = mysql_fetch_assoc($last_an_res); if($once == "yes") { $voted = true; } elseif($last_an_row["date"] == $curdate) { $voted = true; } else { $voted = false; } } else { $voted = false; } if($voted = false) { $op_res = sql_query("SELECT * FROM chart_op WHERE chartid = $sql_id ORDER BY id ASC")or die(mysql_error()); ?> <form method="post" action="charts.php?act=vote"> <? while($op_arr = mysql_fetch_assoc($op_res)) { ?> <input type="radio" name="choice" value="<? echo $op_arr["id"]; ?>" /> <? echo $op_arr["option"]; ?><br/> <? } ?> <input type="submit" value="Vote!" /> </form> <? } elseif($chart_arr["show"] != "yes") { ?> <p>Chart results are hidden. Thanks for voting!</p> <? } else { $op_res = sql_query("SELECT * FROM chart_op WHERE chartid = $id ORDER BY id ASC")or die(mysql_error()); $an_tot_res = sql_query("SELECT id FROM chart_an WHERE chid = $sql_id")or die(mysql_error()); $total_votes = mysql_num_rows($an_tot_res); while($op_arr = mysql_fetch_array($op_res)) { $count = $count + 1; $op_id = $op_arr["id"]; $an_res = sql_query("SELECT id FROM chart_an WHERE opid = $op_id")or die(mysql_error()); $votes = mysql_num_rows($an_res); if($total_votes != 0) { $vote_perc = $votes / $total_votes * 100; $vote_perc = round($vote_perc,1); } else { $vote_perc = 0; } ?> <? echo "$count"; ?>. "<? echo $op_arr["option"]; ?>" <? echo "$votes"; ?> votes (<? echo "$vote_perc"; ?>%)!<br/> <? } ?> <div class="center"> <i>There are total <? echo "$total_votes"; ?> votes on this chart!</i> </div> <? } ?> </div> </div> <? } } else { ?> <h3>There are no charts at current moment!</h3> <? } draw_foot(); ?> Kodā ir vairākas paša rakstītas funkcijas, kuras gan nav nepieciešams pievienot, jo tās strādā nevainojami citos skriptos un nav arī nozīmes, ko tās dar (ja neskaita sql_query() - tā aizvieto mysql_query() + piereģistrē katru izpildīto sql kveriju). Problēma kodā ir šāda: Ja lietotājs nav balsojis, tad vajadzētu parādīt balsošanas formu. Ja ir balsojis, bet tops atļauj balsot katru dienu un pēdējā lietotāja bals nav bijusi šodien, tad arī parāda balsošanas formu. Citos gadījumos (ja tops atļauj) tiek parādīti rezultāti! Bet manā gadījumā, lietotājs nav nobalsojis, bet tikuntā rāda balsošanas rezultātus, nevis balsošanas formu (sk. $voted = true / false)! Kur ir kļūda, kuru es, vairākkārt pārskatot, neesmu atradis? Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted September 3, 2009 Report Share Posted September 3, 2009 šajā vietā: if($voted = false) notiek nevis salīdzināšana, bet gan piešķiršana. :) Jābūt: if($voted == false) vai vēl labāk (vismaz man pašam tā šķiet labāk :) ) ir pieradināties salīdzināmo konstanti rakstīt pirmo: if(false == $voted) tad gadījumā, ja neuzmanības dēļ aizmirsīsi otru vienādības zīmi interpretators bļaus, ka Tu esi ļoti slikts cilvēks un mēģini ierakstīt kaut ko konstantē. :) Protams, boolean vērtību gadījumā var uzreiz rakstīt arī if( ! $voted). Quote Link to comment Share on other sites More sharing options...
Hennikenno Posted September 3, 2009 Author Report Share Posted September 3, 2009 šajā vietā: if($voted = false) notiek nevis salīdzināšana, bet gan piešķiršana. :) Jābūt: if($voted == false) vai vēl labāk (vismaz man pašam tā šķiet labāk :) ) ir pieradināties salīdzināmo konstanti rakstīt pirmo: if(false == $voted) tad gadījumā, ja neuzmanības dēļ aizmirsīsi otru vienādības zīmi interpretators bļaus, ka Tu esi ļoti slikts cilvēks un mēģini ierakstīt kaut ko konstantē. :) Protams, boolean vērtību gadījumā var uzreiz rakstīt arī if( ! $voted). Nu jā, tas laikam visu izskaidro... Paldies ;) Quote Link to comment Share on other sites More sharing options...
Kemito Posted September 3, 2009 Report Share Posted September 3, 2009 Ja godīgi, mierīgi vari samazināt simbolu skaitu attiecīgi - Ja var izmantot !$mainigais vai !$mainigais == ar kaut ko, nevaig izmantot True/False pēc manām domām! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.