【问题标题】:Updating table using another table's value multiple times多次使用另一个表的值更新表
【发布时间】:2015-10-30 07:44:45
【问题描述】:

对我来说,这是一个简单的问题,但我已经寻找了好几天但没有找到合适的解决方案。

我有三张桌子。一份用于联系人,一份用于州,一份用于是/否问题。联系人表是主表,它引用其他两个表以获取某些字段的值。是/否表在联系人表中被引用了 3 次。状态表被引用一次。

我已经能够使用适当的选择框对插入 php 文件进行编码,该选择框显示状态和是/否表中的值并将值插入到联系人表中。

我遇到的问题是更新 php 文件。我无法找到可用于多次使用是/否表来更新联系人表中的字段的代码示例。

我正在使用当前版本的 xampp 和当前版本的 php 和 mysql。我正在使用 PDO 作为与 mysql 的连接进行编码。

这是当前更新 mysql 代码(我知道需要与 states 和 yesno 表建立连接,我只是不知道应该是什么。)

<?php

require '../app/start.php';

if (!empty($_POST)) {
    $id = $_POST['id'];
    $deceased = $_POST['deceased'];
    $active = $_POST['active'];
    $realname = $_POST['realname'];
    $slug = $_POST['slug'];
    $nickname = $_POST['nickname'];
    $prefernick = $_POST['prefernick'];
    $dob = $_POST['dob'];
    $address = $_POST['address'];
    $city = $_POST['city'];
    $statelookup = $_POST['statelookup'];
    $zipcode = $_POST['zipcode'];
    $phone = $_POST['phone'];
    $email = $_POST['email'];
    $emailtwo = $_POST['emailtwo'];
    $facebook = $_POST['facebook'];
    $twitter = $_POST['twitter'];

    $updatePage = $db ->prepare("
        UPDATE contacts
        SET
            deceased = :deceased,
            active = :active,
            realname = :realname,
            slug = :slug,
            nickname = :nickname,
            prefernick = :prefernick,
            dob = :dob,
            address = :address,
            city = :city,
            statelookup = :statelookup,
            zipcode = :zipcode,
            phone = :phone,
            email = :email,
            emailtwo = :emailtwo,
            facebook = :facebook,
            twitter = :twitter,
            updated = NOW()
        WHERE id = :id
    ");

    $updatePage->execute([
        'id' => $id,
        'deceased' => $deceased,
        'active' => $active,
        'realname' => $realname,
        'slug' => $slug,
        'nickname' => $nickname,
        'prefernick' => $prefernick,
        'dob' => $dob,
        'address' => $address,
        'city' => $city,
        'statelookup' => $statelookup,
        'zipcode' => $zipcode,
        'phone' => $phone,
        'email' => $email,
        'emailtwo' => $emailtwo,
        'facebook' => $facebook,
        'twitter' => $twitter,
    ]);

    header('Location: ' . BASE_URL . '/adminix/list-contacts.php');
}

if (!isset($_GET['id'])) {
    header('Location: ' . BASE_URL . '/adminix/list-contacts.php');
        die();
}

$page = $db->prepare("
    SELECT *
    FROM contacts
    WHERE id = :id
");

$page->execute(['id' => $_GET['id']]);

$page = $page->fetch(PDO::FETCH_ASSOC);

require VIEW_ROOT . '/adminix/edit-contacts.php';

这是当前更新的 php 代码和表单(我知道需要更改选择选项,我只是不知道从联系人表中提取现有值应该是什么,但也显示可用来自 states 表或 yesno 表的选项。)

<?php require VIEW_ROOT . '/templates/header.php'; ?>

<?php
// Require SQL Look-ups

$yesno1 = $db->query("
    SELECT *
    FROM yesno
    ORDER BY yesno_id DESC
")->fetchAll(PDO::FETCH_ASSOC);

$yesno2 = $db->query("
    SELECT *
    FROM yesno
    ORDER BY yesno_id ASC
")->fetchAll(PDO::FETCH_ASSOC);

$states = $db->query("
    SELECT *
    FROM states
    ORDER BY states_id DESC
")->fetchAll(PDO::FETCH_ASSOC);

?>

    <h2>EDIT CONTACTS PAGE</h2>

    <form action="<?php echo BASE_URL; ?>/adminix/edit-contacts.php" method="POST" autocomplete="off">

        <table width="100%" border="1">
            <tr>
                <td>
                    <label for="deceased">
                        Deceased:
                    </label>
                </td>
                <td>
                    <select name="deceased" id="deceased">
                        <?php
                        foreach ($yesno1 as $rowone) {
                            print '<option selected="'.$page['deceased'].'">'.$rowone['yesno'].'</option>';
                        }
                        ?>
                    </select>
                </td>
            </tr>
            <tr>
                <td>
                    <label for="active">
                        Active:
                    </label>
                </td>
                <td>
                    <select name="active" id="active">
                        <?php
                        foreach ($yesno2 as $rowtwo) {
                            print '<option value="'.$rowtwo['yesno_id'].'">'.$rowtwo['yesno'].'</option>';
                        }
                        ?>
                    </select>
                </td>
            </tr>
            <tr>
                <td>
                    <label for="realname">
                        Real Name:
                    </label>
                </td>
                <td>
                    <input type="text" name="realname" id="realname" value="<?php echo escape($page['realname']); ?>">
                </td>
            </tr>
            <tr>
                <td>
                    <label for="slug">
                        Slug:
                    </label>
                </td>
                <td>
                    <input type="text" name="slug" id="slug" value="<?php echo escape($page['slug']); ?>">
                </td>
            </tr>
            <tr>
                <td>
                    <label for="nickname">
                        Nick Name:
                    </label>
                </td>
                <td>
                    <input type="text" name="nickname" id="nickname" value="<?php echo escape($page['nickname']); ?>">
                </td>
            </tr>
            <tr>
                <td>
                    <label for="prefernick">
                        Prefer Nick Name:
                    </label>
                </td>
                <td>
                    <select name="prefernick" id="prefernick">
                        <?php
                        foreach ($yesno2 as $rowthree) {
                            print '<option value="'.$rowthree['yesno_id'].'">'.$rowthree['yesno'].'</option>';
                        }
                        ?>
                    </select>
                </td>
            </tr>
            <tr>
                <td>
                    <label for="dob">
                        Date of Birth:
                    </label>
                </td>
                <td>
                    <input type="date" name="dob" id="dob"  value="<?php echo escape($page['dob']); ?>">
                </td>
            </tr>
            <tr>
                <td>
                    <label for="address">
                        Address:
                    </label>
                </td>
                <td>
                    <input type="text" name="address" id="address"  value="<?php echo escape($page['address']); ?>">
                </td>
            </tr>
            <tr>
                <td>
                    <label for="city">
                        City:
                    </label>
                </td>
                <td>
                    <input type="text" name="city" id="city"  value="<?php echo escape($page['city']); ?>">
                </td>
            </tr>
            <tr>
                <td>
                    <label for="statelookup">
                        State:
                    </label>
                </td>
                <td>
                    <select name="statelookup" id="statelookup">
                        <?php
                        foreach ($states as $rowfour) {
                            print '<option value="'.$rowfour['states_id'].'">'.$rowfour['state_lookup'].'</option>';
                        }
                        ?>
                    </select>
                </td>
            </tr>
            <tr>
                <td>
                    <label for="zipcode">
                        Zip Code:
                    </label>
                </td>
                <td>
                    <input type="text" name="zipcode" id="zipcode"  value="<?php echo escape($page['zipcode']); ?>">
                </td>
            </tr>
            <tr>
                <td>
                    <label for="phone">
                        Phone:
                    </label>
                </td>
                <td>
                    <input type="text" name="phone" id="phone"  value="<?php echo escape($page['phone']); ?>">
                </td>
            </tr>
            <tr>
                <td>
                    <label for="email">
                        Email:
                    </label>
                </td>
                <td>
                    <input type="text" name="email" id="email"  value="<?php echo escape($page['email']); ?>">
                </td>
            </tr>
            <tr>
                <td>
                    <label for="emailtwo">
                        Email Two
                    </label>
                </td>
                <td>
                    <input type="text" name="emailtwo" id="emailtwo"  value="<?php echo escape($page['emailtwo']); ?>">
                </td>
            </tr>
            <tr>
                <td>
                    <label for="facebook">
                        Facebook:
                    </label>
                </td>
                <td>
                    <input type="text" name="facebook" id="facebook"  value="<?php echo escape($page['facebook']); ?>">
                </td>
            </tr>
            <tr>
                <td>
                    <label for="twitter">
                        Twitter:
                    </label>
                </td>
                <td>
                    <input type="text" name="twitter" id="twitter"  value="<?php echo escape($page['twitter']); ?>">
                </td>
            </tr>
            <tr>
                <td>
                    <input type="hidden" name="id" value="<?php echo escape($page['id']) ?>">
                    <input type="submit" value="Submit Edited Contact">
                </td>
            </tr>
        </table>

    </form>

<?php require VIEW_ROOT . '/templates/footer.php'; ?>

yesno 表有两个字段,yesno_id 和 yesno,yesno 字段的值是 Yes 和 No。states 表有两个字段 states_id 和 state_lookup 以及美国五十个州的列表。

我们将不胜感激任何可以提供的帮助。

【问题讨论】:

  • 你能缩短这个来解决问题吗?很难理解您的要求。
  • 当然,我遇到的困难是显示字段“已故”的值,该字段与 yesno 表的 id 相关联,但也显示其他值以更新它。因此,如果“已故”的值为 1,并且 yesno 表中对应的 id 为 1,那么在更新表单上,我想显示是,但有一个下拉菜单显示其他选项,以防需要更改做出来。 @dlporter98
  • 问题是我在contacts表的三个字段中使用了yesno表值,所以当我尝试使用我在网上找到的单字段解决方案时会导致错误。 @dlporter98

标签: php mysql forms pdo updates


【解决方案1】:

好的,我想我明白了。 yesno 表的结构不足以满足您的需求。实际上,我建议您根本不要使用该表。而是将“已故”和“首选”的列类型更改为 enum

deceased ENUM('Yes', 'No')
prefernick ENUM('Yes', 'NO')

然后在你的html中

<select name="deceased" id="deceased">
<option <?php echo $page['deceased'] === 'Yes' ? 'selected' : ''; ?> value="Yes">Yes</option>
<option <?php echo $page['deceased'] === 'No' ? 'selected' : ''; ?> value="No">No</option>
</select>

请务必对“prefernick”选择执行相同操作。

在你的 PHP 中:

   //You forgot to prefix the keys with colons.
   $updatePage->execute([
        ':id' => $id,
        ':deceased' => $deceased,
        ':active' => $active,
        ':realname' => $realname,
        ':slug' => $slug,
        ':nickname' => $nickname,
        ':prefernick' => $prefernick,
        ':dob' => $dob,
        ':address' => $address,
        ':city' => $city,
        ':statelookup' => $statelookup,
        ':zipcode' => $zipcode,
        ':phone' => $phone,
        ':email' => $email,
        ':emailtwo' => $emailtwo,
        ':facebook' => $facebook,
        ':twitter' => $twitter,
    ]);

希望对你有帮助

【讨论】:

  • 非常感谢!那行得通。我不知道 ENUM 选项,但会使用它。我尝试按照您的建议将“:”放在前面,但是没有用,当我删除“:”时,它确实有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-18
  • 1970-01-01
相关资源
最近更新 更多