Zend フレームワークでウィジェットを作成していますが、データベースを更新するためのラジオ ボタンの値を取得できません。誰かが助けてくれますか。多分誰かが私が見ていない何かを見ている。
前もって感謝します。
ラジオ HTML のサンプルを次に示します。
<div class="vote_block">
<form class="data_form">
<ul class="input_radio_group">
<li>
<input id="mediaRating1" class="radioBtnClass" type="radio" title="Poor" value=".1" name="rating">
<label class="label_radio">Poor</label>
<div class="clear"></div>
</li>
</ul>
<button id="rateVoteButton" class="button"><span><?php echo $this->translator('send_button'); ?></span></button>
</form>
私が持っているもののアイデアを得ることができるように、私はラジオボタンを1つだけ投稿しました.
ページ上の Javascript は次のとおりです。
<script type="text/javascript">
$(document).ready(function() {
$('#rateVoteButton').click(function() {
var rating = Array();
$(this).parents('.rating_block').find('li input').each(function() {
if ($(this).attr('checked') == true) {
rating.push($(this).attr('value'));
});
if (rating.length > 0) {
var data = $.toJSON({
'set_id': '<?php echo $this->set->set_id; ?>',
'rating': '<?php # echo $this->rating; ?>'
});
}
}
});
});
コントローラーのように機能するウィジェット ページ:
protected function _prepareShow()
{
$setId = $this->_request->getParam('set_id');
$rating = $this->_request->getParam('rating');
$conn = XXX_Db_Connection::factory()->getSlaveConnection();
$setDao = XXX_Model_Dao_Factory::getInstance()->setModule('media')->getSetDao();
$setDao->setDbConnection($conn);
$data = Zend_Json::encode(array('set_id' => $setId, 'rating' => $rating));
$this->_view->assign('rating', $rating);
$this->_view->assign('data', $data);
}
protected function _prepareResult()
{
$setId = $this->_request->getParam('set_id');
$rating = $this->_request->getParam('rating');
$conn = XXX_Db_Connection::factory()->getMasterConnection();
$setDao = XXX_Model_Dao_Factory::getInstance()->setModule('media')->getSetDao();
$setDao->setDbConnection($conn);
$setDao->increaseRating($rating);
$data = Zend_Json::encode(array('set_id' => $setId, 'rating' => $rating));
$this->_view->assign('rating', $rating);
$this->_view->assign('data', $data);
}
最後になりましたが、SQL ステートメントは次のとおりです。
public function increaseRating($rating)
{
$sql = sprintf("UPDATE " . $this->_prefix . "media_set
SET rating = rating + '%s'
WHERE set_id = '%s'",
mysql_real_escape_string($rating->rating),
mysql_real_escape_string($rating->set_id));
mysql_query($sql);
return mysql_affected_rows();
}
ラジオを選択してボタンを押すと、アドレスバーのリンクの後に ?rating=.1 が表示されますが、データベースは更新されません。
どんな提案でも役に立ちます。再度、感謝します。