2

我是这个论坛的新手,刚刚开始用 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

如果我 echo$value['profile']而不是pty_select,我会一直得到查询的最后一个结果。在这个例子中是 2,Ambarvale我相信它只是选择查询的最后一行输出。

我希望我说得通。提前致谢。

4

5 回答 5

4

它显然会回显键,因为您分配了选项的值,就$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>
于 2013-04-16T10:13:20.830 回答
3

你的意思是你需要你用来显示它的值。然后,更改为:

<option value="<?php echo $value['profile']; ?>">
    <?php echo $value['profile']; ?>
</option> 
于 2013-04-16T10:12:51.110 回答
2

现在让我们进入理想世界:)

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];
}
于 2013-04-16T10:35:00.427 回答
1

<option value="<?php echo $value['profile']; ?>"><?php echo $value['profile']; ?></option> 

代替

<option value="<?php echo $key; ?>"><?php echo $value['profile']; ?></option> 
于 2013-04-16T10:12:25.990 回答
0
if (isset($_POST['Submit'])) {
echo "<pre>"; echo ($_POST['pty_select']); echo "</pre>"; } ?> 

将其更改为类似

if(isset($_POST['Submit'])) {
    echo $results_array[$_POST['pty_select']]['profile'];
}

或者使用配置文件选项值。

于 2013-04-16T10:14:48.643 回答