我需要使用 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):
- 开始交易
- 删除您所有的职位和用户
- 插入所有新位置
这样您就无需担心更新或 key - 您只需重置该用户数据 block 即可。
请注意,交易很重要 - 您不希望发现您删除了您的条目,然后您的代码失败并且您失去了您拥有的东西。
希望对您有所帮助。
关于php - 多号码电话簿 (PHP-PDO),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36683375/