データベース テーブルにクエリを実行し、ユーザーが既に IP アドレスでアイテムに投票したかどうかを確認する方法について、いくつかのガイダンスが必要です。set_id、ip_address、および投票を格納するテーブルがあります。その人が投票すると、すでに投票したことを示すメッセージが表示されます。これはIf
ステートメントで行われます。
コントローラーで試した2つの方法があります。
$setDao->getRatingByIp($ipAdress);
私はこれを要求しています:
$ipAddress = $this->_request->getClientIp();
SQL クエリでは、IP アドレスが返されますが、set_id を取得する方法がありません。
モデル内の関数は次のとおりです。
public function getRatingByIp($ipAddress)
{
$sql = "SELECT ip_address FROM " . $this->_prefix . " media_set_rating WHERE set_id = " . $ipAddress);
$result = mysql_query($sql);
return mysql_num_rows($result);
}
私が試した2番目は配列でした:
$ip = array();
$ip['set_id'] = $setId;
$ip['ip_address'] = $ipAddress;
$setDao->getRatingByIp($ip);
これはうまくいくと思いますが、上記のクエリでそれを実装する方法がわかりません。いくつかの配置を試しましたが、SQL チェックを実行しても何も返されません。echo $sql; exit;
5 月 29 日午後 11 時 28 分更新
(ウィジェット) コントローラー全体を次に示します。
protected function _prepareShow()
{
$setId = $this->_request->getParam('set_id');
$rating = $this->_request->getParam('rating');
$grades = $this->_request->getParam('grades');
$pageUrl = $this->_request->getPathInfo();
$ipAddress = $this->_request->getClientIp();
$limit = 3;
$conn = XXX_Db_Connection::factory()->getSlaveConnection();
$setDao = XXX_Model_Dao_Factory::getInstance()->setModule('media')->getSetDao();
$setDao->setDbConnection($conn);
$ip = array();
$ip['set_id'] = $setId;
$ip['ip_address'] = $ipAddress;
$setDao->getRatingByIp($ip);
$grades = $setDao->gradeRound($setId);
if ($this->_request->isPost('rating')) {
$rating = new Media_Models_Set(array(
'set_id' => $this->_request->getPost('setId'),
'ip_address' => $this->_request->getClientIp(),
'rating' => $this->_request->getPost('rating'),
));
$setDao->rate($rating);
$ratings = new Media_Models_Set(array(
'set_id' => $this->_request->getPost('setId'),
'rating' => $this->_request->getPost('rating'),
'grades' => $this->_request->getPost('grades'),
));
$setDao->averageRating($ratings);
$flashMessenger = Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger');
$flashMessenger->addMessage($this->_view->translator()->widget('send_rating_success'));
$redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('Redirector');
$redirector->gotoUrl($this->_view->APP_URL . $pageUrl . '#rateForm');
}
$this->_view->assign('ip', $ip);
$this->_view->assign('set_id', $setId);
$this->_view->assign('rating', $rating);
$this->_view->assign('grades', $grades);
}
情報を渡す最後の試みとして、配列はそこに残されました。
2013 年 5 月 31 日更新
私は今、うまくいく解決策を持っています。私はこれに数日間コードを投げていましたが、最終的にいくつかのことに気づきました。1 つは、最初から set_id を持っていなかったことです。私はそれを要求していましたが、適切な方法で行われませんでした。もう 1 つは、ビューに setId を含めていたため、その必要がなかったことです。Orangpill が提案した以下のコードは、set_id を取得したので動作すると思われます。しかし、私は別のアプローチを取りました。ご助力いただきありがとうございます。