Къде е грешката, че не иска да добавя нов запис в БД

Msecurity

Registered
Разгледах код 100 пъти до сега.. нооо грешка не открих и се чудя защо не ми добавя новият запис в БД. Ето го кода:
PHP:
<?php
include("connect.php");

$self = $_SERVER['PHP_SELF'];
$catid =   $_POST['catid'];
$articul =	 $_POST['articul'];
$informations =  $_POST['informations'];
$price =  $_POST['price'];
$images = $_POST['images'];
?>
<form action="<?php echo(  $self );   ?>" method="post">
Изберете категория:  <input type="text"  name="catid" size="4"> <br>
Въведете артикул:   <input type="text" name="articul" size="10"> <br>
Въведета информация:  <input type="text" name="informations"  size="50"> <br>
Въведета цена:  <input type="text" name="price"  size="10"> <br>
Добавете изображение:  <input type="text" name="images"  size="10"> <br>
<input type="submit" value="Приеми"> <br>
</form>
<?php
if ($catid and $articul and $informations  and $price and $images)
{ 
$sql= "INSERT INTO articuls (NULL, catid, articul, informations, price, images)
values ( NULL, $catid, \"$articul\", \"$informations\", \"$price\", \"$images\" )"; 
$rs = mysql_query( $sql);
if ( $rs )
{	
	echo( "Добавен е следният запис: $catid $articul $informations $price $images"  );   
}
} 
?>

И другият ми въпрос е как да направя падащо меню за полето "Изберете категория" - като всички категории са ми в БД
 
ей пич ти май си начинаещ в php пиши ми на скайп krase7o1 за да ти обясня квото ти трябва а иначе падащото мену се преви със <select></select>
 
Не ми дава никаква грешка точно това е проблема, но в същото време не го и добавя записа.
Премахнах "NULL" и пак си е същият ефекта.
 
Сигурен ли си, че подаваш последователно, както са в таблицата, колоните. Защото не можеш в началото и по средата не можеш да пропускаш. Ако искаш някои полета да не са попълнени ги във VALUES или ги оставяш празни или подаваш NULL.


PHP:
<?php
include("connect.php");


if(isset($_POST['submit']){
	$catid =   $_POST['catid'];
	$articul =	 $_POST['articul'];
	$informations =  $_POST['informations'];
	$price =  $_POST['price'];
	$images = $_POST['images'];
	
	if(empty($catid) || empty($articul) || empty($informations) || empty($price) || empty($images)){
		echo "Моля, попълнете всички полета!";
	}
	else{
		mysql_query("INSERT INTO `articuls` (`catid`, `articul`, `informations`, `price`, `images`)
				VALUES({$catid}, {$articul}, {$informations}, {$price}, {$images})") or die(mysql_error());
									
		echo "Добавен е следният запис: $catid $articul $informations $price $images";
	}
}
?>

<form action="" method="post">
Изберете категория:  <input type="text"  name="catid" size="4"> <br>
Въведете артикул:   <input type="text" name="articul" size="10"> <br>
Въведета информация:  <input type="text" name="informations"  size="50"> <br>
Въведета цена:  <input type="text" name="price"  size="10"> <br>
Добавете изображение:  <input type="text" name="images"  size="10"> <br>
<input type="submit" name="submit" value="Приеми"> <br>
</form>

Нещо такова трябва да е, но няма да е зле да дадеш структурата на таблицата articuls
 
Ето структурата:
Таблица articuls:
artid
catid
articul
informations
price
images
data


Но ми дава грешка в кода който си ми дал
Код:
if(isset($_POST['submit']){

Parse error: syntax error, unexpected '{' in C:\Program Files\VertrigoServ\www\add.php on line 3
 
Msecurity каза:
Ето структурата:
Таблица articuls:
artid
catid
articul
informations
price
images
data


Но ми дава грешка в кода който си ми дал
Код:
if(isset($_POST['submit']){

Parse error: syntax error, unexpected '{' in C:\Program Files\VertrigoServ\www\add.php on line 3
if(isset($_POST['submit'])){
 
PHP:
<?php
include("connect.php");


if(isset($_POST['submit'])){
        $catid =   $_POST['catid'];
        $articul =       $_POST['articul'];
        $informations =  $_POST['informations'];
        $price =  $_POST['price'];
        $images = $_POST['images'];
        
        if(empty($catid) || empty($articul) || empty($informations) || empty($price) || empty($images)){
                echo "Моля, попълнете всички полета!";
        }
        else{
                mysql_query("INSERT INTO `articuls` (`artid`, `catid`, `articul`, `informations`, `price`, `images`)
                                VALUES('', {$catid}, {$articul}, {$informations}, {$price}, {$images})") or die(mysql_error());
                                                                        
                echo "Добавен е следният запис: $catid $articul $informations $price $images";
        }
}
?>

<form action="" method="post">
Изберете категория:  <input type="text"  name="catid" size="4"> <br>
Въведете артикул:   <input type="text" name="articul" size="10"> <br>
Въведета информация:  <input type="text" name="informations"  size="50"> <br>
Въведета цена:  <input type="text" name="price"  size="10"> <br>
Добавете изображение:  <input type="text" name="images"  size="10"> <br>
<input type="submit" name="submit" value="Приеми"> <br>
</form>

Е, изпуснал съм една скоба. Дори това ли не можа да оправиш. Иначе ето така опитай
 
мм става но ми приема само цифри , в противен случаи ми изписва
"Unknown column 'фсдф' in 'field list'"
 
Дай пълната структура на таблицата. И сигурен ли си, че точно този код, който ти дадох използваш ?
 
Да него използвам.

artid int(20) не None AUTO_INCREMENT
catid int(20) не 0
articul varchar(255) utf8_general_ci не None
informations varchar(100) utf8_general_ci не None
price varchar(100) utf8_general_ci не None
images varchar(100) utf8_general_ci не None
data varchar(10) utf8_general_ci не 0
 
Какво е това "не None" ????


PHP:
`artid` int(20) NOT NULL auto_increment primary key,	
`catid` int(20) NOT NULL,
`articul` varchar(255) NOT NULL utf8_general_ci,
`informations` varchar(100) NOT NULL utf8_general_ci,
`price` varchar(100) NOT NULL utf8_general_ci,	
`images` varchar(100) NOT NULL utf8_general_ci,	
`data` varchar(10)	 NULL utf8_general_ci

Нещо такова би трябвало да ти е таблицата. Дори една структура на таблица не можеш да ми дадеш като хората. :X
 
relax4o каза:
Какво е това "не None" ????


PHP:
`artid` int(20) NOT NULL auto_increment primary key,	
`catid` int(20) NOT NULL,
`articul` varchar(255) NOT NULL utf8_general_ci,
`informations` varchar(100) NOT NULL utf8_general_ci,
`price` varchar(100) NOT NULL utf8_general_ci,	
`images` varchar(100) NOT NULL utf8_general_ci,	
`data` varchar(10)	 NULL utf8_general_ci

Нещо такова би трябвало да ти е таблицата. Дори една структура на таблица не можеш да ми дадеш като хората. :X
Да точно такава е.
Не че не мога просто в момента съм на работа... и всичко го правя на бързо.
 
data NULL или NOT NULL е? Защото, ако е NOT NULL трябва да я добавиш в заявката и да сложиш стойност. Може и да е празна стойността но задължително трябва да има.
 
@relax4o - сори, аз писах дълго и явно се повтаряме за data колоната.


Има разминаване в декларацията на колоната data. Първо казваш че е:

Код:
data varchar(10) utf8_general_ci не 0
което го разбирам като NOT NULL

После потвърждаваш, че е:
Код:
`data` varchar(10) NULL utf8_general_ci

Та кое е вярно - колоната data може ли да е NULL или не може? Ако не може, трябва да я добавиш и нея в заявката.

Ако в тази колона ще съхраняваш дата, по-добре използвай някой от типовете колони за дата като date, datetime, timestamp и т.н. като можеш да им сложиш стойност по подразбиране CURRENT_TIMESTAMP и ще се попълва автоматично. В този случай няма да се налага да включваш тази колона в заявката.

@relax4o - това е правилен синтаксис:
Код:
"INSERT INTO articuls (NULL, catid,....

Тук във форума изключително много виждам да правите нещо като това:
PHP:
$catid =   $_POST['catid'];

Какъв е смисъла? Вярно е, че не трябва да се използва директно информацията изпратена от потребителите, но за целта трябва да филтрираш, а всички създавате едни локални променливи и си ги ползвате. Това е безмислено. Виж това вече има смисъл:

PHP:
//винаги имаш число, пък било то и нула
$catid = (int)  $_POST['catid'];

//премахва HTML таговете и ненужните интервали в началото и края
$articul =	 trim(strip_tags($_POST['articul']));

//премахва HTML таговете и ненужните интервали в началото и края
$informations =  trim(strip_tags($_POST['informations']));

//винаги имаш десетично число
$price =  (float) $_POST['price'];

//премахва HTML таговете и ненужните интервали в началото и края
$images = trim(strip_tags($_POST['images']));

На въпроса как да си направиш селект меню от категориите? Да кажем, че имаш тази таблица с категориите:

[sql]CREATE table `category` (
id int(10) unsigned not null primary key auto_increment,
name varchar(100) not null unique
) engine=InnoDB default charset=utf8;[/sql]

PHP:
$select = "<select name=\"category_id\" id=\"category_id\">\n";
$select .= "<option value=\"0\">---избери---</option>\n";

$sql = "select * from `category` order by `name` ";
$resultSet = mysql_query($sql) or die(mysql_error());
while($option = mysql_fetch_array($resultSet)){
    $select .= "<option value=\"".$option['id']."\">".stripslashes($option['name'])."</option>\n";
}

$select .= "</select>\n";

HTML:
Изберете категория: <?php  echo $select; ?>
 
exec каза:

Не споря за синтаксиса, наистина може и да греша.

За локалните променливи наистина много така правят. Мен не ми се занимаваше чак до толкова да му променям кода, че да му ги оправям.
 
Раздвам се че не скучаете , но някои може ли да ми каже от къде идва този проблем с цифрите?
 
Msecurity каза:
Раздвам се че не скучаете , но някои може ли да ми каже от къде идва този проблем с цифрите?

На мен нещо не ми е ясно кой е този проблем с цифрите за който питаш.
 
Когато започна да попълвам формата и когато въведа текст в полетата ми изписва
Код:
"Unknown column 'фсдф' in 'field list'"
Като "фсдф" е текста който съм сложил във формата за попълване. Не добавя записа в БД, но когато въведа само цифри без текст няма проблем.
Като този проблем е за всичките полета във формата.
 
От това съобщение става ясно, че имаш проблем със заявката - някоя от стойностите които събмитваш, всъщност се третира като име на колона. Или си объркал нещо в списъка с колоните, или си объркал нещо в списъка със стойностите. Пусни тук отново заявката която ползваш в момента, защото явно си правил промени, за да видим какво точно е сбъркано.
 

Back
Горе