|
|
|
| Здравствуйте! недавно начал изучать пхп и возникла проблема с формой и обрабокой формы.
Текст формы
<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> </p>
<p>
<label>
<input type="submit" name="submit" id="submit" class="button" value="Занести заметку в базу" />
</label>
</p>
<p> </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. | |
|
|
|
|
|
|
|
для: 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($filename, strpos($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], следите за тем, чтобы длинные строки комментариев его не приводили к горизонтальной прокрутке страницы - переносите такие строки, горизонтальные портянки не удобно читать. | |
|
|
|
|
|
|
|
для: sim5
(29.09.2010 в 15:32)
| | >>И с вами не будут сотрудничать, если вы такой длинный код не будете обрамлять тегами[сode][/сode].
:) | |
|
|
|
|
|
|
|
для: 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>";}
?>
|
как по мне, так будет лучше. | |
|
|
|
|
|
|
|
для: Slo_Nik
(29.09.2010 в 17:11)
| | А какая разница? Прежде чем записывать это, обсасывать как красивее написать, нужно сделать главное, что отсутствует в данном коде - логику диалога сервер-клиент. | |
|
|
|
|
|
|
|
для: sim5
(29.09.2010 в 17:17)
| | А разница в том, что в авторском варианте не выведет сообщения об ошибке в запросе, а выведет только "Ваша ЗАМЕТКА НЕ ДОБАВЛЕНА".
В варианте предложеном мной, в браузер выведет сам запрос, что в него попало и что нет(потом эту строку удалить), а так же выведет ошибки возникшие при запросе к базе, а ошибки точно будут, так как они есть. | |
|
|
|
|
|
|
|
для: Slo_Nik
(29.09.2010 в 17:51)
| | А зачем на сервере выводить ошибки, может их лучше в лог писать, а пользователю показывать только результат операции? ) Например, мне вполне хватает mysql_query(...) or die (mysql_error()) для отладки и только на локальном сервере, на реальном иначе.
А что попадает в запрос, так это тоже отладка, не более, и при возникновении ошибки ничего не стоит ее разово вывести. Это не принципиально, дело вкуса. | |
|
|
|
|