Проблем с PHP code

webxaoz

Registered
здравейте колеги имам проблем с този код, дава ми че има грешка

$sql="INSERT INTO clients (id, name, familiq, phone) VALUES
('$_POST[id]','$_POST[name]','$_POST[familiq]','$_POST[phone]')";
 
Пробвай така:

PHP:
$sql="INSERT INTO clients (name, familiq, phone) VALUES 
('$_POST[name]','$_POST[familiq]','$_POST[phone]')";

като в phpmyadmin-a на id му задаваш auto increment :)
 
Пак ли дава тая грешка?

btw, по-добре го напиши така:
PHP:
$sql='INSERT INTO `clients` (`name`, `familiq`, `phone`) VALUES 
(' . $_POST['name'] . ',' . $_POST['familiq'] . ',' . $_POST['phone'] . ')';
 
Най-вероятно вече имаш id = 0 и се опитваш да вмъкнеш още един запис със същото id.

Дал ли си id да е autoincrement ?
 
Значи, когато презаредя страницата с кода автоматично прави празен запис в таблицата. При положение че никъде не съм въвеждал нищо.
 
Когато го сложа на Auto_Increment отново прави празни записи само, че разликата е в това, че са подредени по номера. Няма ли как да се спрат тези презаписвания
 
Напиши :

print_r($_POST)

или

echo $sql

Сигурно нещо си объркал във формата или имената на променливите.
 
при echo $sql ми даде това
Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in C:\VertrigoServ\www\add.php on line 26
а на линия 26 имам това mysql_close($con); след него няма нищо друго
може ли това да е проблема.
 
webxaoz каза:
Значи, когато презаредя страницата с кода автоматично прави празен запис в таблицата. При положение че никъде не съм въвеждал нищо.
Направи проверка, дали даден бутон е натиснат, преди да взима (и изпраща) информацията от формата. В противен случай при всяко презареждане ще се изпращат данните от формата.

PHP:
<?php
if(isset($_POST['submit'])) {
	$id = (int)$_POST['id'];
	$name = addslashes(htmlspecialchars(trim($_POST['ime'])));
	$familia = addslashes(htmlspecialchars(trim($_POST['familia'])));
	$phone = (int)$_POST['phone'];
	$sql = "INSERT INTO `clients` (id, name, familiq, phone) VALUES('$id', '$name', '$familia', '$phone')";
	mysql_query($sql) or die(mysql_error());
} else {
	?>
	<form method='post' action=''>
		ID: <input type="text" name="id" /><br />
		Име: <input type="text" name="ime" /><br />
		Фамилия: <input type="text" name="familia" /><br />
		Телефон: <input type="text" name="phone" /><br />
		<input type="submit" name="submit" value="Изпрати данните!" />
	</form>
	<?php
}
?>
 
Да, може да не ги редиш по номера. Просто влез в phpmyadmin и на полето и махни индекса primary_key.
 
Ето целия код

<?php
$con = mysql_connect("localhost","root","vertrigo");
if (!$con)
{
die('Не може да се осъществи връзка със сървара: ' . mysql_error());
}
echo "Връзката със Сървара е успешна. </br>";

mysql_select_db("my_contacts", $con);
echo "Връзката със Базата данни е успешна. </br>";
------------------------------------------------------------------------------------
$sql="INSERT INTO clients (id, name, familiq, phone) VALUES
('$_POST[id]','$_POST[name]','$_POST[familiq]','$_POST[phone]')";

if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "Информацията за потребителя е записана успешно";
mysql_close($con);
?>


HTML-a
--------------------------------------------------------------------------------------
<form name="contacts" method="post" action="add.php">
Идентификационен Номер ID          <input type="text" name="id" size="10"></br></br>
Въведете Име:             <input type="text" name="name" size="25"></br></br>
Въведете Фамилия:     <input type="text" name="familiq" size="25"></br></br>
Въведете Телефон:      <input type="text" name="phone" size="25"></br></br>
<input type="submit" name="submit" value="Въведи">
<input name="reset" type="reset" value="Изчисти" />
</form>
 
Не трябва ли да е така :
$sql=mysql_query("INSERT INTO clients (id, name, familiq, phone) VALUES
('$_POST[id]','$_POST[name]','$_POST[familiq]','$_POST[phone]')");
 
Сложи едно
PHP:
if($_SERVER['REQUEST_METHOD'] == 'POST')
пред mysql_query

Не е добра практика да позволяваш на потребител да си избира id, както и да не стандартизираш данните, които той пише.


Поздрави!
 
Може ли малко повече обяснение относно това: (Не е добра практика да позволяваш на потребител да си избира id, както и да не стандартизираш данните, които той пише. ) id-то беше дадено в примера иначе не държа да го има. И сега идва въпроса? Трябва ли да го има или НЕ.
 
Твърдо НЕ. ID (идентификация) те интересува само теб за създаване на връзки в базата данни и лесен достъп до конкретна информация. В общият случай за стойност на полето id в базата данни се използва вградената функция на mysql за генериране на последователен номер или auto_increment.

Голям пропуск в сигурността на един сайт е липсата на валидация на данните постъпващи от формуляри. По този начин сайтът остава отворен за хакерски атаки. Ограничаването на символи, като например #, $, % или escape-ването им спестява много главоболия. В повечето случаи се избират допустими символи (само букви, само цифри или тирета, запетайки, точки и т.н.) Като за начало използването на функции като addslashes или mysql_real_escape_string са задължителни. Според мен най-добрият вариант е използването на регулярни изрази (RegEx) за валидация на всякакъв вид данни.

За повече информация по тези въпроси можеш да прочетеш в секцията Уроци на Web-tourist
 

Back
Горе