@adrenalinruslan

Не добавляется в базу данных?

Вообще проблема такая, введеные данные в input через ajax отправляются в файл query.php и там эти данные отправляются в базу данных, но есть одна проблема, если ввести в логин и пароль только цифры, то запись в бд добавиться, а если ввести буквы, то запись не добавляется. Как исправить ?

$(document).ready(function(){
			$('button').click(function(){

				$('.box_error').hide();

				var login = [];
				var password = [];
				login = $('#login').val();
				password = $('#password').val();

				$.ajax({
					method: "POST",
				  	url: "../pages/query.php",
				  	data: { login:login, password:password },
				  	beforeSend: function() {
				  		$('button').html('Загрузка...');
				  	},
				  	success: function( msg ) {

				  		if(msg == 'Errors') {
				  			$('.box_error').show();
				  			$('button').html( 'Войти' );

				  		} else {
				  			$('button').html( msg );
				  		}
				  	}
				})

			});
		});


Файл query.php


<?php 

include 'config.php';

$login = $_POST['login'];
$password = $_POST['password'];


$query = 'INSERT INTO `users`(`email`, `password`) VALUES ('.$login.', '.$password.')';
mysqli_query($link, $query);
exit("Finish 1");


Файл config.php

<?php 

$link = mysqli_connect("localhost", "root", "", "test");
  • Вопрос задан
  • 159 просмотров
Пригласить эксперта
Ответы на вопрос 3
Sanovskiy
@Sanovskiy
Веб-разработчик с 2005 года
Что в логах? Что в консоли? F12 нажмите и посмотрите ответ сервера.
И не используйте конструкции вроде url: "../pages/query.php",
Всегда указывайте абсолютный адрес.
Ответ написан
Eridani
@Eridani
Мимо проходил
А у вас в БД у этих полей какие типы стоят, Int? Если оно, тогда понятно, меняйте на varchar
Ответ написан
@alexalexes
$query = 'INSERT INTO `users`(`email`, `password`) VALUES ('.$login.', '.$password.')';

Во-первых, никогда, ни при каких обстоятельствах не склеивайте строку запроса с добавлением входных параметров, которые не прошли экранирование по sql нотации. Приклеили к строке запроса непроверенный параметр (а тем более пришедший напрямую от клиента) - считайте, что подписались на sql-инъекцию.

Адекватная подстановка параметров происходит только при правильной подготовке запроса функциями
mysqli_prepare() и mysqli_stmt_bind_param().

Для получения данных из БД нужна "правильная культура" общения с ней.
Правильная культура подразумевает:
1. После попытки подключения нужно проверить, а состоялось ли оно.
2. Прежде чем выполнить запрос, его текст нужно подготовить prepare-функцией.
3. Если есть входные параметры, то привязать их к запросу bind-функцией.
4. Запустить выполнение execute-функцией;
5. Получить результат запроса fetch-функцией;
6. Закрыть statement или вовсе закрыть соединение.

В этих пунктах еще нет шагов работы с транзакциями, но если присутствует вот этот минимум, то вы уже адекватно осуществляете процесс общения с СУБД.

В ваше случае нужно проверить, а состоялось ли подключение. Иначе нет смысла слать запросы.

Вот пример, где более-менее верно описан процесс взаимодействия с СУБД (взят с www.php.su/mysqli_stmt_bind_param):

<?php
$link = mysqli_connect('localhost', 'my_user', 'my_password', 'world');

/* check connection */
if (!$link) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$stmt = mysqli_prepare($link, "INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
mysqli_stmt_bind_param($stmt, 'sssd', $code, $language, $official, $percent);

$code = 'DEU';
$language = 'Bavarian';
$official = "F";
$percent = 11.2;

/* execute prepared statement */
mysqi_stmt_execute($stmt);

printf("%d Row inserted.\n", mysqli_stmt_affected_rows($stmt));

/* close statement and connection */
mysqli_stmt_close($stmt);

/* Clean up table CountryLanguage */
mysqli_query($link, "DELETE FROM CountryLanguage WHERE Language='Bavarian'");
printf("%d Row deleted.\n", mysqli_affected_rows($link));

/* close connection */
mysqli_close($link);
?>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы