Jump to content
php.lv forumi

Dziesmu topi


Hennikenno

Recommended Posts

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?

Link to comment
Share on other sites

š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).

Link to comment
Share on other sites

š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 ;)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...