Я пытаюсь получить форму для удаления строк в таблице, но я делаю все, кроме удаления строки. Он очищает все значения в таблице, но не удаляет строку или идентификатор. Я попытался сделать это
PHP Script
<?php if ($_SERVER["REQUEST_METHOD"] == "POST") { // Setting up the Database Connection $servername = "localhost"; $username = "root"; $password = "Fh3dSWIWCLd4"; $dbname = "servers"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } //Capturing the POST Data $id = $_POST['id']; $sql = "DELETE FROM sv_info WHERE id='$id' LIMIT 1"; // Executing the SQL statement if ($conn->query($sql) === TRUE) { header("Location:http://osgaming.joec.pw/login/"); } else { echo "Error: " . $sql . " " . $conn->error; } // Closing the database connection $conn->close(); } ?>
HTMLForm
<?php include 'sql-dbsv-del.php'; ?> <h2><b class="e">Delete Entries</b></h2> <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post" class="form-group"> <label for="id">Database ID</label> <input type="number" name="id" class="form-control" placeholder="Database ID"><br /> <input type="submit" value="Delete Entry" class="btn btn-danger"> </form>
https://gyazo.com/ca3f10f862b3993f5d716cb49242304b Существует изображение того, что он делает с переменной в базе данных
Изучите базовый синтаксис строки PHP:
$sql = "DELETE FROM sv_info WHERE id='.$id.' LIMIT 1"; ^--start of PHP string ^---end of PHP string
Вы генерируете строку буквального запроса
DELETE FROM sv_info WHERE id='.4.' LIMIT 1
Обратите внимание, как ваша неудачная попытка конкатенации строк PHP стала частью строки запроса. вы уже вошли в строку php, поэтому вы не можете выполнять PHP внутри этой строки – PHP не рекурсивно встраивается / выполняется.
Любой из них будет работать:
$sql = "DELETE FROM sv_info WHERE id='$id' LIMIT 1"; $sql = "DELETE FROM sv_info WHERE id='" . $id . "' LIMIT 1";
но, конечно, все равно оставляют вас уязвимыми для атак с SQL-инъекциями .
Ваш оператор SQL здесь:
$sql = "DELETE FROM sv_info WHERE id='4' LIMIT 1";
Не использует вашу переменную $id
вообще. Вы пытаетесь удалить id = 4 при каждом выполнении. Если этот идентификатор не существует, вы молча ничего не делаете.