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

Форум MySQL

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

 

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

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

тема: Коментарий добавляеться 2, 3 раза в таблице
 
 автор: Jovidon   (17.07.2013 в 14:07)   письмо автору
 
 

почему?
Как этого избежать?

Вот форма

<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();
            }
        }
    }
?>

  Ответить  
 
 автор: Sfinks   (17.07.2013 в 20:29)   письмо автору
 
   для: 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());     
    } 
  } 
?>

  Ответить  
 
 автор: confirm   (17.07.2013 в 20:37)   письмо автору
 
   для: Sfinks   (17.07.2013 в 20:29)
 

!strlen(trim($_POST['name'])) - strlen тоже явно лишняя

  Ответить  
 
 автор: Sfinks   (17.07.2013 в 20:43)   письмо автору
 
   для: confirm   (17.07.2013 в 20:37)
 

ну да в принципе

  Ответить  
 
 автор: Jovidon   (18.07.2013 в 09:21)   письмо автору
 
   для: Sfinks   (17.07.2013 в 20:43)
 

а я та всегда проверяю форму так, тепер буду знать спасибо!
в таком порядке не будеть 2, 3 раза отправть форму?

  Ответить  
 
 автор: confirm   (18.07.2013 в 18:49)   письмо автору
 
   для: Jovidon   (18.07.2013 в 09:21)
 

Это от порядка не зависит, и почему дату как строку храните?

  Ответить  
 
 автор: Jovidon   (18.07.2013 в 19:01)   письмо автору
 
   для: confirm   (18.07.2013 в 18:49)
 

у меня mysql сохраняте дату как 0000-00-00 00:00:00 а мне надо сначала время а патом дата, поменял полю из тайм на варчар.

  Ответить  
 
 автор: confirm   (18.07.2013 в 19:13)   письмо автору
 
   для: Jovidon   (18.07.2013 в 19:01)
 

А если нужно будет сделать выборку по дате, что не так и редко требуется, тогда что?
Дату лучше и хранить как дату, а вывести ее можно как душе угодно, и это можно сделать средствами и mysql, и php.

  Ответить  
 
 автор: Jovidon   (18.07.2013 в 19:21)   письмо автору
 
   для: confirm   (18.07.2013 в 19:13)
 

точно!!! спасиба что напомнил

  Ответить  
 
 автор: Sfinks   (19.07.2013 в 13:48)   письмо автору
 
   для: Jovidon   (18.07.2013 в 09:21)
 

> в таком порядке не будеть 2, 3 раза отправть форму?
На главный вопрос я ответа не получил:

> автор: Sfinks (17.07.2013 в 20:29) письмо автору
> для: Jovidon (17.07.2013 в 14:07)
> Это при каких действиях происходит? Когда пользователь успевает несколько раз на кнопку нажать? или при каких?

  Ответить  
 
 автор: Jovidon   (22.07.2013 в 11:00)   письмо автору
 
   для: Sfinks   (19.07.2013 в 13:48)
 

не знаю.
собственно говоря этого хотел узанть, при коких действии это происходит?

  Ответить  
 
 автор: Sfinks   (22.07.2013 в 19:10)   письмо автору
 
   для: Jovidon   (22.07.2013 в 11:00)
 

У нас??? Вроде как у вас есть логи, есть база... А у нас только ваш рассказ.

Нужно для начала посмотреть в БД с каким промежутком повторы идут....

Если секунд 5-15, то это юзер с плохим интернетом жмет добавить несколько раз. Тогда нужно либо на кнопку "добавить" повесить JS и делать ее недоступной после первого нажатия, либо перед INSERT проверять наличие точно такой же записи за последние, ну например минуту. Либо и то и другое.

Если время дублей одинаковое или почти одинаковое, то нужно смотреть логи сервера, что откуда вызывается.... Возможно где-то есть зацикливание.... Копаться в коде и искать.

  Ответить  
 
 автор: Jovidon   (25.07.2013 в 10:29)   письмо автору
 
   для: Sfinks   (22.07.2013 в 19:10)
 

07:53:29 24.07.2013 в это время один комментий 3 раза добавлялас.

  Ответить  
 
 автор: Jovidon   (25.07.2013 в 10:42)   письмо автору
 
   для: Sfinks   (22.07.2013 в 19:10)
 

автор: Sfinks (17.07.2013 в 20:29)
Почему вы в поле input добавили htmlspecialchars($_POST['name'])
а разве эту функцию мы не используем когда выводим информацию из бд?
сейчас мы просто выводим пустой input ...

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

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