Member 13629755 Ответов: 2

Как я могу решить эти ошибки? Пожалуйста, помогите мне с этой проблемой таблицы PHP/SQL


У меня есть таблица со списком людей, и я хочу иметь опцию, где вы можете редактировать информацию, показанную этими перечисленными людьми. У меня есть editperson.php файл и a editsql.php файл. Я получаю эти ошибки при попытке представить новые значения для людей:

Нажмите здесь -> https://gyazo.com/5e5e52c26b1b978d7802f58eaafba16d[^]

Вот код для этого editperson.php


<!doctype html>
<html>
<body>
	Skriv inn nye verdier for denne personen
	<form action = 'editsql.php' method = 'POST'>
	<?php
		include('oppkobling.php');

		$id = $_POST['id'];

		// Lag SQL-setning
		$query = 'SELECT * FROM rikestemennesker WHERE id = '.$id;

		// Kjør spørringen
		$resultat = mysqli_query($db, $query);
		$rad = mysqli_fetch_array($resultat);

		//echo "<input type = 'hidden' name = 'editmnr' value = ".$id.">";
		echo "Plass: <input type = 'text' value = '".$rad['id']."' size='30' 
         name='editplass'><br>";
		echo "Navn: <input type = 'text' value = '".$rad['Navn']."' size='30' 
         name='editnavn'><br>";
		echo "Land: <input type = 'text' value = '".$rad['Land']."' size='30' 
         name='editland'><br>";
		echo "Nettoformue: <input type = 'text' value = 
         '".$rad['Nettoformue']."' size='50' name='editformue'><br>";
		echo "Kilde: <input type='text' value = '".$rad['Kilde']."' size ='50' 
         name ='editkilde'><br>";
		// Koble ned
		mysqli_close($db);
		mysqli_free_result($resultat);


	?>
		<input type = 'submit' value = 'Oppdater'>
	</form>
</body>
</html>



а вот и код для этого editsql.php

<?php
	include('oppkobling.php');
	$n = $_POST['editnavn'];
	$a = $_POST['editformue'];
  $l = $_POST['editland'];
	$m = $_POST['editplass'];
	$k = $_POST['editkilde'];

	$query = "UPDATE rikestemennesker SET
	navn = '$n',
	land = '$l',
	formue = '$a',
	kilde = '$k',
	WHERE plass = $m";

	mysqli_query($db, $query);

	mysqli_close($db);
	header("Location: index.php");
?>


Что я уже пробовал:

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

2 Ответов

Рейтинг:
2

Patrice T

$query = 'SELECT * FROM rikestemennesker WHERE id = '.$id;
$query = "UPDATE rikestemennesker SET
navn = '$n', land = '$l', formue = '$a', kilde = '$k',
WHERE plass = $m";

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]


Рейтинг:
2

Mohibur Rashid

Есть запятая перед where в запрос обновления.
так как вы используете mysqli, то используйте класс mysqli[^] вместо

и перепишите свой запрос select следующим образом

$query = 'SELECT * FROM rikestemennesker WHERE id = ?';
$stmt = $mysqli->prepare("id", $id);
$mysqli->execute($db, $query);
$row = $result->get_result()->fetch_assoc();// add some verification


Сделайте то же самое и с командой update.