Kenjiro Aikawa Ответов: 0

Сохранение данных в базу данных с помощью AJAX и PHP


Привет!

В настоящее время я делаю небольшой проект с использованием PHP, AJAX и BOOTSTRAP Modal. Мой код работает нормально, но иногда данные сохраняются дважды, и я не знаю почему.

Есть идеи, как решить эту проблему? Заранее спасибо.

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

АЯКС
$(document).ready(function(){
	fetch();

	//ADD
	$('#AddStocks').click(function(){
		$('#AddStocksModal').modal('show');
	});
	$('#addFormstocks').submit(function(e){
		e.preventDefault();
		var addform = $(this).serialize();
		$.ajax({
			method: 'POST',
			url: 'functions/add_stocks_submit.php',
			data: addform,
			dataType: 'json',
			success: function(response){
				$('#AddStocksModal').modal('hide');
				$(this).find('form').trigger('reset');
				if(response.error){
					$('#alert').show();
					$('#alert_message').html(response.message);
				}
				else{
					$('#alert').show();
					$('#alert_message').html(response.message);
					fetch();
				}
			}
		});
	});
	//


РНР
<?php

	include_once('../connection/pdo_db_connection.php');

    $assettagad = $_POST['assettagad'];

	$output = array('error' => false);

	$database = new Connection();
	$db = $database->open();

	if(!isset($error)) {
        $stmt = $db->prepare("SELECT asset_tag FROM sys_stocks WHERE asset_tag = ?");
        $stmt->execute(array($assettagad));
        $row_count = $stmt->rowCount();
        
        if ($row_count > 0){
			$output['message'] = 'Asset Tag is already exist!';
        }
	else
    {
        $sql = "INSERT INTO sys_stocks (asset_tag, particulars, status)
             
        VALUES ((UPPER('".$_POST["assettagad"]."')), (UPPER('".$_POST["particularad"]."')), (UPPER('".$_POST["hstatstocks"]."')))";
        ($db->query($sql));
        
        $output['message'] = 'Stock added successfully!';   
    }
}
    //close connection
    $database->close();

    echo json_encode($output);

?>

Richard Deeming

$sql = "INSERT INTO sys_stocks (asset_tag, particulars, status)
VALUES ((UPPER('".$_POST["assettagad"]."')), (UPPER('".$_POST["particularad"]."')), (UPPER('".$_POST["hstatstocks"]."')))";

Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
PHP: SQL-инъекция - руководство пользователя[^]

Kenjiro Aikawa

Спасибо за ваш совет, хотя он и не ответил на мой вопрос.

phil.o

Вот почему он предоставил его в качестве комментария к вашему вопросу. Но не ошибитесь: это реальная проблема в вашем коде, то есть та, которую вы должны исправить как можно скорее, даже не пытаясь проследить причину дублирования записей.
Есть ли вероятность, что двойной щелчок по кнопке Отправить отправит пару запросов?

Kenjiro Aikawa

Привет! Я уже решил свою проблему в прошлом месяце, используя уникальный индекс. Спасибо за ваш ответ.

0 Ответов