[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Че за проблема с формой ?
Winston
Здравствуйте, такая вот проблема:
Создал форму для занесения информации в базу данных, и к ней сделал обработчик,
который заносит данные в БД, все работает, но есть одна проблема, форма не видит внесенный в нее текст,
и в БД добавляет пустые столбики, вот код формы:

Свернутый текст
HTML
<p align="center">Добавление нового контента !</p>

<script language="JavaScript">
<!-- JavaScript
function proverka(form)
{
//Если не заполнено поле
if((form.title.value=="")||(form.meta_d.value=="")||(form.meta_t.value=="")||
(form.date.value=="")||(form.description.value=="")||(form.text.value=="")||
(form.crack.value=="")||(form.interfase.value=="")||(form.size.value==""))
{
//Выводим сообщение
alert("Заполнены не все поля. Добавление невозможно !");
//Возвращаем ложь
return false;
}
//Если заполнены все поля
else
//Возвращаем правду
return true;
}
// - JavaScript - -->
</script>


<form name="form1" method="post" action="add_content.php" onSubmit="return proverka(form1)">

<p>Введите незвание добавляемого контента:<br>
<input name="title" type="text" id="title" size="60">
</label></p>

<p><label>Введите краткое описание контента:<br>
<input name="meta_d" type="text" id="meta_d" size="60">
</label></p>

<p><label>Введите ключевые слова для контента:<br>
<input name="meta_t" type="text" id="meta_t" size="60">
</label></p>

<p><label>Введите дату добавления:<br>
<input name="date" type="text" id="date" value="2009-06-20">
</p>

<p>Введите краткое описание контента:<br>
<textarea name="description" id="description" cols="60" rows="5"></textarea>
</label></p>

<p><label>Введите полное описание контента:<br>
<textarea name="text" id="text" cols="60" rows="20"></textarea>
</label></p>

<p><label>Описание таблетки:<br>
<input name="crack" type="text" id="crack" size="60">

<p>Язык интерфейса программы:<br>
<input name="interfase" type="text" id="interfase" size="60"></p>

<p><label>Введите размер программы:<br>
<input name="size" type="float" id="size" size="60">
</label></p>

<p><label>
<input type="submit" name="submit" id="submit" value="Добавить новый контент">
</label>

<label>
<input type="reset" name="reset" id="reset" value="Сбросить все ">
</label>
</p>
</form>




А вот код обработчика формы, который добавляет информацию но создает пустые столбики:


Свернутый текст
PHP
<?php 
include 
("bloc/bd.php");

// Первый if это предохраниние от хостингов которые не разрешают прямую передачу переменных
// Вотой if это проверка е пустая ли переменная, если пустая она уничтожается
if (isset($_POST['title']))       {$title = $_POST['title'];       if ($title == '')       {unset ($title);      }}
if (isset($_POST['meta_d']))      {$title = $_POST['meta_d'];      if ($meta_d == '')      {unset ($meta_d);     }}
if (isset($_POST['meta_t']))      {$title = $_POST['meta_t'];      if ($meta_t == '')      {unset ($meta_t);     }}
if (isset($_POST['date']))        {$title = $_POST['date'];        if ($date == '')        {unset ($date);       }}
if (isset($_POST['description'])) {$title = $_POST['description']; if ($description == '') {unset ($description);}}
if (isset($_POST['text']))        {$title = $_POST['text'];        if ($text == '')        {unset ($text);       }}
if (isset($_POST['crack']))       {$title = $_POST['crack'];       if ($crack == '')       {unset ($crack);      }}
if (isset($_POST['interfase']))   {$title = $_POST['interfase'];   if ($interfase == '')   {unset ($interfase);  }}
if (isset($_POST['size']))        {$title = $_POST['size'];        if ($size == '')        {unset ($size);       }}

?>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Добавление контента</title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<table width="1037" border="1px" align="center" cellpadding="0" cellspacing="0" class="main_border">
<?php include ("bloc/shapka.php"); ?>
<tr class="main_border">
<td>
<table width="1037" border="0px" cellpadding="0" cellspacing="0">
<tr>

<td width="824" valign="top" class="left">

<?php include ("admin_panel.php") ?>

<?php

$result 
= mysql_query ("INSERT INTO proba (title, meta_d, meta_t, date, description, text, crack, interfase, size) 
VALUES ('$title', '$meta_d', '$meta_t', '$date', '$description', '$text', '$crack', '$interfase', '$size')"
);

if ($result == 'true')

{
 echo "Контент успешно занесен в базу !"; }

else { echo "Ошибка, контент не может быть добавлен в базу !"; }



?>
<?php  include 
("bloc/bottom.php");


Но если еще перед $result добавить конструкцию if else
которая будет проверять существует ли переменная, то тогда при попытки добавления инфы в БД
эта конструкция не позволяет добавить инфу, вот код проверки переменных:


PHP
// Если переменные существуют значит выполняем то что стоит
// в $result, в противном случае возращаем ложь, else
if (isset($title) && isset($meta_d) && isset($meta_t) &&
 isset($date) && isset($description) && isset($text) && 
isset($crack) && isset($interfase) && isset($size))

else
{
echo "Невозможно добавить информацию !";    
}


Проверку переменных добавляем if добавляем перед $result, else после последнего else.

И вот что в итоге добавляется в БД:


Если обнаружите ошибку, пожалуйста покажите ее и объясните как ее исправить.
Заранее благодарен

И еще почему то данные занесенные в $size попадают в $title.


 ! 

М
Я настоятельно рекомендую Вам не использовать впредь такие названия тем на форуме. Название топика должно быть информативное, без лишних "Чо за"
jetistyum




Спустя 31 минута, 1 секунда (26.06.2009 - 20:54) twin написал(а):
Первым делом в таких случаях нужно смотреть что в массиве POST

PHP
print_r($_POST);

А страшная проверка переменных сводится к банальной строчке
PHP
$title = !empty($_POST['title'])?$_POST['title']:NULL;

Вот тут? можно побаловаться.

Кроме того, запрос нужно проверять. Вот так:
PHP
$result = mysql_query ("INSERT INTO proba 
(title, meta_d, meta_t, date, description, text, crack, 
interfase, size) VALUES ('$title', '$meta_d', '$meta_t', 
'$date', '$description', '$text', '$crack', '$interfase', '$size')"
)
or die(mysql_error().'<br> file '.__FILE__.'<br> line '.__LINE__);

А потом уже делать выводы

Спустя 25 минут, 15 секунд (26.06.2009 - 21:20) Winston написал(а):
Цитата (twin @ 26.06.2009 - 20:54)
Кроме того, запрос нужно проверять. Вот так:
PHP
$result = mysql_query ("INSERT INTO proba 
(title, meta_d, meta_t, date, description, text, crack, 
interfase, size) VALUES ('$title', '$meta_d', '$meta_
', '$date', '$description', '$text', '$crack', '$interfase', '$size')"
)
or die(mysql_error().'<br> file '.__FILE__.'<br> line '.__LINE__);


twin спасибо за помощь но можете объяснить нужно ли что то подставлять на место FILE и LINE

Спустя 3 минуты, 6 секунд (26.06.2009 - 21:23) twin написал(а):
Ничего не нужно. Первый покажет файл, в котором этот запрос, это удобно если много инклюдов. Второй строку, на которой запрос находится. Это для того, что бы точно знать, кто виноват.

Спустя 2 часа, 37 секунд (26.06.2009 - 23:23) Kuliev написал(а):
PHPprogramer
PHP
if (isset($_POST['title']))       {$title $_POST['title'];       if ($title == '')       {unset ($title);      }}
if (isset(
$_POST['meta_d']))      {$title $_POST['meta_d'];      if ($meta_d == '')      {unset ($meta_d);     }}
if (isset(
$_POST['meta_t']))      {$title $_POST['meta_t'];      if ($meta_t == '')      {unset ($meta_t);     }}
if (isset(
$_POST['date']))        {$title $_POST['date'];        if ($date == '')        {unset ($date);       }}
if (isset(
$_POST['description'])) {$title $_POST['description']; if ($description == '') {unset ($description);}}
if (isset(
$_POST['text']))        {$title $_POST['text'];        if ($text == '')        {unset ($text);       }}
if (isset(
$_POST['crack']))       {$title $_POST['crack'];       if ($crack == '')       {unset ($crack);      }}
if (isset(
$_POST['interfase']))   {$title $_POST['interfase'];   if ($interfase == '')   {unset ($interfase);  }}
if (isset(
$_POST['size']))        {$title $_POST['size'];        if ($size == '')        {unset ($size);       }}


Уважаемый это полный бред Вы везде присваиваете значения одной и той же переменно а в базу заносите разные которые вообще не существуют.

Спустя 1 день, 12 часов, 35 минут, 7 секунд (28.06.2009 - 11:58) Winston написал(а):
Kuliev БОЛЬШОЕ спасибо Вам за ответ, но Вы можете подсказать как сделать правильно, чтобы в базу добавлялся текст, а не пустые ячейки. Уже все перепробовал но результат тот же. Что в моем коде не то, что в базу добавляется пустота.

Спустя 24 минуты, 44 секунды (28.06.2009 - 12:23) agrus написал(а):
Вообще-то Kuliev вам уже прямо указал на вашу ошибку. Но если вы не поняли, посмотрите внимательней на то, какую переменную вы проверяете на существование, а какой присваиваете значение переменной POST.

Спустя 1 час, 2 минуты, 47 секунд (28.06.2009 - 13:26) Krevedko написал(а):
подозрительно знакомый какой-то код. не с урока Попова случайно ? )

Спустя 16 минут, 11 секунд (28.06.2009 - 13:42) HardWoman написал(а):
Второй столбец посмотрите $title - увас она везде одна для разных значений

Спустя 1 час, 43 минуты, 3 секунды (28.06.2009 - 15:25) Krevedko написал(а):
угу. а надо например

if (isset($_POST['meta_d'])) {$meta_d = $_POST['meta_d']; if ($meta_d == '') {unset ($meta_d);

типа присваиваешь $meta_d значение $_POST['meta_d'] и если она пустая, уничтожаешь переменную с помощью unset
а ты пхаешь везде $title

Спустя 50 минут, 56 секунд (28.06.2009 - 16:16) glock18 написал(а):
Цитата (Krevedko @ 28.06.2009 - 12:25)
if (isset($_POST['meta_d'])) {$meta_d = $_POST['meta_d']; if ($meta_d == '') {unset ($meta_d);


Krevedko
я верно понял, что это руководство к действию? тогда дополню немного:

есть косяк с возможным отсутствием переменной в POST. а чтобы исправить этот косяк и чтобы не переделывать много - можно проверку типа
PHP
($meta_d == '')
заменить на
PHP
(empty($meta_d))


PHPprogramer, да ты можешь сказать, что js проверяет... но

1. хакер будет отправлять и без формы => и без проверки параметров в клиентской стороне.

2. с другой стороны, ты делаешь все таки проверку на эту переменную
PHP
isset($_POST['meta_d'])

что как раз правильно, но эта проверка недостаточно.

и еще кое-что:

ты unset'ишь переменные, если строка пустая. а не смущает, что после этого ты вставляешь эти самые переменные в запрос без проверки на их существование?

Спустя 4 минуты, 2 секунды (28.06.2009 - 16:20) Krevedko написал(а):
Цитата
И еще почему то данные занесенные в $size попадают в $title.


Вот как раз-таки понятно почему. Потому что ты только title все и присваиваешь.
Вообщем выше все уже тебе рассказали.

Спустя 54 минуты, 9 секунд (28.06.2009 - 17:14) Winston написал(а):
Цитата (Krevedko @ 28.06.2009 - 16:20)
Вот как раз-таки понятно почему. Потому что ты только title все и присваиваешь.
Вообщем выше все уже тебе рассказали.

Пожалуйста покажите тот участок кода, где я везде присваиваю title, я учусь потому не сильно силен в РНР.

Спустя 5 минут, 29 секунд (28.06.2009 - 17:20) Kuliev написал(а):
Цитата (PHPprogramer @ 28.06.2009 - 19:14)
Цитата (Krevedko @ 28.06.2009 - 16:20)
Вот как раз-таки понятно почему. Потому что ты только title все и присваиваешь.
Вообщем выше все уже тебе рассказали.

Пожалуйста покажите тот участок кода, где я везде присваиваю title, я учусь потому не сильно силен в РНР.

Смотри мой первый пост внимательней!!!

Спустя 13 минут, 52 секунды (28.06.2009 - 17:34) Winston написал(а):
Цитата (Kuliev @ 28.06.2009 - 17:20)
Смотри мой первый пост внимательней!!!

Что то я ничего не пойму, я title присваиваю $title, meta_d $meta_d, че не так

Спустя 3 минуты, 20 секунд (28.06.2009 - 17:37) glock18 написал(а):
Цитата (PHPprogramer @ 28.06.2009 - 14:34)
Что то я ничего не пойму, я title присваиваю $title, meta_d $meta_d, че не так


нет, ты невнимательно читаешь smile.gif

Спустя 1 день, 20 часов, 48 минут, 49 секунд (30.06.2009 - 14:26) Winston написал(а):
Всем большое спасибо за помощь, теперь все работает, ошибка была детская которую я совершил по невнимательности, Вы все мне говорили про нее но я никак не мог ее найти. БОЛЬШОЕ СПАСИБО !!! biggrin.gif

Спустя 1 час, 18 минут, 59 секунд (30.06.2009 - 15:45) Kuliev написал(а):
PHPprogramer
Пожалуйста, обращайся еще. smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.