Обновление данных базы данных с помощью кнопки отправки

Я хочу обновить базу данных новыми данными, чтобы при размещении текста в текстовом поле, а затем нажмите кнопку отправки, данные будут отправлены в базу данных с определенным идентификатором. Все, что я хочу отправить, это яркость, с приведенным ниже кодом. Когда я пишу что-то вроде этого, и я запускаю его, я получаю ошибку 403: доступ запрещен. Как я могу это исправить?

<!--?php
 function updater($value,$id){
// Create connection
 $conn = new mysqli( 'localhost' , 'user_name' , '' , 'data_base_name' );
// Check connection
 if ($conn--->connect_error) {
 die("Connection failed: " . $conn->connect_error);
 }
 $sql = "UPDATE table_name SET name=$value WHERE id=$id";
 if ($conn->query($sql) === TRUE) {
 echo "Record updated successfully";
 } else {
 echo "Error updating record: " . $conn->error;
 }
//$conn->close();
}
?>




 <form action="<?php updater($_POST['name'],1); ?>" method="post" style="height:50px;width:50px;">
 
 
 </form>
2 ответа

вот так:

<!--?php
function updater($value,$id){
 // Create connection
 $conn = new mysqli( 'localhost' , 'user_name' , 'pass' ,'data_base_name' );
 $value =mysqli_real_escape_string($conn,$value);
 $id =mysqli_real_escape_string($conn,$id);
 // Check connection
 if ($conn--->connect_error) {
 die("Connection failed: " . $conn->connect_error);
 } 
 $sql = "UPDATE table_name SET name='{$value}' WHERE id='{$id}'";
 if ($conn->query($sql) === TRUE) {
 echo "Record updated successfully";
 } else {
 echo "Error updating record: " . $conn->error;
 }
 $conn->close();
} 
if(isset($_POST['name'])){
 updater($_POST['name'],$_POST['id'])
}
?>




<form action="" method="post" style="height:50px;width:50px;">
  
 
 
</form>


Вам нужно поместить URL-адрес в атрибут действия, который обрабатывает форму, а не функцию:

action="<!--?php updater($_POST['name'],1); ?-->" // not this
action="<!--?php echo $_SERVER['PHP_SELF']; ?-->" // path to this page

Если это на одной странице, вы можете просто опустить его или использовать $_SERVER['PHP_SELF'], а затем перехватить отправку формы. Внутри этого процесса вызывается ваша пользовательская функция.

if($_SERVER['REQUEST_METHOD'] === 'POST') {
 $value = $_POST['name'];
 $id = 1;
 updater($value, $id);
}

Простое исправление будет просто процитировать строку внутри него:

$sql = "UPDATE table_name SET name='$value' WHERE id=$id";

Но это открыто для SQL-инъекций, другой способ сделать более безопасные запросы - подготовить их:

function updater($value,$id) {
 // Create connection
 $conn = new mysqli( 'localhost' , 'user_name' , '' , 'data_base_name' );
 // Check connection
 if ($conn->connect_error) {
 die("Connection failed: " . $conn->connect_error);
 }
 $sql = "UPDATE table_name SET name = ? WHERE id= ?";
 $update = $conn->prepare($sql);
 $update->bind_param('si', $value, $id);
 $update->execute();
 if ($update->affected_rows > 0) {
 echo "Record updated successfully";
 } else {
 echo "Error updating record: " . $conn->error;
 }
}

licensed under cc by-sa 3.0 with attribution.