我最近开始使用PHP来实现基本排名系统。这是我的代码:
review.php
<?php
require 'connect.inc.php';
mysql_select_db("conference");
$query = mysql_query("SELECT * FROM event");
$event = [];
while($row = mysql_fetch_array($query)){
$event [] = $row;
}
?>
<?php foreach($event as $events): ?>
<div class="event">
<h3><a href="event.php?id=<?php echo $events['eventID'];?>"><?php echo $events['eventName'];?></a><h3>
<div class="event-rating"> Rating: x/5</div>
</div>
<?php endforeach;?>
event.php
<?php
require 'connect.inc.php';
$event= null;
if(isset($_GET['eventID'])){
$id=(int)$_GET['eventID'];
$event = mysql_query("SELECT * FROM event WHERE eventID = {$id}")->fetch_object();
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<?php if($event):?>
<div class="event">
This is Event "<?php echo $event['eventName'];?>"
<div class="event-rating"> Rating: x/5</div>
<div class="event-rate"> Rating: x/5</div> Rate this Event:
<?php foreach(range(1,5)as $rating):?>
<a href=""><?php echo $rating; ?></a>
<?php endforeach ?>
</div>
<?php endif;?>
</body>
</html>
我遇到的问题是没有任何内容输出到网页上,而它应显示1到5的评级页面。我认为问题出在 - &gt; fetch_object(); 行中因为这之前一直是我的问题,所以我使用了mysql_fetch_array之类的替代品。
我也尝试过使用PDO和mysqli连接重新开始,但仍然没有运气。
如果有人能提供任何建议,我们将不胜感激。
此外,如果有人可以解释 - &gt; fetch_object(); ,那将非常有用,因为在线没有太多解释。
答案 0 :(得分:1)
好的,这个将是一个难以解释的问题,因为看起来好像你对PHP的mysql_*
函数的工作方式没有基本的了解。
在PHP中,->
运算符用于访问Object
类型的属性和函数。 mysql_query()
返回Resource Identifier
,它不能用作PHP中的对象。相反,您需要使用过程mysql_fetch_object( $result );
函数。但是,稍后在代码中,您尝试将返回的对象用作数组,例如:
This is Event "<?php echo $event['eventName'];?>"
您面临的下一个问题是the mysql_*
family of functions is now deprecated,很快就会从新版本的PHP中消失。因此,您最好使用其中一个较新的库,例如PDO。
您的代码可以在PDO中重写,我已经花时间为您做了这些:
<?php
$db = new PDO('mysql:dbname=conference;host=127.0.0.1', 'username', 'password');
$result = $db->query( 'SELECT * FROM event' );
while( $event = $result->fetchObject() ):
?>
<div class="event">
<h3><a href="event.php?id=<?php echo $event->eventID ?>"><?php echo $event->eventName ?></a><h3>
<div class="event-rating"> Rating: x/5</div>
</div>
<?php endwhile ?>
同样,在event.php
内,您应该使用Prepared Statements来阻止对您网站的SQL injection攻击。例如:
<?php
$db = new PDO('mysql:dbname=conference;host=127.0.0.1', 'username', 'password');
if( isset($_REQUESR['eventID']) )
{
$sql = $db->prepare( 'SELECT * FROM event WHERE eventID = :eid' );
$sql->execute( array(':eid' => $_REQUEST['eventID']) );
$event = $sql->fetchObject();
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<?php if($event):?>
<div class="event">
This is Event "<?php echo $event->eventName ?>"
<div class="event-rating"> Rating: x/5</div>
<div class="event-rate"> Rating: x/5</div> Rate this Event:
<?php foreach(range(1,5)as $rating):?>
<a href=""><?php echo $rating; ?></a>
<?php endforeach ?>
</div>
<?php endif;?>
</body>
</html>
希望上述友好建议能帮助您通过PHP学习和开发。