|
|
|
| почему?
Как этого избежать?
Вот форма
<form method="post" action="#">
<input type="text" name="name" required>
<textarea cols="12" rows="6" required></textarea>
<input type="hidden" name="ip" value="<?=$_SERVER['REMOTE_ADDR']; ?>">
<button>O</button>
</form>
<?php
if(isset($_POST))
{
$error = array();
if(empty($_POST['name'])) $error = "bla bla";
if(empty($_POST['comment'])) $error = "bla bla";
if(empty($error))
{
$sql = "INSERT INTO table
VALUES (0,'"
.mysql_real_escape_string($_POST['name'])."','"
.mysql_real_escape_string($_POST['comment'])."','"
.mysql_real_escape_string($_POST['ip'])."','"
.date("H:i:s d.m.Y")."')";
$res = mysql_query($sql);
if(!$res)
{
echo "bla";
exit();
}
}
}
?>
|
| |
|
|
|
|
|
|
|
для: Jovidon
(17.07.2013 в 14:07)
| | Это при каких действиях происходит? Когда пользователь успевает несколько раз на кнопку нажать? или при каких?
PS. А зачем вы IP передаете с формой? Чтоб его можно было подменить?
PPS. if(isset($_POST)) - это бред. Он всегда изсет.
PPPS. $error = array(); и $error = "bla bla"; - противоречия не находите?
PPPPS. if(empty($_POST['name'])) - а имя "0" не допустимо?
PPPPPS: Вы у textarea атрибут name не забыли?
PPPPPPS. Не очень логична проверка после формы. А если эррор будете по новой форму выводить новым кодом? Лучше так:
<?php
$error = array();
if($_POST)
{
if(!strlen(trim($_POST['name']))) $error[] = "bla bla";
if(!strlen(trim($_POST['comment']))) $error[] = "bla bla";
if($error){
?>
<div class=error>Исправьте ошибки:<br><?=implode('<br>',$error)?></div>
<?php
}
}
if(!$_POST || $error){
?>
<form method="post" action="<?=$_SERVER['REQUEST_URI']?>">
<input type="text" name="name" required value="<?=htmlspecialchars($_POST['name'])?>">
<textarea cols="12" rows="6" required name="comment" value="<?=htmlspecialchars($_POST['comment'])?>"></textarea>
<button>O</button>
</form>
<?php
}
else{
$sql = "INSERT INTO table
VALUES (0,'"
.mysql_real_escape_string($_POST['name'])."','"
.mysql_real_escape_string($_POST['comment'])."','"
.mysql_real_escape_string($_SERVER['REMOTE_ADDR'])."','"
.date("H:i:s d.m.Y")."')";
if(!$res = mysql_query($sql)){
exit($sql.'<br>'.mysql_error());
}
}
?>
|
| |
|
|
|
|
|
|
|
для: Sfinks
(17.07.2013 в 20:29)
| | !strlen(trim($_POST['name'])) - strlen тоже явно лишняя | |
|
|
|
|
|
|
|
для: confirm
(17.07.2013 в 20:37)
| | ну да в принципе | |
|
|
|
|
|
|
|
для: Sfinks
(17.07.2013 в 20:43)
| | а я та всегда проверяю форму так, тепер буду знать спасибо!
в таком порядке не будеть 2, 3 раза отправть форму? | |
|
|
|
|
|
|
|
для: Jovidon
(18.07.2013 в 09:21)
| | Это от порядка не зависит, и почему дату как строку храните? | |
|
|
|
|
|
|
|
для: confirm
(18.07.2013 в 18:49)
| | у меня mysql сохраняте дату как 0000-00-00 00:00:00 а мне надо сначала время а патом дата, поменял полю из тайм на варчар. | |
|
|
|
|
|
|
|
для: Jovidon
(18.07.2013 в 19:01)
| | А если нужно будет сделать выборку по дате, что не так и редко требуется, тогда что?
Дату лучше и хранить как дату, а вывести ее можно как душе угодно, и это можно сделать средствами и mysql, и php. | |
|
|
|
|
|
|
|
для: confirm
(18.07.2013 в 19:13)
| | точно!!! спасиба что напомнил | |
|
|
|
|
|
|
|
для: Jovidon
(18.07.2013 в 09:21)
| | > в таком порядке не будеть 2, 3 раза отправть форму?
На главный вопрос я ответа не получил:
> автор: Sfinks (17.07.2013 в 20:29) письмо автору
> для: Jovidon (17.07.2013 в 14:07)
> Это при каких действиях происходит? Когда пользователь успевает несколько раз на кнопку нажать? или при каких? | |
|
|
|
|
|
|
|
для: Sfinks
(19.07.2013 в 13:48)
| | не знаю.
собственно говоря этого хотел узанть, при коких действии это происходит? | |
|
|
|
|
|
|
|
для: Jovidon
(22.07.2013 в 11:00)
| | У нас??? Вроде как у вас есть логи, есть база... А у нас только ваш рассказ.
Нужно для начала посмотреть в БД с каким промежутком повторы идут....
Если секунд 5-15, то это юзер с плохим интернетом жмет добавить несколько раз. Тогда нужно либо на кнопку "добавить" повесить JS и делать ее недоступной после первого нажатия, либо перед INSERT проверять наличие точно такой же записи за последние, ну например минуту. Либо и то и другое.
Если время дублей одинаковое или почти одинаковое, то нужно смотреть логи сервера, что откуда вызывается.... Возможно где-то есть зацикливание.... Копаться в коде и искать. | |
|
|
|
|
|
|
|
для: Sfinks
(22.07.2013 в 19:10)
| | 07:53:29 24.07.2013 в это время один комментий 3 раза добавлялас. | |
|
|
|
|
|
|
|
для: Sfinks
(22.07.2013 в 19:10)
| | автор: Sfinks (17.07.2013 в 20:29)
Почему вы в поле input добавили htmlspecialchars($_POST['name'])
а разве эту функцию мы не используем когда выводим информацию из бд?
сейчас мы просто выводим пустой input ... | |
|
|
|