2011-07-20 64 views
0

我有一个MySQL数据库包含两个表:如何检查是否选择了保管箱项目?

table1 (id, name, emailid) 
table2 (id, email) 
  • emailidtable2.id

我试图做一个HTML表单,列出表1中的内容有一个下拉的关系框供用户选择电子邮件字段。电子邮件字段由table2填入<options>

我的问题是:如何检查emailid已选择了什么值,并在表单加载selected="selected"时在Dropbox中选择已选项目?

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

我目前在做一个项目从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}"; 
?> 
+0

是table1和table2s''id'主键? – Shad

+0

是table1 PK是id,table2 PK是id。 table1.table2id填充table2.id,以便我可以检测到它是什么电子邮件 –

+0

我们可以看到代码吗? – Eric

回答

0

编辑 杀了,现在你有代码了其他的东西。

// 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; ?> 

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

+0

如果你看看OP评论,'table2'.'id'是主键〜所以你正在查询一行最大值~~~ – Shad

+0

是的,我重读。谢谢。 – iLLin

+0

嗯,他想要一个单一的查询? – iLLin

相关问题