|
|
|
| Итак, есть форма добавления города:
<form action=addpynkt.php method=POST>
Введите название пункта:
<input type="text" name="name" size="30"><br>
Выберите тип населенного пункта:
<select name="statys">
<option value="1">город</option>
<option value="2">пгт</option>
<option value="3">село</option>
</select><br>
<input type="submit" value="Добавить">
<input type="hidden" name="raion" value="<?php echo $_GET['id_raion']; ?>">
</form>
|
Вот обработчик этой формы:
<?php
include "../config.php";
// получаем данные
$name = trim($_POST['name']);
$statys = trim($_POST['statys']);
$raion = trim($_POST['raion']);
// Проверяем правильность ввода данных
if(empty($name)) { echo "Введите название пункта";
exit;
}
if(empty($raion)) { echo "Неправильно выбран район";
exit;
}
else
// Формируем SQL-запрос
$query = "SELECT * FROM pynkt
WHERE name LIKE '$name'";
$ath = mysql_query($query);
if(!$ath) echo mysql_error();
if(mysql_num_rows($ath)>0){
echo "Данный пункт уже есть в списке";
exit;
}
// Формируем SQL-запрос на добавление нового пункта в БД
// Проверяем, нет ли одинарных кавычек
$name = str_replace("'","`", $name);
// Добавляем новый пункт
$query_pynkt = mysql_query("INSERT INTO pynkt VALUES(
NULL,
'$name',
'$statys',
'$raion')");
if(mysql_query($query_pynkt))
{
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>
</HEAD></HTML>";
}
else
echo mysql_error();
?>
|
Выдает ошибку:
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 '1' at line 1
|
Но при этом сам город в таблицу заносит. Что не правильно у меня в синтаксисе? | |
|
|
|
|
|
|
|
для: Dizels
(28.09.2007 в 16:53)
| | А в каком запросе ошибка?
может вот так
mysql_query("INSERT INTO pynkt (`поле 1`,`поле 2`,`поле 3`,` поле 4`)VALUES( 'NULL', '$name', '$statys', '$raion')");
|
| |
|
|
|
|
|
|
|
для: fiper
(28.09.2007 в 17:02)
| | NULL в кавычки не нужно помещать. | |
|
|
|
|
|
|
|
для: Dizels
(28.09.2007 в 16:53)
| | Попробуйте заменить строку
<?php
if(!$ath) echo mysql_error();
?>
|
следующим образом
<?php
if(!$ath) echo $query;
?>
|
Как теперь выглядит сообщение об ошибке? | |
|
|
|
|
|
|
|
для: cheops
(30.09.2007 в 02:37)
| | После исправления:
Выдает: данный пункт уже есть в списке, хотя его явно нет, при этом город добавляется
Запрос добавления сейчас выглядит вот так:
// Добавляем новый пункт
$query_pynkt = mysql_query("INSERT INTO pynkt VALUES(
NULL,
'$name',
'$statys',
'$raion')");
if(mysql_query($query_pynkt))
{
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>
</HEAD></HTML>";
}
else
echo mysql_error();
|
| |
|
|
|
|
|
|
|
для: Dizels
(30.09.2007 в 12:41)
| | Вопрос в силе :) | |
|
|
|
|
|
|
|
для: Dizels
(30.09.2007 в 14:00)
| | Я уже однажды вас спрашивал - зачем вы дважды делаете запрос?
<?
$query_pynkt = "INSERT INTO pynkt VALUES(
NULL,
'$name',
$statys,
$raion)"; // это составили строку запроса,
//числовые переменные на надо!!! обрамлять в кавычки
if (mysql_query($query_pynkt))... //это сам запрос и проверка его выполнения
|
| |
|
|
|
|
|
|
|
для: sim5
(30.09.2007 в 14:17)
| | Я так делаю, поскольку так написано в книге PHP 5 Практика создания web-сайтов, а именно по ней я и учусь. Да и собственно вроде все как надо - сначала добавляем, а потом проверяем добавилась запись или нет.
P.S. если я чего-то не догоняю - поясни на примере плз | |
|
|
|
|
|
|
|
для: Dizels
(30.09.2007 в 14:20)
| | mysql_query($query_pynkt) - это и будет запрос к базе, на основе переменной $query_pynkt, вы форимируя эту пременную уже делаете запрос, потом проверяя, еще раз запрос. Зачем это, составили строку запроса, затем делаете сам запрос, если это в условии происходит как у вас, то при удачном выполнении запроса произойдет запись в базу и будет возвращено TRUE, в противном случае FALSE - записи по тем или иным причинам не произошло.
Ну а про числовые переменные я сказал, запись может быть, но вы при этом будете получать сообщения. | |
|
|
|
|
|
|
|
для: sim5
(30.09.2007 в 14:28)
| | Ок, тогда запись будет вот такая:
mysql_query("INSERT INTO pynkt (`id_pynkt`,`name`,`statys`,`id_raion`)VALUES( NULL, '$name', $statys, $raion)");
|
А как мне теперь сделать так, что если запись добавилась - то скрипт делал редирект на главную, а если ошибка какая, то соответственно выдавал ее. | |
|
|
|
|
|
|
|
для: Dizels
(30.09.2007 в 14:44)
| | Напишите лучше так:
<?
$query_pynkt = "INSERT INTO pynkt VALUES( NULL, '$name', $statys, $raion)";
if(mysql_query($query_pynkt)) header("Location: index.php");
else //ваш код вывода ошибки
|
| |
|
|
|
|
|
|
|
для: sim5
(30.09.2007 в 14:49)
| | Ок, все получилось, спасибо большое!
P.S. исключительно для себя - я так и не понял чем ваш последний запрос:
$query_pynkt = "INSERT INTO pynkt VALUES( NULL, '$name', $statys, $raion)";
if(mysql_query($query_pynkt)) header("Location: index.php");
|
отличается от того, который в начале я делал, у вас вроде тоже получается запрос, а потом еще один запрос при проверки добавилась инфа или нет. | |
|
|
|
|
|
|
|
для: Dizels
(30.09.2007 в 14:54)
| | Ну юморист!))
Первая строка - $query_pynkt = "INSERT INTO pynkt VALUES...., это не запрос, это только параметры запроса, запрос происходит функцией mysql_query($query_pynkt), где в качестве аргумента передается ваша строка параметров - $query_pynkt.
Далее, вы перенаправление делали за счет мета-тегов, а гораздо лучше сделать это хидером:
header("Location: URL-адрес");
Читайте мануал.) | |
|
|
|