Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2011, 00:21   #1
xRoKFoRx
Новичок
Джуниор
 
Регистрация: 19.12.2011
Сообщений: 18
По умолчанию MySQL

Из формы
Код:
<FORM ACTION="send.php" METHOD=post>
<TABLE BORDER=0>
<tr><td>Тема</td><td>
<input type=text name="sex" cols=40>
</td></tr>
<TR>
<TD colspan=2>
Сообщение: <BR><textarea name="sex1" cols=25 rows=5></textarea></TD></TR>
<TR>
<TD colspan=2 align=center><input type=submit value="Отправить"> <input type=reset 

value="Очистить"></TD></TR>
</TABLE></FORM>
через скрипт

Код:
<?php

$to = "111111@mail.ru";

$host = "localhost";
$user = "root";
$password = "";
$db = "cosmos";
 
if (!$conn = mysql_connect($host, $user, $password))
{
echo "<h2>MySQL Error!</h2>";
exit;
}
 
$sex = $_POST['sex'];
$sex1 = $_POST['sex1'];

mysql_select_db($db);
mysql_set_charset("cp1251"); 
 
$result = mysql_query("INSERT INTO `cosmos`.`dialog` (sex, sex1) VALUES('$sex', '$sex1')");
 
if ($result== 'true') 
{echo "готово";}
else{echo "не готово";}
 
header("Location: send.php");
    
?>
Все записываеться в БД, НО!!Должна записаться одна строка!А их с каждым кликом на кнопку отправить записываеться ДВАДЦАТЬ одна!!
Подскажите почему,никогда с этим не сталкивался!!И подскажите ещё можно ли отправлять таким образом записи из формы на эл. почту??
xRoKFoRx вне форума Ответить с цитированием
Старый 20.12.2011, 00:31   #2
spein
Программист
Форумчанин
 
Аватар для spein
 
Регистрация: 27.02.2009
Сообщений: 505
По умолчанию

Код:
<?php

$to = "111111@mail.ru";

$host = "localhost";
$user = "root";
$password = "";
$db = "cosmos";
 
if (!$conn = mysql_connect($host, $user, $password))
{
echo "<h2>MySQL Error!</h2>";
exit;
}
 
$sex = $_POST['sex'];
$sex1 = $_POST['sex1'];

mysql_select_db($db);
mysql_set_charset("cp1251"); 
 
if($sex && $sex1) {
$result = mysql_query("INSERT INTO `cosmos`.`dialog` (sex, sex1) VALUES('$sex', '$sex1')");
}
 
if ($result== 'true') 
{echo "готово";}
else{echo "не готово";}
 
header("Location: send.php");
    
?>
there are no limits when you're software engineer
spein вне форума Ответить с цитированием
Старый 20.12.2011, 00:37   #3
xRoKFoRx
Новичок
Джуниор
 
Регистрация: 19.12.2011
Сообщений: 18
По умолчанию

Цитата:
Сообщение от spein Посмотреть сообщение
Код:
<?php

$to = "111111@mail.ru";

$host = "localhost";
$user = "root";
$password = "";
$db = "cosmos";
 
if (!$conn = mysql_connect($host, $user, $password))
{
echo "<h2>MySQL Error!</h2>";
exit;
}
 
$sex = $_POST['sex'];
$sex1 = $_POST['sex1'];

mysql_select_db($db);
mysql_set_charset("cp1251"); 
 
if($sex && $sex1) {
$result = mysql_query("INSERT INTO `cosmos`.`dialog` (sex, sex1) VALUES('$sex', '$sex1')");
}
 
if ($result== 'true') 
{echo "готово";}
else{echo "не готово";}
 
header("Location: send.php");
    
?>
После выполнения скрипта вылазит - MySQL Error!
xRoKFoRx вне форума Ответить с цитированием
Старый 20.12.2011, 02:28   #4
QunneD
C++ &amp;amp; PHP &amp;amp; Asm
Форумчанин
 
Аватар для QunneD
 
Регистрация: 06.12.2008
Сообщений: 300
По умолчанию

