Обновлять базу данных, когда я отправляю кнопку HTML / PHP

0

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

Странно, но после отправки, эхо "Успешно сохранено!" нормально отображает, но не обновляет.

$connection = new mysqli("localhost", "db", "password", "db");
$query = "SELECT text FROM mailtext";
$result = mysqli_query($connection, $query);

while($row = mysqli_fetch_assoc($result))
{
    $text = iconv('iso-8859-2', 'utf-8', $row['text']);
    echo'
<center>
    <form id="mailtext" method="post">
        <textarea name="text" style="width: 500px; height: 300px;">'.$text.'</textarea>
        <input type="submit" name="submit" value="Save">
    </form>
</center>
';
    if(isset($_POST['submit'])) {
        $query2 = "UPDATE mailtext SET text='.$text.' WHERE id=1";
        mysqli_query($connection, $query2);
        echo 'Successfully saved!';
    }
}

Если у вас есть какие-либо вопросы или что-то подобное, пожалуйста, задавайте :) Да, я пытался искать ответы в других вопросах, но ничего не помогло.

  • 0
    Почему все строки из mailtext и только обновлены?
  • 0
    Вы проверяли наличие ошибок во время обновления? Задумывались ли вы об использовании кода, который не является широко открытым для внедрения SQL-кода?
Показать ещё 3 комментария
Теги:

2 ответа

0

Добавьте пустой атрибут действия в вашу форму и обновите код

if(isset($_POST['submit'])) {
      $text= $_POST['text'];
    $query2 = "UPDATE mailtext SET text='.$text.' WHERE id=1";
    mysqli_query($connection, $query2);
    echo 'Successfully saved!';
}
0

Когда вы отправляете форму, страница перезагружается с содержимым $_POST и перезапускается сверху вниз.

//            Form is submitted
// You are getting the content of the table
//                  |
//                  |
//                  V
$connection = new mysqli("localhost", "db", "password", "db");
$query = "SELECT text FROM mailtext";
$result = mysqli_query($connection, $query);
//      You are displaying the form
//                  |
//                  |
//                  V
while($row = mysqli_fetch_assoc($result))
{
    $text = iconv('iso-8859-2', 'utf-8', $row['text']);
    echo'
<center>
    <form id="mailtext" method="post">
        <textarea name="text" style="width: 500px; height: 300px;">'.$text.'</textarea>
        <input type="submit" name="submit" value="Save">
    </form>
</center>
';
// You are treating the previously submitted form
//                  |
//                  |
//                  V
    if(isset($_POST['submit'])) {
        $query2 = "UPDATE mailtext SET text='.$text.' WHERE id=1";
        mysqli_query($connection, $query2);
        echo 'Successfully saved!';
    }
}

Вы должны обработать форму перед запросом базы данных, чтобы получить информацию, иначе данные не будут вставлены/обновлены

$connection = new mysqli("localhost", "db", "password", "db");
if(isset($_POST['submit'])) {
    $text = $_POST['text'];
    $query2 = "UPDATE mailtext SET text='.$text.' WHERE id=1";
    // Beware, this query is VULNERABLE to SQL injections !
    mysqli_query($connection, $query2);
    echo 'Successfully saved!';
}

$query = "SELECT text FROM mailtext";
$result = mysqli_query($connection, $query);

while($row = mysqli_fetch_assoc($result))
{
    $text = iconv('iso-8859-2', 'utf-8', $row['text']);
    echo'
<center>
    <form id="mailtext" method="post">
        <textarea name="text" style="width: 500px; height: 300px;">'.$text.'</textarea>
        <input type="submit" name="submit" value="Save">
    </form>
</center>
';
}
  • 0
    этот скрипт в порядке, но он создаст несколько форм, равных количеству строк в таблице mailtext. Разве это не неправильно?
  • 0
    @SmitMehta действительно, хороший улов
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню