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

Форум PHP

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

 

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

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

тема: Форма для отправки данных на сервер - не сотрудничает
 
 автор: kronck   (29.09.2010 в 13:49)   письмо автору
 
 

Здравствуйте! недавно начал изучать пхп и возникла проблема с формой и обрабокой формы.

Текст формы
<p>Добавление нового объявления в базу</p>
<p></p>
<div align="left">

<form enctype="multipart/form-data" name="form1" action="add_post.php" method="post">

<p>
<label>Введите название заметки<br />
<input type="text" name="title" id="title" />
<br />
<br />
</label>
<label>Введите краткое описание заметки<br />
<input type="text" name="meta_d" id="meta_d" />
</label>
</p>
<p>
<label>Введите ключевые слова <br />
<input type="text" name="meta_k" id="meta_k" />
</label>
</p>
<p>
<label>Дата добавления заметки<br />
<input name="date" type="text" id="date" value="<?php $date = date("Y-m-d"); echo $date; ?>" />
</label>
</p>
<p>
<label>Введите краткое описание заметки<br />
<textarea name="description" id="description" cols="45" rows="2"></textarea>
</label>
</p>
<p>
<label>Введите полный текст заметки <br />
<textarea name="text" id="text" cols="45" rows="10"></textarea>
</label>
</p>
<p>
<label>Автор заметки<br />
<input type="text" name="autor" id="autor" />
</label>
</p>
<p>
<label>Адрес миниатюры для заметки<br />
<input type="file" name="mini_img" id="mini_img">
</label>
</p>
<p>
<label>Выберите категорию заметки<br />
<select name="cat">

<?php


$result = mysql_query("SELECT title,id FROM categories",$db);
if (!$result) {
echo "<p>Запрос не прошел. Напишите об этом администратору. Код ошибки:</p>";
exit (mysql_error());
}
if (mysql_num_rows($result) > 0)
{
$myrow = mysql_fetch_array($result);

do
{
printf ("<option value='%s'>%s</option>",$myrow["id"],$myrow["title"]);

}
while ($myrow = mysql_fetch_array($result));

}
else
{
echo "<p>Информация по запросу не может быть извлечена. В таблице нет записей.</p>";
exit ();
}


?>

</select>
</label>
</p>

<p>&nbsp;</p>
<p>
<label>
<input type="submit" name="submit" id="submit" class="button" value="Занести заметку в базу" />
</label>
</p>
<p>&nbsp;</p>
</form>
</div>


текст обработчика

<?php
if (isset($_POST['title'])) {$title = $_POST['title']; if ($title == '') {unset($title);}}
if (isset($_POST['meta_d'])) {$meta_d = $_POST['meta_d']; if ($meta_d == '') {unset($meta_d);}}
if (isset($_POST['meta_k'])) {$meta_k = $_POST['meta_k']; if ($meta_k == '') {unset($meta_k);}}
if (isset($_POST['date'])) {$date = $_POST['date']; if ($date == '') {unset($date);}}
if (isset($_POST['description'])) {$description = $_POST['description']; if ($description == '') {unset($description);}}
if (isset($_POST['text'])) {$text = $_POST['text']; if ($text == '') {unset($text);}}
if (isset($_POST['autor'])) {$autor = $_POST['autor']; if ($autor == '') {unset($autor);}}
if (isset($_POST['mini_img'])) {$mini_img = $_POST['mini_img']; if ($mini_img == '') {unset($mini_img);}}
if (isset($_POST['cat'])) {$cat = $_POST['cat']; if ($cat == '') {unset($cat);}}

$allowed_filetypes = array('.jpg','.gif','.bmp','.png'); // Здесь мы перечисляем допустимые типы файлов


$max_filesize = 524288; // Максимальный размер загружаемого файла в байтах (в данном случае он равен 0.5 Мб).


$upload_path = './files/'; // Место, куда будут загружаться файлы (в данном случае это папка 'files').


$filename = $_FILES['mini_img']['name']; // В переменную $filename заносим точное имя файла (включая расширение).


$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1); // В переменную $ext заносим расширение загруженного файла.


// Сверяем полученное расширение со списком допутимых расширений, которые мы определили в самом начале. Если расширение загруженного файла не входит в список разрешенных, то прерываем выполнение программы и выдаем соответствующее сообщение.


if(!in_array($ext,$allowed_filetypes))

die('Данный тип файла не поддерживается.');


// Теперь проверим размер загруженного файла и если он больше максимально допустимого, то прерываем выполнение программы и выдаем сообщение.


if(filesize($_FILES['mini_img']['tmp_name']) > $max_filesize)

die('Фаил слишком большой.');


// Проверяем, доступна ли на запись папка, определенная нами под загрузку файлов (папка files). Если вдруг недоступна, то выдаем сообщение, что на папку нужно поставить права доступа 777.


if(!is_writable($upload_path))

die('Невозможно загрузить фаил в папку. Установите права доступа - 777.');


// Загружаем фаил в указанную папку.

if(move_uploaded_file($_FILES['mini_img']['tmp_name'],$upload_path . $filename))


echo 'Ваше объявление успешно добавленно <a href="' . $upload_path . $filename . '">смотреть</a>';

else

echo 'При загрузке возникли ошибки. Попробуйте ещё раз.';


if (isset($title) and isset($meta_d) and isset($meta_k) and isset($date) and isset($description) and isset($text) and isset($autor) and isset($mini_img) and isset($cat))
{
/* Здесь можно заносить данные в базу */
$result = mysql_query ("INSERT INTO data (title,meta_k,meta_d,date,descriptiom,text,autor,mini_img,cat) VALUES ('$title','$meta_d','$meta_k','$date','$description','$text','$autor','$mini_img','$cat')");

if ($result == 'true') {echo "<p>Ваша заметка успешно добавлена</p>";}
else {echo "<p>Ваша ЗАМЕТКА НЕ ДОБАВЛЕНА</p>";}

}
else
{
echo "<p>Вы ввели не всю информацию, заметка не добавлена</p>";
}

?>

Данные в базу не летят , выдается ошибка Вы ввели не всю информацию, заметка не добавлена, НОО картинка грузится в папку files.

  Ответить  
 
 автор: sim5   (29.09.2010 в 15:32)   письмо автору
 
   для: kronck   (29.09.2010 в 13:49)
 

И с вами не будут сотрудничать, если вы такой длинный код не будете обрамлять тегами[сode][/сode].
<?
//чего-то присваивать, проверять и удалять если не то, это не разумно
$title       = isset($_POST['title']) ? trim($_POST['title']) : '';
$meta_d      = isset($_POST['meta_d']) ? trim($_POST['meta_d']) : '';
$meta_k      = isset($_POST['meta_k']) ? trim($_POST['meta_k']) : '';
//дату/время добавления при записи в таблицу получать и вставлять
$description = isset($_POST['description']) ? trim($_POST['description']) : '';
$text        = isset($_POST['text']) ? trim($_POST['text']) : '';
$autor       = isset($_POST['autor']) ? trim($_POST['autor']) : '';
//изображения не будут в массиве POST
$cat         = isset($_POST['cat']) ? intval($_POST['cat']) : 0;
?>

<p>Добавление нового объявления в базу</p>

<div align="left">
<form enctype="multipart/form-data" name="form1" action="" method="post">
<label>Введите название заметки<br />
<input type="text" name="title" id="title" value="<? echo htmlspecialchars($title); ?>" />
<br />
</label>
<label>Введите краткое описание заметки<br />
<input type="text" name="meta_d" id="meta_d" value="<? echo htmlspecialchars($meta_d); ?>" />
</label>
<br>
<label>Введите ключевые слова <br />
<input type="text" name="meta_k" id="meta_k" value="<? echo htmlspecialchars($meta_k); ?>" />
</label>
<br>
<label>Введите краткое описание заметки<br />
<textarea name="description" id="description" cols="45" rows="2"><? echo htmlspecialchars($description); ?></textarea>
</label>
<br>
<label>Введите полный текст заметки <br />
<textarea name="text" id="text" cols="45" rows="10"><? echo htmlspecialchars($text); ?></textarea>
</label>
<br>
<label>Автор заметки<br />
<input type="text" name="autor" id="autor" value="<? echo htmlspecialchars($autor); ?>" />
</label>
<br>
<!-- Какой адрес? Это поле выбора изображения, а не адреса его для сервера,
да и нет на локальной машине адреса, есть путь. -->
<label>Адрес миниатюры для заметки<br />
<input type="file" name="mini_img" id="mini_img">
</label>
<br>
<label>Выберите категорию заметки<br />
<select name="cat">
<?php 
$result 
mysql_query("SELECT title,id FROM categories",$db);
if(
mysql_num_rows($result)) {
  while(
$myrow mysql_fetch_assoc($result)) printf("<option value='%s'>%s</option>",$myrow["id"],$myrow["title"]);
} else {
  echo 
"<p>Информация по запросу не может быть извлечена. В таблице нет записей.</p>";
  exit; 
//и что будет с уже наполовину выведенной формой?
}
?>
</select>
</label>
<br>
<label>
<input type="submit" name="submit" id="submit" class="button" value="Занести заметку в базу" />
</label>
</form>
</div>
<!-- выбросить все параграфы и BR (и никчемные пустые параграфы), и форматировать форму посредством CSS -->

<?php
$allowed_filetypes 
= array('.jpg','.gif','.bmp','.png'); // Здесь мы перечисляем допустимые типы файлов
$max_filesize 524288// Максимальный размер загружаемого файла в байтах (в данном случае он равен 0.5 Мб).
$upload_path './files/'// Место, куда будут загружаться файлы (в данном случае это папка 'files').
$filename $_FILES['mini_img']['name']; // В переменную $filename заносим точное имя файла (включая расширение).
//все проверки изображения по расширению выбросить и не использовать впредь, начиная с 
$ext substr($filenamestrpos($filename,'.'), strlen($filename)-1); 

// Теперь проверим размер загруженного файла...
if(filesize($_FILES['mini_img']['tmp_name']) > $max_filesize)
die(
'Фаил слишком большой.');
// Проверяем, доступна ли на запись папка.....
if(!is_writable($upload_path))
die(
'Невозможно загрузить фаил в папку. Установите права доступа - 777.');

//все die('....'); выбросить, и при ошибке возвращать форму пользователю
//иначе вы не даете ему выбора
//права на папку это ваша проблема, а не пользователя

// Загружаем фаил в указанную папку. - вы уж проверьте все ли условия выполняются, а потом перемещайте
if(move_uploaded_file($_FILES['mini_img']['tmp_name'],$upload_path $filename))

//это каким образом не записывая еще сообщения в базу, такая радостная ссылка?
echo 'Ваше объявление успешно добавленно <a href="' $upload_path $filename '">смотреть</a>'

else echo 
'При загрузке возникли ошибки. Попробуйте ещё раз.'//ну и это соотвественно...

//проверка isset($title).... будет выполнятся всегда, не важно пуста перменная или нет
if (isset($title)) { //проверка на isset будет выполнятся всегда, не важно пуста перменная или нет
//сперва разберитесь с логикой кода выше, а уж потом добавлять будете 
}
?>

Обрамляя код тегами [сode][/сode], следите за тем, чтобы длинные строки комментариев его не приводили к горизонтальной прокрутке страницы - переносите такие строки, горизонтальные портянки не удобно читать.

  Ответить  
 
 автор: akmal   (29.09.2010 в 16:29)   письмо автору
 
   для: sim5   (29.09.2010 в 15:32)
 

>>И с вами не будут сотрудничать, если вы такой длинный код не будете обрамлять тегами[сode][/сode].
:)

  Ответить  
 
 автор: Slo_Nik   (29.09.2010 в 17:11)   письмо автору
 
   для: akmal   (29.09.2010 в 16:29)
 

Большинство причин того, что скрипт не работает, можно узнать через error_reporting(E_ALL);
вот это

<?php 
$result 
mysql_query ("INSERT INTO data (title,meta_k,meta_d,date,descriptiom,text,autor,mini_img,cat)
 VALUES ('
$title','$meta_d','$meta_k','$date','$description','$text','$autor','$mini_img','$cat')");

if (
$result == 'true') {echo "<p>Ваша заметка успешно добавлена</p>";}
else {echo 
"<p>Ваша ЗАМЕТКА НЕ ДОБАВЛЕНА</p>";}
?>

замените на

<?php 
$query 
"INSERT INTO data (title,meta_k,meta_d,date,descriptiom,text,autor,mini_img,cat) 
VALUES ('
$title','$meta_d','$meta_k','$date','$description','$text','$autor','$mini_img','$cat')";
/* выводим запрос в браузер для наглядности, что в него попадает */
echo $query;
/* выполняем запрос */
if(!mysql_query ($query);
{
 echo 
mysql_errno()."<br>".mysql_error();
}
else {echo 
"<p>Ваша ЗАМЕТКА ДОБАВЛЕНА</p>";}
?>

как по мне, так будет лучше.

  Ответить  
 
 автор: sim5   (29.09.2010 в 17:17)   письмо автору
 
   для: Slo_Nik   (29.09.2010 в 17:11)
 

А какая разница? Прежде чем записывать это, обсасывать как красивее написать, нужно сделать главное, что отсутствует в данном коде - логику диалога сервер-клиент.

  Ответить  
 
 автор: Slo_Nik   (29.09.2010 в 17:51)   письмо автору
 
   для: sim5   (29.09.2010 в 17:17)
 

А разница в том, что в авторском варианте не выведет сообщения об ошибке в запросе, а выведет только "Ваша ЗАМЕТКА НЕ ДОБАВЛЕНА".
В варианте предложеном мной, в браузер выведет сам запрос, что в него попало и что нет(потом эту строку удалить), а так же выведет ошибки возникшие при запросе к базе, а ошибки точно будут, так как они есть.

  Ответить  
 
 автор: sim5   (29.09.2010 в 17:59)   письмо автору
 
   для: Slo_Nik   (29.09.2010 в 17:51)
 

А зачем на сервере выводить ошибки, может их лучше в лог писать, а пользователю показывать только результат операции? ) Например, мне вполне хватает mysql_query(...) or die (mysql_error()) для отладки и только на локальном сервере, на реальном иначе.
А что попадает в запрос, так это тоже отладка, не более, и при возникновении ошибки ничего не стоит ее разово вывести. Это не принципиально, дело вкуса.

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

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