我是这个论坛的新手,刚刚开始在php编码。需要一些帮助。我有以下代码
<?php error_reporting(-1);
require_once('/mysql/sql_connect.php');
$q = "SELECT pty.pty_profile_name AS profile FROM pty, users WHERE users.username = 'testaccount' ";
$r = @mysqli_query ($dbc, $q);
$results_array = array();
while($row = mysqli_fetch_assoc($r)) {
array_push($results_array, $row);
echo "<pre>"; print_r($results_array); echo "</pre>"; }
?>
<p>
<form method="post" action="foreach2.php">
<label for="Property Select" class="title">Select Property</label>
<select name="pty_select" >
<?php foreach($results_array as $key => $value){ ?>
<option value="<?php echo $key; ?>"><?php echo $value['profile']; ?></option>
<?php } ?>
</select>
<input type="submit" name="Submit" />
</form>
<?php
if (isset($_POST['Submit'])) {
echo "<pre>"; echo ($_POST['pty_select']); echo "</pre>"; } ?>
我得到的输出是正确的,但它根据我在表单中选择的内容显示键,例如0或1或2。我需要输出值。例如0 = Emerton
,它输出“0”而不是Emerton
。
如果我回显$value['profile']
而不是pty_select
,我会一直得到查询的最后结果。在这个例子中,2是Ambarvale
,我相信它只选择查询的最后一行输出。
我希望我有道理。提前谢谢。
答案 0 :(得分:3)
显然会回显键,因为您将选项的值指定为$key
如果您需要$_POST['pty_select']
中的选项,请使用此选项:
<select name="pty_select" >
<?php foreach($results_array as $key => $value){ ?>
<option value="<?php echo $value['profile'];?>"><?php echo $value['profile']; ?></option>
<?php } ?>
</select>
答案 1 :(得分:1)
提供
<option value="<?php echo $value['profile']; ?>"><?php echo $value['profile']; ?></option>
而不是
<option value="<?php echo $key; ?>"><?php echo $value['profile']; ?></option>
答案 2 :(得分:1)
现在让我们进入理想世界:)
为选项构建数据对database_id => name
:
$q = "SELECT pty.id, pty.pty_profile_name AS profile FROM pty, users
WHERE users.username = 'testaccount'";
$r = mysqli_query($dbc, $q);
$values = array();
while($r = mysqli_fetch_row($r)) {
$values[$r[0]] = $r[1];
}
在使用数据库时永远不要使用@
,为什么要抑制错误而不是阻止/处理错误?
现在您拥有真正的数据库ID和相应的值(通常,使用唯一ID更好......如果没有别的东西,他们有更多的熵 - 更有效的搜索)。显示选择框的sice在网站中非常常见,让我们:
function selectbox( $values = array(), $attributes = array(), $selected_value = null)
{
// Header
echo '<select';
foreach( $attributes as $key => $val){
echo ' ' . htmlspecialchars($key) . '="' . htmlspecialchars( $val) . '"';
}
echo '>';
// Values
foreach( $values as $key => $val){
echo '<option value="' . htmlspecialchars( $key) .'"';
if( $key === $selected_value){
echo ' selected="selected"';
}
echo '>' . htmlspecialchars( $val) . '</option>';
}
echo '</select>';
}
现在用法:)
<form method="post" action="foreach2.php">
<label for="Property Select" class="title">Select Property</label>
<?php selectbox( $values, array( 'name' => 'pty_select')); ?>
<input type="submit" name="Submit" />
</form>
然后该怎么办?
$id = (int)(isset( $_POST['pty_select']) ? $_POST['pty_select'] : 0);
$name = null;
if( $id && isset( $values[$id])){
$name = $values[$id];
}
答案 3 :(得分:0)
你的意思是你需要你用来显示它的值。 然后, 改为:
<option value="<?php echo $value['profile']; ?>">
<?php echo $value['profile']; ?>
</option>
答案 4 :(得分:0)
if (isset($_POST['Submit'])) {
echo "<pre>"; echo ($_POST['pty_select']); echo "</pre>"; } ?>
将其更改为
if(isset($_POST['Submit'])) {
echo $results_array[$_POST['pty_select']]['profile'];
}
或者使用配置文件选项值。