mysql — форма редактирования создает новые данные вместо переполнения стека

Я новичок в PHP, пытался «Google» проблему, и это ничего не дало мне. У меня есть index.php, который имеет форму создания новых данных и показывает данные таблицы из sql со ссылкой на edit.php для редактирования данных. В edit.php у меня есть только форма.
Так что проблема в том, что edit.php создает новые данные в базе данных вместо того, чтобы изменять те, которые я получаю по id. Пробовал ставить запрос прямо в phpmyadmin и все работало нормально.

edit.php

include '../connect.php';
include '../errors.php';
include 'view_edit.php';

var_dump($id = $_GET['edit']);

if (isset($_POST['submit'])){
if (empty($_POST['username'])){
$errors = "Впишите ваше имя";
}elseif (empty($_POST['email'])){
$errors = "Впишите ваш email";
}elseif (empty($_POST['task'])){
$errors = "Впишите задание";
}elseif (empty($_FILES['image']['name'])){
$errors = "Вставьте картинку";
}else{
$id = $_GET['edit'];
$username = $_POST['username'];
$email = $_POST['email'];
$task = $_POST['task'];
$image = $_FILES['image']['name'];
$target = "../uploads/".basename($_FILES['image']['name']);

$sql = "UPDATE `tasks` SET `username`='$username', `email`='$email',
`task`='$task', `image`='$image' WHERE `id`='$id'";
mysql_query($db. $sql);
move_uploaded_file($_FILES['image']['tmp_name'], $target);
header('location: index.php');
}
}

в var_dump($id = $_GET['edit']); я получил правильный идентификатор данных.

Форма из view_edit.php

  <form method="post" action="index.php" class="input_form" enctype="multipart/form-
data">
<input type="text" name="username" placeholder="Введите Имя"class="username_input">
<input type="email" name="email" placeholder="Введите email"class="email_input">
<br>
<br>
<input type="hidden" name="MAX_FILE_SIZE" value="300000" />
<input type="text" name="task" placeholder="Введите задание"class="task_input">
<p>Сменить изображение</p>
<input type="file" name="image" multiple accept="image/png, image/jpeg,
image/gif">
<br>
<button type="submit" name="submit" id="add_btn">Изменить
запись</button>
</form>

Таблица из index.php

while ($row = mysqli_fetch_assoc($tasks)) { ?>
<tr>
<td class="username"> <?php echo $row['username']; ?> </td>
<td class="email"> <?php echo $row['email']; ?> </td>
<td class="task"> <?php echo $row['task']; ?> </td>
<td> <?php echo "<img src='../uploads/".$row['image']."'>"; ?> </td>
<td>
<a class="delete" href="index.php?del_task=<?php echo $row['id'] ?>">x</a>
<br><br>
<a class="edit" href="edit.php?edit=<?php echo $row['id']; ?
>">Редактировать</a>
</td>
</tr>
<?php  } ?>

И форма из view_index.php

<form method="post" action="index.php" class="input_form"enctype="multipart/form-data">
<input type="text" name="username" placeholder="Введите ваше имя"class="username_input" id="username">
<input type="email" name="email" placeholder="Введите ваш email"class="email_input" id="email">
<br><br>
<input type="text" name="task" placeholder="Введите задание"class="task_input"  id="task">
<input type="hidden" name="MAX_FILE_SIZE" value="300000" />
<p>Добавить изображение</p>
<input type="file" name="image" multiple accept="image/png, image/jpeg,
image/gif">
<br>
<button type="submit" name="submit" id="add_btn">Добавить задачу</button>
<button type="submit" name="preview" id="preview">Предварительный
просмотр</button>
</form>

1

Решение

Попробуйте добавить код в форму action в view_edit.php и всегда используйте кнопку ввода ввода формы не

<form method="post" action="edit.php?edit=<?php echo $id; ?>" class="input_form" enctype="multipart/form-
data">
<input type="text" name="username" placeholder="Введите Имя"class="username_input">
<input type="email" name="email" placeholder="Введите email"class="email_input">
<br>
<br>
<input type="hidden" name="MAX_FILE_SIZE" value="300000" />
<input type="text" name="task" placeholder="Введите задание"class="task_input">
<p>Сменить изображение</p>
<input type="file" name="image" multiple accept="image/png, image/jpeg,
image/gif">
<br>
<input type="submit" name="edit_task" id="add_btn"value="Изменить запись"/>

Удалить include 'view_edit.php'; от edit.php и используйте этот код и скажите мне, что происходит

0

Другие решения

Атрибут action вашей формы view_edit.php установлен на index.php, поэтому, если edit.php не будет включен в index.php, отправленная форма будет обрабатываться не edit.php, а index.php.

В любом случае, запрос UPDATE в MySQL не может создать новую запись, поэтому вставка должна происходить где-то еще в некотором коде, который здесь не размещен.

На заметку: Ваш код очень небезопасен. Google SQL-инъекция. Люди могут использовать эту форму для удаления вашей базы данных или причинения какого-либо другого вреда.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector