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

Форум MySQL

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

 

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

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

тема: POST
 
 автор: Sywooch   (28.03.2006 в 13:40)   письмо автору
 
 

В чем туплю?
Матом не крыть 2 дня только с MySql.

Короче пытаюсь данные из формы в БД записать, таким вот способом

// Это сама форма index.php


<form action="add_states.php" method="post">
  <input type="hidden" name="action" value="post">
  <p>
    <table align="center">
      <tr>
        <td>
          <table cellpadding="0" cellspacing="0">
            <tr>
              <td>
                Имя:
              </td><td>
                <Input name="name" type="text" size="32">
              </td></tr>
            <tr>
              <td>
                Сообщение:
              </td>
            </tr>
            <tr>
              <td colspan="2">
<textarea cols="50" rows="7" name="msg"></textarea>
              </td>
            </tr>
            <tr>
              <td colspan="2" align="right">
                <input type="submit" name="add_post" value="Добавить сообщение">
              </td>
            </tr>
          </table>          
        </td>
      </tr>
    </table>
  </p>
</form>


//А вот файл который это всё должен записать по идее.add_states.php

// код не мой. стырил из какой то гостевухи. так шо не ругаем. просто хочу понять вот чужое и колупаю

<?
session_start
();
$sid_add_theme session_id();
// Устанавливаем соединение с базой данных
include "config.php";
$error "";
$action "";
// Возвращаем значение переменной action, переданной в урле
$action $_POST["action"];
// Если оно не пусто - добавляем сообщение в базу данных
if (!empty($action)) 
{
  
// Проверяем совпадает ли идентификатор сессии с
  // переданным в форме - защита а авто-постинга
  
if($sid_add_theme != $_POST['sid_add_theme'])
  {
    
$action ""
    
$error $error."<LI>Ошибка добавления сообщения в гостевую книгу\n";
  }
  
// Проверяем сообщение на слишком длинные слова
  
$lenmsg strlen($msg);
  
$templen 0;
  
$temp strtok($msg" ");
  if (
strlen($msg)>60)
  {
    while (
$templen $lenmsg)
    { 
      if (
strlen($temp)>60)
      {
        
$action ""
        
$error $error."<LI>Текст сообщения содержит слишком много символов без пробелов\n";
        break;
      }
      else
      {
        
$templen $templen strlen($temp) + 1;
      }
      
$temp strtok(" ");            
    }       
  }
  
  
// Проверяем правильность ввода информации в поля формы
  
if (empty($_POST["msg"])) 
  {
    
$action ""
    
$error $error."<LI>Вы не ввели сообщение\n";
  }
  if (empty(
$_POST["name"])) 
  {
    
$action ""
    
$error $error."<LI>Вы не ввели имя\n";
  }

 

    
// Запрос к базе данных на добавление сообщения
    
$query "INSERT INTO guest VALUES (0,
                                        '
$name',
                                        '
$msg',
                                        NOW(),
                                        'show');"
;
    if(
mysql_query($query))
    {
      
// Возвращаемся на главную страницу если всё прошло удачно
      
print "<HTML><HEAD>\n";
      print 
"<META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>\n";
      print 
"</HEAD></HTML>\n";
      exit();
    }
    else
    {
      
// Выводим сообщение об ошибке в случае неудачи
      
echo "<a href='index.php'>Вернуться</a>";
      echo(
"<P> Ошибка при добавлении сообщения</P>");
      echo(
"<P> $query</P>");
      exit();
    }
  }
?>
Пусто :(


Записывает всё кроме Имени и самого сообщения :(
Как мне их туда передать.

Если тут усё совсем неправильно то покажите простейший пример хотяб с одним какимто полем :)

   
 
 автор: cheops   (28.03.2006 в 13:54)   письмо автору
 
   для: Sywooch   (28.03.2006 в 13:40)
 

Лучше немного для начала упростить код add_states.php (усложнить всегда успеете :)
<?php
// Устанавливаем соединение с базой данных 
include "config.php"
// Возвращаем значение переменной action, переданной в урле 
$action $_POST['action']; 
// Если оно не пусто - добавляем сообщение в базу данных 
if (!empty($action)) 

   
  
// Проверяем правильность ввода информации в поля формы 
  
if (empty($_POST['msg'])) exit("Вы не ввели сообщение");
  if (empty(
$_POST['name'])) exit("Вы не ввели имя");

  
// Защищаемся от SQL-инъекций
  
if (!get_magic_quotes_gpc())
  {
    
$_POST['msg']  = mysql_escape_string($_POST['msg']);
    
$_POST['name'] = mysql_escape_string($_POST['name']);
  }

  
// Запрос к базе данных на добавление сообщения 
  
$query "INSERT INTO guest VALUES (0, 
                                      '
$_POST[name]', 
                                      '
$_POST[msg]', 
                                      NOW(), 
                                      'show');"

    if(
mysql_query($query)) 
    { 
      
// Возвращаемся на главную страницу если всё прошло удачно 
      
print "<HTML><HEAD>\n"
      print 
"<META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>\n"
      print 
"</HEAD></HTML>\n"
      exit(); 
    } 
    else 
    { 
      
// Выводим сообщение об ошибке в случае неудачи 
      
echo "<a href='index.php'>Вернуться</a>"
      echo(
"<P> Ошибка при добавлении сообщения</P>"); 
      echo(
"<P> $query</P>"); 
      exit(); 
    } 
  } 
