|
|
|
|
|
для: Мичил
(25.05.2013 в 16:22)
| | Ну как вам сказать - нет стандарта, который бы говорил или обязывал что-то принимать, что-то нет, какие-то символы считать допустимыми, а какие-то нет. Вы и только вы определяете:
какие поля формы (какие данные) пользователь должен заполнить обязательно, а какие могут быть и опущены; какие символы разрешены в тех или иных полях, а какие нет. Например, если ваши студенты все русскоязычные и имеют русские имена и фамилии, то зачем же тогда в полях имен принимать латиницу, и вообще что непопадя?
Конечно необходимо проверять и убирать мусор, то есть не принимать его. При чем форма в примере, паттерны ее полей, это только на клиенте проверка, но ее же можно и обойти, написав такую форму и отсылая ее не с вашей страницы. И не надейтесь на проверку referer в таком случае, его можно тоже подделать. Поэтому, несмотря на то, что на клиенте есть проверка, нужно проверять обязательно и на сервере. На клиенте проверку можно считать только сервисом, не более.
http://htmlbook.ru/html5
У вас самого главного нет, у вас нет диалога с пользователем. | |
|
|
|
|
|
|
|
для: confirm
(25.05.2013 в 11:03)
| | Ясно, тогда кроме проверки на существование отправленных переменных надо и еще проверять на недопустимые символы? Я правильно вас понял?) | |
|
|
|
|
|
|
|
для: Jovidon
(25.05.2013 в 10:38)
| | Я вам не запрещаю отвечать на вопросы, но отвечая на них, думайте. Ведь вы пошли на поводу у автора. Можете ответить по какой причине и вы разделили форму и ее обработку на два файла? Во-первых зачем это, а во-вторых почему они не связаны диалогом?
А это уже ваше произведение:
<?
if(empty($_POST['rabota'])) $error[] = 'Поле работа не заполнена.';
if(empty($_POST['meta_d'])) $error[] = 'Поле ... не заполнена.';
if(empty($_POST['meta_k'])) $error[] = 'Поле ... не заполнена.';
//.....
| А если бы было полей 50, вы бы всех их так и перечисляли? А зачем, и зачем вообще empty()? С трудом верится, что вы до сих пор не знаете, что форма, это массив, и в данном случае это простой массив, одномерный. А если это массив, значит в нем можно сразу очистить пустые поля, и получить таковые, и если они есть, вывести ошибку только для них, не перечисляя все.
Ну а это для сведения. На дворе HTML5, а так как форма, это очень важный элемент диалога сервер-клиент, то этому элементу в рамках HTML5 уделено большое внимание. Ранее для предупреждения пользователя приходилось писать портянки на JS, теперь очень многое берет на себя браузер:
<style>
input:required {
border: 1px solid red;
}
</style>
<form>
<div>Фамилия <input type="text" name="surname" required="required" pattern="^[А-Яа-яЁё\-]{1,32}$" /></div>
<div>Email <input type="email" name="mail" required="required" /></div>
<div>Аська <input type="text" name="icq" pattern="^\d{9}$" /></div>
<button>Отправить</button>
</form>
| При этом старые браузеры будут воспринимать неизвестные им типы полей как поле типа text. Но современные браузеры уже будут представлять первую линию обороны и выполнять сервисные услуги - забыли, ошиблись, так будьте так ласка, поправьте. Попробуйте отправить эту форму в разных "режимах обмана".
На дворе HTML5, а на серверах > РНР5. А у него много чего добавлено позволяющее производить проверку формы, причем делать это так, что это будет единая точка входа для обработки всех без исключения форм применяемых на сайте, достаточно только описать форму и условия, все остальное автоматом.
Но все это так и будет забавой, если не будет главного - диалога с пользователем. | |
|
|
|
|
|
|
|
для: confirm
(25.05.2013 в 10:28)
| | ок
спас, я больше не буду отвечать на вапросы, а только задавать вапрос в этом сайте | |
|
|
|
|
|
|
|
для: Jovidon
(25.05.2013 в 10:05)
| | Почему? Потому, что все у вас живет собственной жизнью - форма сама по себе, ошибки сами по себе, а добавление в базу, так это просто так, мелкая досада, которую надо выполнять.
Представьте, что я вам в рамках этого форума все время буду писать - "Вы плохой мальчик", а у вас нет никакой возможности ответить, читаете, а возразить никак... Обидно, досадно, не справедливо... Так ведь? Вот тоже самое и вы пишите.
Я обычный человек, я имею право на ошибку, и если я допущу ошибку при заполнении формы, то конечно спасибо вам за то что известили об этом, но почему вы не даете мне права ее исправить? Толку от ваших сообщений мне нет никакого.
Форма - это в первую очередь диалог, а все остальное, это прилагательное к ней. Это как два сапога - они обязательно должны быть парой и иметь хозяина. А у вас и сапоги разбросаны, и хозяина у них нет. | |
|
|
|
|
|
|
|
для: confirm
(25.05.2013 в 05:00)
| | почему? | |
|
|
|
|
|
|
|
для: Jovidon
(25.05.2013 в 03:36)
| | Плохо. | |
|
|
|
|
|
|
|
для: Мичил
(24.05.2013 в 18:50)
| |
<form name="form1" method="post" action="add_work.php" enctype="multipart/form-data">
<label>Введите название работы</label>
<input type="text" name="rabota" id="rabota"><br>
<label>Введите краткое описание работы</label>
<input type="text" name="meta_d" id="meta_d"><br>
<label>Введите ключевые слова для работы</label>
<input type="text" name="meta_k" id="meta_k"><br>
<label>Введите дату добавления работы</label>
<input name="date" type="text" id="date" value="<?= date("Y-m-d"); ?>"><br>
<label>Ведите краткое описание работы с тэгами абзацев</label>
<textarea name="description" id="description" cols="40" rows="5"></textarea><br>
<label>Введите полный текст работы с тэгами</label>
<textarea name="text" id="text" cols="40" rows="20"></textarea><br>
<label>Введите автора работы</label>
<input type="text" name="author" id="author"><br>
<label>Введите где лежит миниатюра</label>
<input type="text" name="img" id="author"><br>
<label>Выберите категорию работы</label>
<select name="vid">
<?php
$sql = "SELECT id, title
FROM vid";
$res = mysql_query($sql) or die("Запрос выборки не прошел. Напишите об этом администратору nidheg91@mail.ru" . mysql_error());
if(mysql_num_rows($res))
{
while(list($id,$tit) = mysql_fetch_array($res, MYSQL_ASSOC))
{
echo '<option value='.intval($id).'>'.htmlspecialchars(stripcslashes($tit), ENT_QUOTES).'</option>';
}
}
else echo 'В таблице нет записей.';
?>
</select><br>
<label>Загрузка файла работы</label>
<input type="file" name="filename"><br>
<input type="submit" name="submit" id="submit" value="Занести работу в базу">
</form>
|
файл add_work.php
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// собераем ощибки в массив;
$error = array();
// проверяем заполненеы ли все поля;
if(empty($_POST['rabota'])) $error[] = 'Поле работа не заполнена.';
if(empty($_POST['meta_d'])) $error[] = 'Поле ... не заполнена.';
if(empty($_POST['meta_k'])) $error[] = 'Поле ... не заполнена.';
if(empty($_POST['date'])) $error[] = 'Поле ... не заполнена.';
if(empty($_POST['description'])) $error[] = 'Поле ... не заполнена.';
if(empty($_POST['text'])) $error[] = 'Поле ... не заполнена.';
if(empty($_POST['author'])) $error[] = 'Поле ... не заполнена.';
if(empty($_POST['img'])) $error[] = 'Поле ... не заполнена.';
if(empty($_POST['vid'])) $error[] = 'Поле ... не заполнена.';
// если нет ощибок;
if(empty($error))
{
// это функция вернет защищенную данную
function save($val) { return mysql_real_escape_string($val);}
// добаляем;
$sql = "INSERT INTO register(rabota,meta_d,meta_k,date,description,text,author,mini_img,vid)
VALUES('".save($_POST['rabota'])."','"
.save($_POST['meta_d'])."','"
.save($_POST['meta_k'])."','"
.save($_POST['date'])."','"
.save($_POST['description'])."','"
.save($_POST['text'])."','"
.save($_POST['author'])."','"
.save($_POST['img'])."','"
.save($_POST['vid'])."')";
$res = mysql_query($sql) or die("Ощика добавление записьи в таблицу! " . mysql_error());
$ID = mysql_insert_id();
if(is_uploaded_file($_FILES['filename']['name']))
{
move_uploaded_file($_FILES['filename']['name'], "img/" . $_FILES['filename']['name']);
}
else echo 'Ошибка загрузки файла';
$sql = "INSERT INTO files(uid,name)
VALUES('".save($ID)."','".save($_FILES['filename']['name'])."')";
$res = mysql_query($sql);
if(!$res) die("Ваша работа не добалена!" . mysql_error());
else echo 'Ваша работа успешно добален!';
}
else
{
// выводим ощибки;
foreach($error as $err) echo $err . '<br>';
}
}
?>
|
| |
|
|
|
|
|
|
|
для: Мичил
(24.05.2013 в 18:50)
| | 1) Код нужно обрамлять в теги [сode][/сode], иначе такой ужас как сейчас очень сложно воспринимать. В нем разбираться просто не охота.
2) Не может быть строка не обрамленная в кавычки занесена в текстовое поле таблицы - будет ошибка, а не добавление!
3) Все что приходит от пользователя нужно тщательно проверять.
4) Входные данные перед внесением в базу необходимо обрабатывать, иначе взломать вашу базу как два пальца...
5) Я не знаю на каком вы пути, но если студент Коля назовет свой файл "Моя клевая работа", загрузит его, а потом студент Ваня также назовет свой файл и загрузит, то "клевая работа" Коли пропадет. И как бы вы там не ссылались на файл, его не будет.
Так код не пишут. Не можете задавать вопросы себе и отвечать на них в процессе написания кода (мало опыта, не видите задачу целиком и т.п.) , ну порисуйте карандашом в тетради блок-схему задачи, отметьте все вопросы, укажите пути их ветвления.
Вы просто засучили рукава, с малым багажом знаний в данном вопросе что-то написали - что-то делается, значит так и должно. Нет не так. | |
|
|
|
|
|
|
|
для: confirm
(24.05.2013 в 18:29)
| | <td valign="top">
<form name="form1" method="post" action="add_work.php" enctype="multipart/form-data">
<p>
<label>Введите название работы<br>
<input type="text" name="rabota" id="rabota">
</label>
</p>
<p>
<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>Ведите краткое описание работы с тэгами абзацев
<textarea name="description" id="description" cols="40" rows="5"></textarea>
</label>
</p>
<p>
<label>Введите полный текст работы с тэгами
<textarea name="text" id="text" cols="40" rows="20"></textarea>
</label>
</p>
<p>
<label>Введите автора работы<br>
<input type="text" name="author" id="author">
</label>
</p>
<p>
<label>Введите где лежит миниатюра<br>
<input type="text" name="img" id="author">
</label>
</p>
<p>
<label>Выберите категорию работы<br>
<select name="vid">
<?php
$result = mysql_query("SELECT title,id FROM vid",$db);
if (!$result)
{
echo "<p>Запрос выборки не прошел. Напишите об этом администратору nidheg91@mail.ru <br> <strong>Код ошибки:</strong></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>
<label>Загрузка файла работы</label><br>
<input type="file" name="filename"><br>
</p>
<p>
<label>
<input type="submit" name="submit" id="submit" value="Занести работу в базу">
</label>
</p>
</form>
</td>
</tr>
</table></td>
</tr>
//вот это форма занесения данных new_work.php, потом через POST летит add_work где я выложил выше, там текстовые записи успешно сохраняются, загрузка файлов тоже не выдает никаких ошибок, но вот при загрузке файл вообще не сохраняется или копируется там где не надо. Это вообще глюки из за того что я впихал одни и те же файлы несколько раз в одну директорию?
А насчет связки между таблицами files и registr решил так:
Где идет обработка то есть add_work.php $id = mysql_insert_id() узнаю id сохраняемой записи таблицы registr, и заношу полученную переменную $id в таблицу files строка uid, тем самым знаю кому принадлежит этот файл, надеюсь я в правильном пути=) | |
|
|
| |
|