我需要使用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.
我该如何解决这个问题?
答案 0 :(得分:1)
我的建议如下(但是这可以基于你知道用户ID - 你的问题有一个硬编码的用户ID):
这样您就不必担心更新或密钥了 - 您只需重置该块用户数据即可。
请注意,交易非常重要 - 您不希望发现您删除了您的条目,然后您的代码就会失败而您将丢失所拥有的内容。
我希望有所帮助。