?> 

   
 
 автор: Sywooch   (28.03.2006 в 13:56)   письмо автору
 
   для: cheops   (28.03.2006 в 13:54)
 

Согласен.
А с формой все нормально чтоли?

   
 
 автор: cheops   (28.03.2006 в 14:00)   письмо автору
 
   для: Sywooch   (28.03.2006 в 13:56)
 

Да, с формой всё нормально.

   
 
 автор: Sywooch   (28.03.2006 в 14:02)   письмо автору
 
   для: cheops   (28.03.2006 в 14:00)
 

Опять вопросики. Но если вручную вводить то русским показует!
Значит гдето на пути теряеться.
Как это можно побороть.

ЗЫ. Кодировки везде cp1251_general_cs

   
 
 автор: Sywooch   (28.03.2006 в 14:09)   письмо автору
 
   для: Sywooch   (28.03.2006 в 14:02)
 

Заработало!
Как вы ранее и писали.
После выбора базы:
mysql_query("SET NAMES 'cp1251'");

   
 
 автор: evgen   (29.03.2006 в 04:39)   письмо автору
 
   для: Sywooch   (28.03.2006 в 14:09)
 

Уважаемый cheops !

А переменной $action в файле config.php чего присваиваем (после подключения к хосту и выбора базы) ?

Очень интересуюсь !

Спасибо!

P.S. Или эта та самая $action, которая из скрытого поля формы пришла ..?

Тогда вот это чего такое :
...
// Устанавливаем соединение с базой данных 
   include "config.php"; 
        $error = ""; 
        $action = ""; 

?

   
 
 автор: cheops (из кафе)   (29.03.2006 в 13:09)
 
   для: evgen   (29.03.2006 в 04:39)
 

Нет, комментарий
// Устанавливаем соединение с базой данных 

относится только к конструкции include, а следующие переменные - это вспомогательные переменные самого скрипта, т.е. $action - это переменная из HTML-формы.

   
 
 автор: Evgen   (29.03.2006 в 15:28)   письмо автору
 
   для: cheops (из кафе)   (29.03.2006 в 13:09)
 

Понял, спасибо!

Только не совсем понятен тайный смысл передачи этой переменной из формы в сценарий, что она (переменная) дает?

форма:
...
  <input type="hidden" name="action" value="post">


сценарий:
...
// Возвращаем значение переменной action, переданной в урле 
$action = $_POST['action']; 
// Если оно не пусто - добавляем сообщение в базу данных 
if (!empty($action)) 
...


Все что она ($action) выполняет - сообщает о том, что форма запустила файл *.php? А разве этот файл может быть как-то иначе запущен?

Или я ошибаюсь?

   
 
 автор: cheops   (29.03.2006 в 18:25)   письмо автору
 
   для: Evgen   (29.03.2006 в 15:28)
 

Если у вас нет HTML-формы в этом же файле, то $action не нужна (если честно, если и есть без неё вполне можно обойтись) - поэтому всё что с ней связано можно удалять - она обычно нужна когда у вас в этом же файл HTML-форма и необходимо различать состояния когда нажата кнопка отправки данных из HTML-формы, а когда нет.

   
 
 автор: Evgen   (29.03.2006 в 23:34)   письмо автору
 
   для: cheops   (29.03.2006 в 18:25)
 

Спасибо за пояснение - значит верной дорогой иду ..!

   
 
 автор: Evgen   (29.03.2006 в 23:43)   письмо автору
 
   для: cheops   (29.03.2006 в 18:25)
 

-

   
Rambler's Top100
вверх

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