多次使用另一个 table 的值更新 table

Updating table using another table's value multiple times

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

我有三个 table。一份用于联系人,一份用于州,一份用于 yes/no 个问题。联系人 table 是主要的 table,它引用其他两个 table 来获取某些字段的值。 yes/no table 在联系人 table 中被引用了 3 次。状态 table 被引用一次。

我已经能够使用适当的 select 框对插入的 php 文件进行编码,该框显示来自各州和 yes/no tables 的值并将值插入联系人 table。

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

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

这是当前更新 mysql 代码(我知道需要与各州建立联系,是的 tables,我只是不知道应该是什么。)

<?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 代码和表格(我知道需要更改 select 选项,我只是不知道拉现有值应该是什么来自联系人 table,但也显示来自状态 table 或 yesno table 的可用选项。)

<?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 table 有两个字段,yesno_id 和 yesno,yesno 字段的值为 Yes 和 No。状态 table 有两个字段,states_id和 state_lookup 以及五十个列表 U.S。美国。

如能提供任何帮助,我们将不胜感激。

好的,我想我明白了。 yesno table 的结构不足以满足您的需要。事实上,我建议您根本不要使用 table。而是将 'deceased' 和 'prefernick' 的列类型更改为 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' select 也执行相同的操作。

在你的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,
    ]);

希望对您有所帮助