如何使用 pdo 发送数组以在 smarty 3.1.21 的 html_options 中使用它
How to send an array with pdo to use it in html_options of smarty 3.1.21
我正在将使用 MySQL 的部分更新为 PDO 以显示 Smarty 的 {html_options}
.此代码实际上适用于 MySQL,但我不知道如何使用 PDO.
获得相同的结果
这是实际运行良好的代码:
// Send states
$q="SELECT id, state FROM states";
$data=$db->execute($q);
$idStates=array();
$states =array();
for ($i=0; $i<sizeof($data);$i++) {
array_push($idStates,$data[$i]->id);
array_push($states,$data[$i]->state);
}
$smarty->assign('idStates',$idStates);
$smarty->assign('states',$states);
然后在 .tpl 文件中一切正常
<select name="des_idState" class="form-control">
<option>Select state</option>
{html_options output="$states" values="$idStates" selected=$data.idState}
</select>
我尝试使用 PDO 做的事情使用 {foreach}
效果很好,但我需要使用 selected
,我认为使用 Smarty 的 {html_options} 最简单, 但我不知道如何从 PDO 发送数组。
$sql1="SELECT id, state FROM states";
$stmt = $dba->prepare($sql1);
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$idStates = $row['id'];
$states = $row['state'];
$smarty->assign('idStates', $idStates);
$smarty->assign('states',$states);
}
我一直在尝试使用此代码显示使用 echo $idStates . ' ' . $states . '<br>';
的数组,但它在 {html_options} 中不起作用,没有显示,没有错误,只是一个空白 space.
有人可以帮我吗?
我知道这个问题发布已经有一段时间了,但是您找到问题的解决方案了吗?我相信您可以通过最少的代码修改将 id 和 state 变量修复为数组。
在下面的示例中,我在开头添加了 id 和 state 数组声明,以确保数组为空(作为下一步的预防措施)。然后我将 $idStates=
更改为 $idStates[]=
并将 $states=
更改为 $states[]=
,这将在每个循环中将当前值添加到这些数组。最后,我将 smarty 变量赋值移动到 while 循环之后,以便数组将被完全填充。这是修改后的代码:
$sql1="SELECT id, state FROM states";
$stmt = $dba->prepare($sql1);
$stmt->execute();
$idStates = array();
$states = array();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$idStates[] = $row['id'];
$states[] = $row['state'];
}
$smarty->assign('idStates', $idStates);
$smarty->assign('states',$states);
我还在下面提供了一个替代解决方案,该解决方案应该 return 相同的数据。在此示例中,我使用 $stmt->fetchAll
而不是 $stmt->fetch
一次获取所有行,然后将它们存储在关联数组中。然后我在声明 smarty 赋值时使用 array_column,它将 id 和 state 列与 $rows
关联数组分开。这样可以在不牺牲可读性的情况下减少代码:
$sql1 = "SELECT id, state FROM states";
$stmt = $dba->prepare($sql1);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
$smarty->assign('idStates', array_column($rows, 'id'));
$smarty->assign('states', array_column($rows, 'states'));
我正在将使用 MySQL 的部分更新为 PDO 以显示 Smarty 的 {html_options}
.此代码实际上适用于 MySQL,但我不知道如何使用 PDO.
这是实际运行良好的代码:
// Send states
$q="SELECT id, state FROM states";
$data=$db->execute($q);
$idStates=array();
$states =array();
for ($i=0; $i<sizeof($data);$i++) {
array_push($idStates,$data[$i]->id);
array_push($states,$data[$i]->state);
}
$smarty->assign('idStates',$idStates);
$smarty->assign('states',$states);
然后在 .tpl 文件中一切正常
<select name="des_idState" class="form-control">
<option>Select state</option>
{html_options output="$states" values="$idStates" selected=$data.idState}
</select>
我尝试使用 PDO 做的事情使用 {foreach}
效果很好,但我需要使用 selected
,我认为使用 Smarty 的 {html_options} 最简单, 但我不知道如何从 PDO 发送数组。
$sql1="SELECT id, state FROM states";
$stmt = $dba->prepare($sql1);
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$idStates = $row['id'];
$states = $row['state'];
$smarty->assign('idStates', $idStates);
$smarty->assign('states',$states);
}
我一直在尝试使用此代码显示使用 echo $idStates . ' ' . $states . '<br>';
的数组,但它在 {html_options} 中不起作用,没有显示,没有错误,只是一个空白 space.
有人可以帮我吗?
我知道这个问题发布已经有一段时间了,但是您找到问题的解决方案了吗?我相信您可以通过最少的代码修改将 id 和 state 变量修复为数组。
在下面的示例中,我在开头添加了 id 和 state 数组声明,以确保数组为空(作为下一步的预防措施)。然后我将 $idStates=
更改为 $idStates[]=
并将 $states=
更改为 $states[]=
,这将在每个循环中将当前值添加到这些数组。最后,我将 smarty 变量赋值移动到 while 循环之后,以便数组将被完全填充。这是修改后的代码:
$sql1="SELECT id, state FROM states";
$stmt = $dba->prepare($sql1);
$stmt->execute();
$idStates = array();
$states = array();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$idStates[] = $row['id'];
$states[] = $row['state'];
}
$smarty->assign('idStates', $idStates);
$smarty->assign('states',$states);
我还在下面提供了一个替代解决方案,该解决方案应该 return 相同的数据。在此示例中,我使用 $stmt->fetchAll
而不是 $stmt->fetch
一次获取所有行,然后将它们存储在关联数组中。然后我在声明 smarty 赋值时使用 array_column,它将 id 和 state 列与 $rows
关联数组分开。这样可以在不牺牲可读性的情况下减少代码:
$sql1 = "SELECT id, state FROM states";
$stmt = $dba->prepare($sql1);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
$smarty->assign('idStates', array_column($rows, 'id'));
$smarty->assign('states', array_column($rows, 'states'));