php - 多号码电话簿 (PHP-PDO)

标签 php mysql pdo

我需要使用 PHP 和 MySQL 创建一个包含多个电话号码的电话簿。

这是电话表:

+----+---------+--------+
| ID | user_id | number |
+----+---------+--------+
|  1 |    1    | 111111 |
|  2 |    1    | 222222 |
|  3 |    1    | 333333 |
|  4 |    2    | 111111 |
+----+---------+--------+

这是我的代码:

<?php
    $conn = new PDO("mysql:host=127.0.0.1;dbname=phonebook", "root", "");

    if ($_SERVER['REQUEST_METHOD'] == "POST") {
        $newPhones = $_POST['phones'];

        foreach ($newPhones as $i => $newPhone) {
            //If the user modify a saved number, UPDATE.
            //else INSERT.
        }
    }

    $resp = $conn->query("SELECT number FROM `phones` WHERE `user_id`=1");
    while ($phone = $resp->fetch(PDO::FETCH_ASSOC)) $phones[] = $phone['number'];
?>

<html>
    <head>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
    </head>
    <body>
        <hr>
        <form action="" method="POST">
            <div class="phones">
                <?php if (!isset($phones)) $phones[] = ''; ?>
                <?php foreach ($phones as $i => $phone): ?>
                    <div class="phone">
                        <input type="text" name="phones[]" value="<?=$phone?>" /><a href="#" class="remove" style="<?php if ($i==0) echo "display:none;"; ?>">Remove</a>
                    </div>
                <?php endforeach; ?>
            </div>
            <a id="add" href="#">New</a>
            <input type="submit" name="submit" value="Save" />
        </form>
    </body>
</html>

<script type="text/javascript">
    $('#add').on('click',function(e){$('.phones').after($('.phones .phone:first').clone(true,true).children('.remove').show().end().find("input:text").val("").end());e.preventDefault();});
    $('.remove').on('click',function(e){$(this).parent().remove();e.preventDefault();});
</script>

我的问题是当用户修改或添加电话号码时,如何在 HTML 表单中插入用户输入的新电话号码或更新用户更改的电话号码?

编辑#1: 我在我的表中添加了一列名为“position”的列,我正在尝试使用 POST 数组中电话的位置编号来识别它。

这是我的新表:

+----+---------+--------+----------+
| ID | user_id | number | position |
+----+---------+--------+----------+
|  1 |    1    | 111111 |    0     |
|  2 |    1    | 222222 |    1     |
|  3 |    1    | 333333 |    2     |
|  4 |    2    | 111111 |    0     |
+----+---------+--------+----------+

这是我的新 PHP 提交代码:

if ($_SERVER['REQUEST_METHOD'] == "POST") {
    $newPhones = $_POST['phones'];

    foreach ($newPhones as $i => $newPhone) {
        $resp = $conn->query("UPDATE `phones` SET `number`={$newPhone} WHERE `user_id`=1 AND `position`={$i} LIMIT 1");
    }
}

但现在,问题是,UPDATE 仅在该行存在时有效,但如果不存在,我该如何插入它?

我尝试使用 PDO::rowCount 函数返回的值(如果它返回 0,则插入它)。但如果该值未被修改,PDO::rowCount 也返回 0。

我该如何解决这个问题?

最佳答案

我的建议如下(但是,这在您知道用户 ID 的基础上有效——您的问题有一个硬编码的用户 ID):

  1. 开始交易
  2. 删除您所有的职位和用户
  3. 插入所有新位置

这样您就无需担心更新或 key - 您只需重置该用户数据 block 即可。

请注意,交易很重要 - 您不希望发现您删除了您的条目,然后您的代码失败并且您失去了您拥有的东西。

希望对您有所帮助。

关于php - 多号码电话簿 (PHP-PDO),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36683375/

相关文章:

mysql - 聚合 MySQL 数据,我正在使用 group by,但它并没有完全按照我的意愿进行

PHP in_array 没有找到那里的值(value)

PHP PDO MYSQL - 获取不返回结果的地方

php - 如何使用复选框在 mySQL 中输入 true (1) 或 false (0) 并在 php/html 表单中显示为选中状态?

php - 如何在页面上查找 url

php - PHP while 循环中的 MySQL 查询在第一个结果后返回 NULL

PHP注册表格未连接到数据库

MySQL:选择相关行

php - 搜索两列并回显结果的范围

php - 使用 PDO 插入。我应该使用 try...catch 吗?