PHP код:
<?php

$to 
"111111@mail.ru";

$host "localhost";
$user "root";
$password "";
$db "cosmos";
 
if (!
$conn mysql_connect($host$user$password))
{
echo 
"<h2>MySQL Error!</h2>";
exit;
}
 
$sex $_POST['sex'];
$sex1 $_POST['sex1'];

mysql_select_db($db);
mysql_set_charset("cp1251"); 
 
$result mysql_query("INSERT INTO `cosmos`.`dialog` (sex, sex1) VALUES('$sex', '$sex1')");
 
if (
$result== 'true'
{echo 
"готово";}
else{echo 
"не готово";}
 
header("Location: send.php");
    
?>
Это скрипт send.php? Если да, то просто перед перенаправлением производите освобождение переменных с POST значением, пример: unset($sex);
QunneD вне форума Ответить с цитированием
Старый 20.12.2011, 09:20   #5
xRoKFoRx
Новичок
Джуниор
 
Регистрация: 19.12.2011
Сообщений: 18
По умолчанию

Цитата:
Сообщение от QunneD Посмотреть сообщение
PHP код:
<?php

$to 
"111111@mail.ru";

$host "localhost";
$user "root";
$password "";
$db "cosmos";
 
if (!
$conn mysql_connect($host$user$password))
{
echo 
"<h2>MySQL Error!</h2>";
exit;
}
 
$sex $_POST['sex'];
$sex1 $_POST['sex1'];

mysql_select_db($db);
mysql_set_charset("cp1251"); 
 
$result mysql_query("INSERT INTO `cosmos`.`dialog` (sex, sex1) VALUES('$sex', '$sex1')");
 
if (
$result== 'true'
{echo 
"готово";}
else{echo 
"не готово";}
 
header("Location: send.php");
    
?>
Это скрипт send.php? Если да, то просто перед перенаправлением производите освобождение переменных с POST значением, пример: unset($sex);
да это скрипт send.php. сделал как вы сказали,не помогло..или не правильно сделал..в инете не могу ниче найти.
xRoKFoRx вне форума Ответить с цитированием
Старый 20.12.2011, 09:43   #6
zamaevac
Пользователь
 
Аватар для zamaevac
 
Регистрация: 22.03.2010
Сообщений: 88
По умолчанию

xRoKFoRx, вы знаете, я глянул ваш код (send.php файла) и вижу тут дофига багов. Какой именно приводит к некорректной работе трудно сказать .

1. Вы открыл соединение с БД и было бы совсем не хреново закрыть его по окончанию записи! Но это меньшее из зол, не спорю. Дальше ...

2. Вы вот присваиваете значения $sex и $sex1 переменным, а если переменных $_POST['sex'] и $_POST['sex1'] не существует? То что скрипт загружен по методу POST и принял нужные переменные необходимо проверять в самом начале скрипта.

3. Вы так бесхитростно пишете INSERT-ом в базу и не задумываетесь, что переменная $sex1 у вас многострочная, т.к. получается из textarea. Сколько вы там строк набили, столько в базу и запишется. Вы говорите "Должна записаться одна строка!" - да ни кому она ни чего не должна, т.к. textarea многострочный элемент формы!

Последний раз редактировалось zamaevac; 20.12.2011 в 09:46.
zamaevac вне форума Ответить с цитированием
Старый 20.12.2011, 12:15   #7
xRoKFoRx
Новичок
Джуниор
 
Регистрация: 19.12.2011
Сообщений: 18
По умолчанию

Цитата:
Сообщение от zamaevac Посмотреть сообщение
xRoKFoRx, вы знаете, я глянул ваш код (send.php файла) и вижу тут дофига багов. Какой именно приводит к некорректной работе трудно сказать .

1. Вы открыл соединение с БД и было бы совсем не хреново закрыть его по окончанию записи! Но это меньшее из зол, не спорю. Дальше ...

2. Вы вот присваиваете значения $sex и $sex1 переменным, а если переменных $_POST['sex'] и $_POST['sex1'] не существует? То что скрипт загружен по методу POST и принял нужные переменные необходимо проверять в самом начале скрипта.

3. Вы так бесхитростно пишете INSERT-ом в базу и не задумываетесь, что переменная $sex1 у вас многострочная, т.к. получается из textarea. Сколько вы там строк набили, столько в базу и запишется. Вы говорите "Должна записаться одна строка!" - да ни кому она ни чего не должна, т.к. textarea многострочный элемент формы!
Добавил закрывашку,избавился от переменных(запись идет напрямую),подскажите каким образом можно ещё добавлять записи в бд(я кроме inserta не знаю ни каких),или как ещё можно решить эту проблему??
xRoKFoRx вне форума Ответить с цитированием
Старый 20.12.2011, 13:39   #8
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
$sex1 у вас многострочная, т.к. получается из textarea. Сколько вы там строк набили, столько в базу и запишется. Вы говорите "Должна записаться одна строка!" - да ни кому она ни чего не должна, т.к. textarea многострочный элемент формы!
И? Вы невнимательны.
Код:
$result = mysql_query("INSERT INTO `cosmos`.`dialog` (sex, sex1) VALUES('$sex', '$sex1')");
Как видно $sex1 взята в апострофы => Текст запишется правильно, и обрежется до размеров поля. пусть то будет varchar или text.

Вы бы сначала пример у себя попробовали, а потом уж, писали свои аргументы.

ТС:
Так как у вас скрипт работает там же где и форма, советую форму тоже обозвать и делать проверку на нее в коде
Код:
<FORM ACTION="send.php" METHOD=post name="comment">
<TABLE BORDER=0>
<tr><td>Тема</td><td>
<input type=text name="sex" cols=40>
</td></tr>
<TR>
<TD colspan=2>
Сообщение: <BR><textarea name="sex1" cols=25 rows=5></textarea></TD></TR>
<TR>
<TD colspan=2 align=center><input type=submit value="Отправить"> <input type=reset 

value="Очистить"></TD></TR>
</TABLE></FORM>
Код:

<?php
if (isset($_POST['comment']))
{
  if (!isset($_POST['sex'], $_POST['sex1']))
  {
    echo 'Не все поля заполнены';
    die;
  }

  $to = "111111@mail.ru";

  $host = "localhost";
  $user = "root";
  $password = "";
  $db = "cosmos";

  if (!$conn = mysql_connect($host, $user, $password))
  {
    echo "<h2>MySQL Error!</h2>";
    exit;
  }

  $sex = $_POST['sex'];
  $sex1 = $_POST['sex1'];

  mysql_select_db($db);
  mysql_set_charset("cp1251"); 
 
  $result = mysql_query("INSERT INTO `cosmos`.`dialog` (sex, sex1) VALUES('$sex', '$sex1')", $conn); // не помешает
 
  if ($result) // у вас было сравнение на строку ($result == 'true'), что не есть гуд. Смотрите доки
  {
    echo "готово";
  }
  else
  {
    echo "не готово";
  }

  mysql_close($conn);
 
  header("Location: send.php");
} // проверка формы  
?>
А теперь вопрос всем: Почему мой код не будет работать и как его изменить что бы он отрабатывал?

Последний раз редактировалось psycho-coder; 20.12.2011 в 13:46.
psycho-coder вне форума Ответить с цитированием
Старый 20.12.2011, 14:05   #9
zamaevac
Пользователь
 
Аватар для zamaevac
 
Регистрация: 22.03.2010
Сообщений: 88
По умолчанию

Цитата:
Сообщение от psycho-coder Посмотреть сообщение
И? Вы невнимательны.
Код:
$result = mysql_query("INSERT INTO `cosmos`.`dialog` (sex, sex1) VALUES('$sex', '$sex1')");
Как видно $sex1 взята в апострофы => Текст запишется правильно, и обрежется до размеров поля. пусть то будет varchar или text.

Вы бы сначала пример у себя попробовали, а потом уж, писали свои аргументы.
Спасибо Кеп. Вы правы, сбоя не произойдет и всё запишется. Но в БД символ (\n) таким же и останется и при считывании будет интерпретироваться как новая строка. Вот что имелось ввиду. Я предположил, что у человека проблема может быть в этом.

Цитата:
Сообщение от xRoKFoRx Посмотреть сообщение
подскажите каким образом можно ещё добавлять записи в бд(я кроме inserta не знаю ни каких),или как ещё можно решить эту проблему??
Запись то в базу по insert-у. Я имел в виду другое, что вы вставляете переменную в SQL-запрос даже не экранируя спец символы - вот что я имел в виду. Не стоит так делать, привыкните. Да и в строке может попасся символ ('), тогда запрос вовсе не сработает.
zamaevac вне форума Ответить с цитированием
Старый 20.12.2011, 14:15   #10
xRoKFoRx
Новичок
Джуниор
 
Регистрация: 19.12.2011
Сообщений: 18
По умолчанию

Цитата:
Сообщение от psycho-coder Посмотреть сообщение
И? Вы невнимательны.
Код:
$result = mysql_query("INSERT INTO `cosmos`.`dialog` (sex, sex1) VALUES('$sex', '$sex1')");
Как видно $sex1 взята в апострофы => Текст запишется правильно, и обрежется до размеров поля. пусть то будет varchar или text.

Вы бы сначала пример у себя попробовали, а потом уж, писали свои аргументы.

ТС:
Так как у вас скрипт работает там же где и форма, советую форму тоже обозвать и делать проверку на нее в коде
Код:
<FORM ACTION="send.php" METHOD=post name="comment">
<TABLE BORDER=0>
<tr><td>Тема</td><td>
<input type=text name="sex" cols=40>
</td></tr>
<TR>
<TD colspan=2>
Сообщение: <BR><textarea name="sex1" cols=25 rows=5></textarea></TD></TR>
<TR>
<TD colspan=2 align=center><input type=submit value="Отправить"> <input type=reset 

value="Очистить"></TD></TR>
</TABLE></FORM>
Код:

<?php
if (isset($_POST['comment']))
{
  if (!isset($_POST['sex'], $_POST['sex1']))
  {
    echo 'Не все поля заполнены';
    die;
  }

  $to = "111111@mail.ru";

  $host = "localhost";
  $user = "root";
  $password = "";
  $db = "cosmos";

  if (!$conn = mysql_connect($host, $user, $password))
  {
    echo "<h2>MySQL Error!</h2>";
    exit;
  }

  $sex = $_POST['sex'];
  $sex1 = $_POST['sex1'];

  mysql_select_db($db);
  mysql_set_charset("cp1251"); 
 
  $result = mysql_query("INSERT INTO `cosmos`.`dialog` (sex, sex1) VALUES('$sex', '$sex1')", $conn); // не помешает
 
  if ($result) // у вас было сравнение на строку ($result == 'true'), что не есть гуд. Смотрите доки
  {
    echo "готово";
  }
  else
  {
    echo "не готово";
  }

  mysql_close($conn);
 
  header("Location: send.php");
} // проверка формы  
?>
А теперь вопрос всем: Почему мой код не будет работать и как его изменить что бы он отрабатывал?

Кстате решил попробывать заполнить строку через phpmyadmin.И он создает 22 строки и в каждой одинаковые значения(которое вписывал в поля),а через форму вписываеться 21 строка(одно значение из формы, а остальные пустые!!!)Это что то с phpmyadmin...

Последний раз редактировалось xRoKFoRx; 20.12.2011 в 14:21.
xRoKFoRx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Mysql+Delphi 2010 Использую libmysql.dll + mysql.pas не могу инф сохранить в базу kGpROGER БД в Delphi 7 30.12.2010 18:27
есть адреси в mysql нужно поиска с AJAX for mysql orter PHP 1 24.09.2010 10:24
обновление в блоге - Работа с MySQL в С++ с использованием библиотеки mysql++ Pblog Обсуждение статей 0 16.08.2009 16:00
MySQL нужна библ. для Visual C++ (MySql++) Alexoid Visual C++ 8 07.05.2008 18:29