【问题标题】:How to check whether dropbox item is selected?如何检查是否选择了Dropbox项目?
【发布时间】:2011-07-21 20:57:24
【问题描述】:

我有一个带有两个表的 mysql 数据库:

table1 (id, name, emailid)
table2 (id, email)
  • emailid 是与 table2.id 的关系

我正在尝试制作一个 html 表单,其中列出了 table1 的内容,并带有一个下拉框,供用户选择电子邮件字段。电子邮件字段由来自table2<options> 填充。

我的问题是:如何检查已为 emailid 选择的值,并在表单加载 selected="selected" 时使其成为下拉框中已选择的项目?

我已经找到了一种可行的解决方案,但我认为这不是正确的方法,并且正在寻找最佳实践方法。

我目前的做法仅适用于从table1 提取的一项,但如果超过 1 项则不行。

到目前为止,这是我的代码:

这是我获取数据以制作表单的地方:

<?php
$sql = "SELECT table1.id as table1id, table1.name, table2.id as table2id
        FROM table1
        INNER JOIN table2 ON table1.emailid = table2.id
        WHERE table1.id = {$id}"; 
$result = mysqli_query($link, $sql); 
$row = mysqli_fetch_array($result); 
$items1 = array('table1id' => $row['table1id'] 
                'name' => $row['table1.name'] 
                'table2id' => $row['table2id']); 

$sql = "SELECT id, email FROM table2"; 
$result = mysqli_query($link, $sql); 
$row = mysqli_fetch_array($result); 
while ($row = mysqli_fetch_array($result)) { 
    $items2[] = array('id' => $row['id'], 
                 'email' => $row['email'], 
                 'selected' => ($row['id'] == $items1['table2id']) ? ' selected="selected" ' : ''); 
}
?>

这是我的 HTML:

<tr> 
    <td><?php echo $items1['name']; ?></td>
    <td><input type="hidden" name="table1id" value="<?php echo $items1['table1id']; ?>" />
        <?php echo $items1['table1id']; ?></td>
    <td>
        <select name="email"> 
        <?php foreach ($items2 as $item2): ?> 
            <option value="<?php echo $item2['id']; ?>"<?php echo $item2['selected']; ?>>
            <?php echo $item2['email']; ?></option> 
        <?php endforeach; ?>
        </select>
    </td> 
</tr>

这是表单的更新方式:

<?php
$id = mysql_real_escape_string($_POST['table1id']); 
$email = mysql_real_escape_string($_POST['email']); 

$sql = "UPDATE table1 SET emailid = {$email} WHERE id = {$id}"; 
?>

【问题讨论】:

  • 是table1和table2s的id主键吗?
  • 是的,table1 PK 是 id,table2 PK 是 id。 table1.table2id 填充了 table2.id 以便我可以检测到它是什么电子邮件
  • 你想要一个查询吗?
  • 我已经编辑了 OP 并放入了我当前的代码。如您所见,它将起作用。但是,它只适用于 table1 中的一条记录,我不确定这是否是正确的方法。
  • 更新了我的答案以反映您的代码。

标签: php mysql html forms


【解决方案1】:

编辑 既然你有代码,就杀掉其他东西。

// Lets make our table2 the primary so we can organize our values in the $items array.
$sql = "SELECT table1.id as table1id, table1.name, table2.id as table2id, table2.email 
    FROM table2
    LEFT JOIN table1 ON table2.emailid = table1.id";
    // Do you need this WHERE?  I'm thinking not.
    // WHERE table1.id = {$id}";  
$items = array();
while($row = mysqli_fetch_array($result)) {
  // This will get set every time through the loop, but this is ok.
  // You can check to see if its set and then set or not set.
  $items[$row['table1id']]['name'] = $row['name'];
  // We will keep appending email values here to the table1id array.
  $items[$row['table1id']]['emails'][] = $row['email'];
}

现在我们已经将所有项目都放在一个适合我们的数组中,让我们进行 HTML 标记。

<?php foreach($items as $id => $item): ?>    
<tr> 
  <td><?php echo $item['name']; ?></td>
  // Do you really need this hidden field?
  <td><input type="hidden" name="table1id" value="<?php echo $id; ?>" /><?php echo $id; ?></td>
  <td>
    // Updated this to be unique for each id iteration.
    <select name="email_<?php echo $id; ?>">
    // Might want to consider a is_array() check on this value.
    <?php foreach ($item['email'] as $email): ?>
        <?php $selected = $email == $_POST['email_'. $id] ? ' selected="selected"' : ''; ?>
        <option value="<?php echo $email; ?>"<?php echo $selected; ?>>
        <?php echo $email; ?></option> 
    <?php endforeach; ?>
    </select>
  </td> 
</tr>
<?php endforeach; ?>

我没有对此进行测试,因此它可能无法用作复制和粘贴。但我认为这可以让你现在正确地前进。

【讨论】:

  • 如果您查看 OP 评论,table2.id 是主键~所以您的查询最多获取一行~~~
  • 嗯,他想要一个查询吗?
  • 我不太清楚他想要什么~看起来table2只是一个所有电子邮件地址的大池,然后他将它们分配给table1中的各个行
猜你喜欢
  • 1970-01-01
  • 2019-02-25
  • 1970-01-01
  • 1970-01-01
  • 2013-03-17
  • 2016-04-01
  • 2014-03-28
  • 2017-06-11
  • 2016-08-26
相关资源
最近更新 更多