您好,所以我正在学习php,基本上我希望已添加到数据库中的任何字段都是“可编辑的”
让我通过示例更清楚
我的样子(基本)
名字[输入字段]
姓氏[输入字段]
邮政编码[输入字段]
发送按钮
<form method="post" action="">
<table>
<tr>
<td>Vorname</td>
<td><input type="text" name="firstname"></td>
</tr>
<tr>
<td>Nachname</td>
<td><input type="text" name="lastname"></td>
</tr>
<tr>
<td>PLZ</td>
<td><input type="number" name="plz"></td>
</tr>
</table>
<button type="submit" name="send">Send</button>
</form>
当发送键被按下时beeing所示的输出表中的以下像这样
|---------------------|------------------|------------------|
| Firstname | Lastname | Zip Code |
|---------------------|------------------|------------------|
| Tomas | Möller | 123123 |
|---------------------|------------------|------------------|
在这些行旁边,我仍然有这两个(不合适)
|---------------------|------------------|
| Update | Delete |
|---------------------|------------------|
| update | delete |
|---------------------|------------------|
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">First Name</th>
<th scope="col">Last Name</th>
<th scope="col">PLZ</th>
<th scope="col">Delete</th>
<th scope="col">Update</th>
</tr>
</thead>
<tbody>
<?php
/**
* @var $contact ContactDto
*/
$contacts = $contactRepository->findAll();
foreach ($contacts as $contact) {
?>
<tr>
<th scope="row"><?php echo $contact->getId()?></th>
<td><?php echo $contact->getFirstname() ?></td>
<td><?php echo $contact->getLastname() ?></td>
<td><?php echo $contact->getPlz() ?></td>
<td><a href=delete.php?id=<?php echo (int)$contact->getId()?> >Delete</a></td>
<td><a href=update.php?id=<?php echo (int)$contact->getId()?> >Update</a></td>
</tr>
<?php
}
?>
</tbody>
</table>
因此,基本上每一行都有自己的更新和删除按钮。
这是我的问题。我不确定如何正确执行此操作。
我希望单击更新时,从到字段的值“返回”到顶部字段,并且再次按下发送时,值将被更新。
这是我的查询
public function update(ContactDto $contactDto) {
$stmt = $this->pdo->prepare("UPDATE contacts SET firstname=:firstname,
lastname=:lastname,
plz=:plz
WHERE id=:id");
$stmt->bindValue(':firstname', $contactDto->getFirstname(), PDO::PARAM_STR);
$stmt->bindValue(':lastname', $contactDto->getLastname(), PDO::PARAM_STR);
$stmt->bindValue(':plz', $contactDto->getPlz(), PDO::PARAM_INT);
$stmt->bindValue(':id', $contactDto->getId(), PDO::PARAM_INT);
$stmt->execute();
}
我确实尝试过创建一个新的update.php文件,将数据发送到该文件中,然后像这样填充字段(但效果不佳)
这是我的update.php文件
$contactRepository = new ContactRepository(
DatabaseConnection::getConnection()
);
$contactDto = new ContactDto();
$contactDto->setId($_GET['id']);
$contactDto->setFirstName($_POST['firstname']);
$contactDto->setLastName($_POST['lastname']);
$contactDto->setPlz($_POST['plz']);
$contactRepository->update($contactDto);
?>
<form method="post" action="update.php">
<input type="hidden" name="id" value="<?php echo $contactDto->getId(); ?>" />
<?PHP
?>
<table>
<tr>
<th>First Name: </th>
<td>
<input type="text" id="vorname" name="firstname" placeholder="Dein Vorname" size="35" value="<?php echo $contactDto->getFirstName(); ?>">
</td>
</tr>
<tr>
<th>Last Name: </th>
<td>
<input type="text" id="nachname" name="lastname" placeholder="Dein Nachname" size="35" value="<?php echo $contactDto->getLastName(); ?>">
</td>
</tr>
</table>
<input type="submit" name="save" value="Update" >
这给我留下了..
>
注意:未定义的索引:> 14行上的C:\ xampp \ htdocs \ test \ update.php中的名字
注意:未定义的索引:> 15行上的C:\ xampp \ htdocs \ test \ update.php中的姓氏
通知:未定义索引:>第16行的C:\ xampp \ htdocs \ test \ update.php中的plz
答案 0 :(得分:0)
关于update.php页面:您收到的错误消息是未定义'firstname','lastname'和'plz'。
这是因为您尝试使用POST定义它们:
$contactDto->setFirstName($_POST['firstname']);
$contactDto->setLastName($_POST['lastname']);
$contactDto->setPlz($_POST['plz']);
但是实际上,firstname,lastname和plz的值未发布到此页面。只有在您编写
的表单中单击“提交”按钮时,POST才被“激活”<form method="POST"...
但是您没有通过表单进入update.php页面,而是通过此表中的超链接创建的:
foreach ($contacts as $contact) {
?>
<tr>
<th scope="row"><?php echo $contact->getId()?></th>
<td><?php echo $contact->getFirstname() ?></td>
<td><?php echo $contact->getLastname() ?></td>
<td><?php echo $contact->getPlz() ?></td>
<td><a href=delete.php?id=<?php echo (int)$contact->getId()?> >Delete</a></td>
<td><a href=update.php?id=<?php echo (int)$contact->getId()?> >Update</a></td>
</tr>
<?php
}
?>
这没错吧!这个桌子很好。
但是在update.php页面上,您不能使用$ _POST ['....']来定义'firstname','lastname'和'plz'。
在IS.update.php页面上唯一定义的是“ id”。这是因为“ id”是您使用get方法发送到此页面的唯一内容。再次:这是正确的方法,因此请不要更改。
**
**
更改代码:
$contactDto = new ContactDto();
$contactDto->setId($_GET['id']);
$contactDto->setFirstName($_POST['firstname']);
$contactDto->setLastName($_POST['lastname']);
$contactDto->setPlz($_POST['plz']);
对此:
$contactDto = new ContactDto();
$contactDto->setId($_GET['id']);
因此仅定义了“ id”。 现在,通过使用查询从数据库中获取这些值来定义“名字”,“姓氏”和“ plz”。
赞:
$getstuff = "SELECT * FROM yourtablename WHERE id = $thevariablethatcontainstheid";
(我猜包含'id'的变量是$ contactDto-> setId(); ??)
然后在下一行执行查询:
$results = mysqli_query($yourconnectingthing,$getstuff);
并将其写在下面:
$row = $results->fetch_assoc();
然后您可以定义“名字”,“姓氏”和“ plz”!通过编写以下内容:
$firstname = $row['firstname'];
$lastname = $row['lastname'];
$plz = $row['plz'];
现在,您最后需要更改的是编辑表单中的值。 这是您的代码:
<tr>
<th>First Name: </th>
<td>
<input type="text" id="vorname" name="firstname" placeholder="Dein Vorname" size="35" value="<?php echo $contactDto->getFirstName(); ?>">
</td>
</tr>
将其更改为:
<tr>
<th>First Name: </th>
<td>
<input type="text" id="vorname" name="firstname" placeholder="Dein Vorname" size="35" value="<?php echo $firstname ?>">
</td>
</tr>