[php] Новичкам: задаем вопросы

Discussion in 'PHP' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. Fock

    Fock New Member

    Joined:
    20 Jul 2008
    Messages:
    0
    Likes Received:
    1
    Reputations:
    0
    PHP:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <title>Гостевая Книга</title>
    <meta http-equiv="Content-Type" content="text/html; charset= windows-1251">
    <head></head>
    <body>
    <form action  = '' method = 'POST'>
    <b>Имя</b><br><input type = 'text' name = 'name'><br>
    <b>Имейл</b><br><input type = 'text' name = 'email'><br>
    <b>Сообщение</b><br><textarea cols = '70' rows = '20' name = 'message'></textarea><br>
    <input type = 'submit' name = 'submit' value = 'Отправить'>
    <input type = 'reset' value = 'Очистить'><br><br>
    <?php 
    $date 
    date('t/m/Y - h:i:s'); 
    $name trim(substr($_POST['name'],0,25));
    $email trim(substr($_POST['email'],0,25));
    $message trim(substr($_POST['message'],0,300));
    $email filter_var ($_POST['email'],FILTER_VALIDATE_EMAIL);

    if(!
    filter_var ($_POST['email'],FILTER_VALIDATE_EMAIL) && isset ($_POST['email']))
    {
     exit(
    '<b><font color = \'red\'>Не верно заполнено поле имейл</font></b>');
    }

    $name htmlspecialchars($_POST['name'],ENT_QUOTES,'UTF-8');
    $email htmlspecialchars($_POST['email'],ENT_QUOTES,'UTF-8');
    $message htmlspecialchars($_POST['message'],ENT_QUOTES,'UTF-8'); 

    if (isset (
    $_POST['name']) && isset ($_POST['email']) && isset ($_POST['message']))
    {
     
    $mysql_connect mysql_connect ('localhost','root','vertrigo') or die (mysql_error());
     
    $insert_query mysql_query ("INSERT INTO guestbook.main (date,name,email,message) VALUES ('$date','".mysql_real_escape_string($name)."','".mysql_real_escape_string($email)."','".mysql_real_escape_string($message)."');") or die (mysql_error());

         if (
    $insert_query)
         {
          
    $select_query mysql_query ("SELECT date,name,email,message FROM guestbook.main") or die (mysql_error());
                 while (
    $row mysql_fetch_array($select_query))
                 {
                  echo 
    "Дата: {$row['date']} Имя: {$row['name']} Имейл: {$row['email']}".'<br>'.'<br>'."Сообщение: {$row['message']}".'<br>'.'<br>';
                 }
         }
    }
    ?>
    </body>
    </html>
    После отправки сообщения, при нажатии на F5, многократно дублируется и вносится в базу последнее сообщение, как этого избежать?
    Еще почему то не отображается дата, все время выводит 0000-00-00 00:00:00
     
    #16741 Fock, 31 Oct 2010
    Last edited: 31 Oct 2010
  2. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    всё, что касается работы с БД и проверкой POST-данных, помещаем ДО какого-либо вывода (в данном случае до
    Code:
     <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd"> 
    ).
    После проверки данных и соответствующих действий в БД используй редирект сразу, чтобы при F5 потом не отправлялись данные заново.
    Либо оставляй, как есть, редирект делай на JS или средствами meta через n секунд, если хочешь показать какое-то сообщение после добавления.

    Дату просто клади в формате date(U), потом выводи как нужно.
     
  3. Fock

    Fock New Member

    Joined:
    20 Jul 2008
    Messages:
    0
    Likes Received:
    1
    Reputations:
    0
    Редирект не помогает, я уже пытался так делать, до того, как запостил сюда.
    В общем был бы признатален, если бы дали готовый вариант, так как перепробовал уже все что можно. Голова уже не соображает.
     
  4. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    PHP:
         if ($insert_query
         { 
          
    $select_query mysql_query ("SELECT date,name,email,message FROM guestbook.main") or die (mysql_error()); 
                 while (
    $row mysql_fetch_array($select_query)) 
                 { 
                  echo 
    "Дата: {$row['date']} Имя: {$row['name']} Имейл: {$row['email']}".'<br>'.'<br>'."Сообщение: {$row['message']}".'<br>'.'<br>';
                  echo 
    "<script type=text/javascript>document.location.href='".basename(__FILE__)."'</script>"//redirect
                 

         }
    попробуй так
     
  5. bjong

    bjong Elder - Старейшина

    Joined:
    26 Jul 2003
    Messages:
    41
    Likes Received:
    12
    Reputations:
    18
    Необходимо сравнить две переменные,
    Если переменная a = b ничего не выводим, а вот если b хоть чем то отличается от a - выводим текст.
    Я ничего лучше придумать не смог чем:
    if ($a == $b) $c = '';
    else $c = '<tr><td>abc!</td></tr>';
    В принципе работает, но хочется сделать более быстрый вариант :)
     
  6. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    $c = ($a==$b) ? "" : '<tr><td>abc!</td></tr>';
     
  7. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Чё-то смысла в этом..
    При первой же итерации редирект сработает, не дав юзеру прочитать сообщение.

    Тогда уж в head пишем
    <meta http-equiv="refresh" content="5;URL=адрес">

    Через 5 секунд сработает редирект на "адрес".
     
  8. Fock

    Fock New Member

    Joined:
    20 Jul 2008
    Messages:
    0
    Likes Received:
    1
    Reputations:
    0
    Если так сделать, то сообщение вообще не постится и остальные сообщения тоже не отображаются.
     
  9. Fock

    Fock New Member

    Joined:
    20 Jul 2008
    Messages:
    0
    Likes Received:
    1
    Reputations:
    0
    Так юзер не успеет ввести сообщение, так как идет редирект через 5 секунд его нахождения на странице, а если и успеет, то после редиректа не отображаются не старые ни новые сообщения, просто пустая форма.
    Может в логике скрипта какая то ошибка и дело тут вовсе не в редиректе ?
     
  10. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    допиши в конец скрипта echo "<script type=text/javascript>document.location.href='".basename(__FILE__)."'</script>"; чтобы редирект был только после того как все действия выполнятся
    UP: точнее не в конец а после while
     
  11. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Если у тебя уже поймался $_POST, то зачем пользователь должен что-либо вводить?

    Если есть $_POST - отрабатываем добавление в БД и делаем редирект на эту же страницу, если нет - даём юзеру заполнить поля.


    SHiNiGaMi, всё равно юзер ничё не успеет увидеть.
     
  12. Timon132009

    Timon132009 Member

    Joined:
    7 Jun 2009
    Messages:
    137
    Likes Received:
    19
    Reputations:
    0
  13. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Timon132009 Это ответ почему не видна внешняя переменная $res:

    https://forum.antichat.ru/showthread.php?p=2407843#post2407843
    https://forum.antichat.ru/showthread.php?p=2394475#post2394475

    И посмотрите, какой параметр передается функции. Уточняю для ленивых - вы должны прописать вместо echo xorkey($a); => echo xorkey($res);
     
    _________________________
    1 person likes this.
  14. ФиЛя

    ФиЛя New Member

    Joined:
    15 Jun 2010
    Messages:
    8
    Likes Received:
    2
    Reputations:
    0
    $file='@C:\Users\ФиЛя\Desktop\Папки\ПХП\Тест\peoples\ava\'.$x1.'.jpg';
    $data=array('photo' => $file);

    так он выдает ошибку
    но если вместо переменной поставим цифку или букву то норм :

    $file='@C:\Users\ФиЛя\Desktop\Папки\ПХП\Тест\peoples\ava\1.jpg';
    $data=array('photo' => $file);

    скрин ошибки http://cs10555.vkontakte.ru/u80070400/-3/x_003cca84.jpg

    ошибку выдает на $data=array('photo' => $file);

    как в неё переменную вставить?
     
    #16754 ФиЛя, 1 Nov 2010
    Last edited: 1 Nov 2010
  15. h00lyshit!

    h00lyshit! [From Nobody To Root]

    Joined:
    10 Sep 2009
    Messages:
    289
    Likes Received:
    290
    Reputations:
    195
    Обратный слеш в пути файла экранирует кавычку, поэтому вылезает ошибка.
    Делай так:
    PHP:
    $file='C:/Users/ФиЛя/Desktop/Папки/ПХП/Тест/peoples/ava/'.$x1.'.jpg';
    $data=array('photo' => $file);
    Либо так:
    PHP:
    $file='C:\Users\ФиЛя\Desktop\Папки\ПХП\Тест\peoples\ava\\'.$x1.'.jpg';
    $data=array('photo' => $file);
     
    #16755 h00lyshit!, 1 Nov 2010
    Last edited: 1 Nov 2010
    6 people like this.
  16. Mirrey

    Mirrey New Member

    Joined:
    10 Sep 2010
    Messages:
    35
    Likes Received:
    1
    Reputations:
    0
    Не получается подсчитать кол-во символов в строке массива..
    Вот код, но вывод 0, всесто 4.... Или я не к месту использовал strlen() ?
    PHP:
    $files file("1.txt");
      if(!
    $files)
      { 
         echo 
    "Error";
      }
        else 
          {
          
             for(
    $i 1$i <= count($files);$i++)
             {
             
    $str_len strlen($files[$i]);
             echo (
    "$str_len"."\n");
          }}


     
  17. miniden

    miniden Elder - Старейшина

    Joined:
    20 Oct 2006
    Messages:
    258
    Likes Received:
    34
    Reputations:
    6
    PHP:
    <?php
    $file_array 
    file("c.txt");
    $co count($file_array);
    for(
    $i 0$i <= $co$i++)
    {
    $file_array[$i] = trim($file_array[$i]);
             
    $str_len strlen($file_array[$i]);
             echo 
    $str_len."<br>";
    }
    ?>
     
    1 person likes this.
  18. Mirrey

    Mirrey New Member

    Joined:
    10 Sep 2010
    Messages:
    35
    Likes Received:
    1
    Reputations:
    0
    miniden, сорри я сейчас проверить не могу... Так что задам вопрос. Может я конечно что-то не доглядел... Но кроме того что удаляются пробелы, я ничего нового не заметил =( Или я что-то пропустил?
     
    1 person likes this.
  19. miniden

    miniden Elder - Старейшина

    Joined:
    20 Oct 2006
    Messages:
    258
    Likes Received:
    34
    Reputations:
    6
    дже незнаю, + цикл с 1 а не с 0. Я так с нуля написал.
    на этот текстовый фалик выдает такое
     
    1 person likes this.
  20. Mirrey

    Mirrey New Member

    Joined:
    10 Sep 2010
    Messages:
    35
    Likes Received:
    1
    Reputations:
    0
    Хм... С 0 тоже пробовал, результат был тот же....
    Спасибо! Если что, отпишусь.
     
Thread Status:
Not open for further replies.