Обновить поля базы данных в форме - PullRequest
0 голосов
/ 02 февраля 2019

Здравствуйте, я изучаю php и в основном хочу, чтобы любое поле, которое уже было добавлено в базу данных, было «редактируемым»

Позвольте мне прояснить это на примере

My from выглядит следующим образом (ver basic)

Имя [поле ввода]

Фамилия [поле ввода]

Почтовый индекс [поле ввода]

кнопка отправки

 <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>

Когда нажата кнопка отправки, вывод будет показан в приведенной ниже таблице следующим образом:

|---------------------|------------------|------------------|
|      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>

Таким образом, каждая строка имеет свою собственную кнопку обновления и удаления.

Вот моя проблема ... я не уверен, как это сделать правильно.

Я хочу, чтобы при нажатии на обновление значение из полей to возвращалось в верхнее полеи когда снова нажать кнопку отправки, значения обновляются.

Вот мой запрос

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" >

, который оставляет меня с ..

>

Примечание: неопределенный индекс: имя в C: \ xampp \ htdocs \ test \ update.php on line> 14

Примечание: неопределенный индекс: фамилия в C: \ xampp \ htdocs \ test \update.php в строке> 15

Примечание: неопределенный индекс: plz в C: \ xampp \ htdocs \ test \ update.php в> строке 16

1 Ответ

0 голосов
/ 05 февраля 2019

О странице update.php: сообщения об ошибках, которые вы получаете, говорят о том, что «имя», «фамилия» и «плз» не определены.

Это потому, что вы пытались определить их, используяPOST:

$contactDto->setFirstName($_POST['firstname']); $contactDto->setLastName($_POST['lastname']); $contactDto->setPlz($_POST['plz']);

Но на самом деле значения имени, фамилии и 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 вы не можете определить 'firstname', 'lastname' и 'plz', используя $ _POST ['....'].

Единственное, что на странице 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».Теперь определите «firstname», «lastname» и «plz», получив эти значения из вашей базы данных, используя запрос.

Примерно так:

$getstuff = "SELECT * FROM yourtablename WHERE id = $thevariablethatcontainstheid";

(я думаю, переменная, которая содержитid: $ contactDto-> setId (); ??)

Затем выполните запрос в следующей строке:

$results = mysqli_query($yourconnectingthing,$getstuff);

И напишите это ниже:

$row = $results->fetch_assoc();

И тогда вы можете определить «имя», «фамилия» и «плз»!Написав это:

$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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...