我对Yii完全不熟悉,即使它看起来微不足道,我也需要帮助。我有一个页面,我从我的数据库生成一个表,我添加了一个搜索选项,我还需要生成一个表作为一个表。
问题是当我点击按钮时没有任何反应。 我也尝试使用提交,但它没有用。
这是我的代码:
...视图/超市/ index.php的:
<?php
use yii\helpers\Html;
use yii\widgets\LinkPager;
use app\views\supermarkets\search;
?>
<h1>Supermarkets</h1>
<ul>
<p>
Search by Name
</p>
<INPUT TYPE = "Text" VALUE ="" NAME = "searchname">
<button onclick="myFunction($_POST['searchname'])">Search</button>
<h3> </h3>
<?php
$array = (array) $supermarkets;
function myFunction($sname){
if (isset($sname) && $sname!='') {
$row = Yii::app()->db->createCommand(array(
'select' => '*',
'from' => 'supermarkets',
'where' => array('like', 'Name','%'.$sname.'')
))->queryRow();
$array = (array) $row;
}
echo $array;
$this->render('index',array('supermarkets' => $array));
}
function build_table($array){
// start table
$html = '<table class="altrowstable" id="alternatecolor">';
// header row
$html .= '<tr>';
foreach($array[0] as $key=>$value){
$html .= '<th>' . $key . '</th>';
}
$html .= '</tr>';
// data rows
foreach( $array as $key=>$value){
$html .= '<tr>';
foreach($value as $key2=>$value2){
$html .= '<td>' . $value2 . '</td>';
}
$html .= '</tr>';
}
// finish table and return it
$html .= '</table>';
return $html;
}
echo build_table($array);
?>
<?= LinkPager::widget(['pagination' => $pagination]) ?>
即使在调试中它也不会通过myFunction。有什么建议吗?
答案 0 :(得分:1)
你应该遵循正确的Yii语法,即在控制器中定义你的函数,并通过在index.php或其他视图文件上创建按钮来调用该函数,如:
查看文件上的按钮:
<?= Html::a('Search', ['search-function', 'Name' => $this->$sname], ['class' => 'btn btn-success']) ?>
在你的控制器中:
//定义函数时
public function actionSearchFunction($sname){
if (isset($sname) && $sname!='') {
$row = Yii::app()->db->createCommand(array(
'select' => '*',
'from' => 'supermarkets',
'where' => array('like', 'Name','%'.$sname.'')
))->queryAll();
$array = (array) $row;
答案 1 :(得分:0)
我会一步一步解释你。首先,请注意<?php ?>
标记内的所有内容都将在呈现视图之前在服务器上生成 。所以,你不能在客户端上执行php代码。如果需要从客户端执行某些服务器代码,则需要使用Ajax(异步JavaScript和XML)。我建议你学习ajax,因为这在web应用程序中非常有用。好的,让我们解决你的问题。第一步是定义按钮单击的事件。您已经myFunction
,我将其更改为:
<button onclick="myFunction();">Search</button>
我将您的输入更改为:
<input type="text" value ="" name="searchname", id="searchname">
现在,我在myFunction()
标记中写了<script></script>
正文:
<script>
function myFunction()
{
$.ajax({
url: '<?php echo Yii::app()->baseUrl . '/supermarkets/sample' ?>',
type: 'post',
data: {searchname: $("#searchname").val()},
success: function (data) {
alert(data);
}
});
}
</script>
现在,您需要在控制器中为ajax请求定义一个操作。我以为你有SupermarketsController
。尝试在其中写下actionSample()
:
public function actionSample()
{
$array = (array) $supermarkets;
$sname = $_POST['searchname'];
...
echo "ok";
}
您可以访问该函数中的搜索输入值,并且您的所有php代码都必须存在。在该操作的最后一行,您必须回显某些内容(数据或消息)。在echo之后放置的所有内容,您都可以将其作为data
ajax请求事件的success
参数获取。在我的示例中,您将在浏览器中看到“ok”警报。我希望我的解释可以帮助你学习ajax。请注意,您需要包含用于使用ajax的jquery库。祝你好运的朋友:)