Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ошибка при использовании функции mysql_real_escape_string
 
 автор: ruslanaxti   (11.02.2011 в 19:16)   письмо автору
 
 

Без использовании этой функции mysql_real_escape_string данные вносятся в таблицу без проблем. Но это не безопасно. А при ее использовании выводит ошибку:

Это введенные мною данные

Имя-ruslan
Фамилия-mayfamily
Пол-Мужской
Город-axti
Логин-ruslan
Пароль-12345
Пароль-12345

Ошибка:

Could not successfully run query () from DB: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ruslan'','12345',''Ruslan'',''Mayfamily'',''Мужской'',''Axti'')' at line 1

Этот код экранирует введенные данные

function quote_smart($value)
{
// если magic_quotes_gpc включена - используем stripslashes
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
// Если переменная - число, то экранировать её не нужно
// если нет - то окружем её кавычками, и экранируем
if (!is_numeric($value)) {
$value = "'" . mysql_real_escape_string($value) . "'";
}
return $value;
}

  Ответить  
 
 автор: Trianon   (11.02.2011 в 19:20)   письмо автору
 
   для: ruslanaxti   (11.02.2011 в 19:16)
 

Вы показали не весь код.
И стоит пользоваться тегами [code]

  Ответить  
 
 автор: ruslanaxti   (11.02.2011 в 19:28)   письмо автору
 
   для: Trianon   (11.02.2011 в 19:20)
 

весь код обработки

<?php

// Регистрация

if(isset($_POST['sendregist'])) {
if(
empty($_POST['name']) ||
empty($_POST['family']) ||
empty($_POST['pol']) ||
empty($_POST['live_city']) ||
empty($_POST['login']) ||
empty($_POST['password']) ||
empty($_POST['password2'])){

echo "Заполните все поля";
}
else{


// Проверка на регулярные выражения

if(preg_match("/[а-яa-z]/i",$_POST['name']) ||
preg_match("/[а-яa-z]/i",$_POST['family']) ||
preg_match("/[а-я]/i",$_POST['pol']) ||
preg_match("/[a-zа-я\\._ -]/i",$_POST['live_city']) ||
preg_match("/[0-9a-z\\._ -]/i",$_POST['login']) ||
preg_match("/[0-9a-zA-Z\\. -]/",$_POST['password']) ||
preg_match("/[0-9a-zA-Z\\. -]/",$_POST['password2']))

{

if($password===$password2){


// Форматирование введеных полей

$name=ucfirst(strtolower(trim($_POST['name'])));
$family=ucfirst(strtolower(trim($_POST['family'])));
$pol=trim($_POST['pol']);
$live_city=ucfirst(strtolower(trim($_POST['live_city'])));
$login=strtolower(trim($_POST['login']));
$password=trim($_POST['password']);
$password2=trim($_POST['password2']);


// Функция экранирования переменных
function quote_smart($value)
{
// если magic_quotes_gpc включена - используем stripslashes
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
// Если переменная - число, то экранировать её не нужно
// если нет - то окружем её кавычками, и экранируем
if (!is_numeric($value)) {
$value = "'" . mysql_real_escape_string($value) . "'";
}
return $value;
}


$connect=mysql_connect('localhost','root','2132');

if (!$connect) {
echo "Unable to connect to DB: " . mysql_error();
exit;
}
else{
mysql_query('SET character_set_database = utf8');
mysql_query('SET NAMES utf8');
}

if (mysql_select_db("mycms")){
}
else{
echo "Unable to select table: " . mysql_error();
exit;
}

// Составляем безопасный запрос
// $query_insert="INSERT INTO user (name,family,pol,live_city,login,passw) VALUES
// ('$name','$family','$pol','$live_city','$login','$password')";

$query_insert = sprintf("INSERT INTO user (login,passw,name,family,pol,live_city) VALUES ('%s','%s','%s','%s','%s','%s')",
quote_smart($login),
quote_smart($password),
quote_smart($name),
quote_smart($family),
quote_smart($pol),
quote_smart($live_city));


$row=mysql_query($query_insert);


if (!$row) {
echo "Could not successfully run query (".$row.") from DB: " . mysql_error();


// закрываем соединение

mysql_close($connect);

exit;
}

} else { echo "Пароли не совпадают";}

} else { echo "Введены недопустимые символы"; }


}}

___________________________________________________________________

а здесь код формы

<form action="axti.php" method="post">
<table width="250" border="1" cellspacing="0" cellpadding="0">
<tr>
<td>имя</td>
<td><input type="text" name="name" value="" maxlength="20"/></td>
</tr>
<tr>
<td>фамилие</td>
<td><input type="text" name="family" value="" maxlength="20"/></td>
</tr>
<tr>
<td>пол</td>
<td><select name="pol">
<option value="">Пол</option>
<option value="Мужской">Мужской</option>
<option value="Женский">Женский</option>
</select></td>
</tr>
<tr>
<td>метро жительства</td>
<td><input type="text" name="live_city" value="" maxlength="20"/></td>
</tr>
<tr>
<td>логин</td>
<td><input type="text" name="login" value="" maxlength="20"/></td>
</tr>
<tr>
<td>пароль</td>
<td><input type="password" name="password" value="" maxlength="20"/></td>
</tr>
<tr>
<td>Повторите пароль</td>
<td><input type="password" name="password2" value="" maxlength="20"/></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input type="submit" name="sendregist"></td>
</tr>
</table>
</form>

  Ответить  
 
 автор: Trianon   (11.02.2011 в 19:34)   письмо автору
 
   для: ruslanaxti   (11.02.2011 в 19:28)
 

вот в этой строке sprintf("INSERT INTO user (login,passw,name,family,pol,live_city) VALUES ('%s','%s','%s','%s','%s','%s')",
мешают апострофы.
Потому что они уже добавлены к полям при выполнении quote_smart()

Из-за лишних апострофов нарушается синтаксис создаваемого запроса.

  Ответить  
 
 автор: ruslanaxti   (11.02.2011 в 19:39)   письмо автору
 
   для: Trianon   (11.02.2011 в 19:34)
 

Спасибо огромное, теперь все работает!!!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования