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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Загрузка файлов на сервер

Сообщения:  [1-10]    [11-20]  [21-22] 

 
 автор: confirm   (25.05.2013 в 16:34)   письмо автору
 
   для: Мичил   (25.05.2013 в 16:22)
 

Ну как вам сказать - нет стандарта, который бы говорил или обязывал что-то принимать, что-то нет, какие-то символы считать допустимыми, а какие-то нет. Вы и только вы определяете:
какие поля формы (какие данные) пользователь должен заполнить обязательно, а какие могут быть и опущены; какие символы разрешены в тех или иных полях, а какие нет. Например, если ваши студенты все русскоязычные и имеют русские имена и фамилии, то зачем же тогда в полях имен принимать латиницу, и вообще что непопадя?

Конечно необходимо проверять и убирать мусор, то есть не принимать его. При чем форма в примере, паттерны ее полей, это только на клиенте проверка, но ее же можно и обойти, написав такую форму и отсылая ее не с вашей страницы. И не надейтесь на проверку referer в таком случае, его можно тоже подделать. Поэтому, несмотря на то, что на клиенте есть проверка, нужно проверять обязательно и на сервере. На клиенте проверку можно считать только сервисом, не более.

http://htmlbook.ru/html5

У вас самого главного нет, у вас нет диалога с пользователем.

  Ответить  
 
 автор: Мичил   (25.05.2013 в 16:22)   письмо автору
 
   для: confirm   (25.05.2013 в 11:03)
 

Ясно, тогда кроме проверки на существование отправленных переменных надо и еще проверять на недопустимые символы? Я правильно вас понял?)

  Ответить  
 
 автор: 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. А у него много чего добавлено позволяющее производить проверку формы, причем делать это так, что это будет единая точка входа для обработки всех без исключения форм применяемых на сайте, достаточно только описать форму и условия, все остальное автоматом.

Но все это так и будет забавой, если не будет главного - диалога с пользователем.

  Ответить  
 
 автор: Jovidon   (25.05.2013 в 10:38)   письмо автору
 
   для: confirm   (25.05.2013 в 10:28)
 

ок
спас, я больше не буду отвечать на вапросы, а только задавать вапрос в этом сайте

  Ответить  
 
 автор: confirm   (25.05.2013 в 10:28)   письмо автору
 
   для: Jovidon   (25.05.2013 в 10:05)
 

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

Представьте, что я вам в рамках этого форума все время буду писать - "Вы плохой мальчик", а у вас нет никакой возможности ответить, читаете, а возразить никак... Обидно, досадно, не справедливо... Так ведь? Вот тоже самое и вы пишите.

Я обычный человек, я имею право на ошибку, и если я допущу ошибку при заполнении формы, то конечно спасибо вам за то что известили об этом, но почему вы не даете мне права ее исправить? Толку от ваших сообщений мне нет никакого.

Форма - это в первую очередь диалог, а все остальное, это прилагательное к ней. Это как два сапога - они обязательно должны быть парой и иметь хозяина. А у вас и сапоги разбросаны, и хозяина у них нет.

  Ответить  
 
 автор: Jovidon   (25.05.2013 в 10:05)   письмо автору
 
   для: confirm   (25.05.2013 в 05:00)
 

почему?

  Ответить  
 
 автор: confirm   (25.05.2013 в 05:00)   письмо автору
 
   для: Jovidon   (25.05.2013 в 03:36)
 

Плохо.

  Ответить  
 
 автор: 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($resMYSQL_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>';
        }
    }
?>

  Ответить  
 
 автор: confirm   (24.05.2013 в 19:09)   письмо автору
 
   для: Мичил   (24.05.2013 в 18:50)
 

1) Код нужно обрамлять в теги [сode][/сode], иначе такой ужас как сейчас очень сложно воспринимать. В нем разбираться просто не охота.

2) Не может быть строка не обрамленная в кавычки занесена в текстовое поле таблицы - будет ошибка, а не добавление!

3) Все что приходит от пользователя нужно тщательно проверять.

4) Входные данные перед внесением в базу необходимо обрабатывать, иначе взломать вашу базу как два пальца...

5) Я не знаю на каком вы пути, но если студент Коля назовет свой файл "Моя клевая работа", загрузит его, а потом студент Ваня также назовет свой файл и загрузит, то "клевая работа" Коли пропадет. И как бы вы там не ссылались на файл, его не будет.

Так код не пишут. Не можете задавать вопросы себе и отвечать на них в процессе написания кода (мало опыта, не видите задачу целиком и т.п.) , ну порисуйте карандашом в тетради блок-схему задачи, отметьте все вопросы, укажите пути их ветвления.
Вы просто засучили рукава, с малым багажом знаний в данном вопросе что-то написали - что-то делается, значит так и должно. Нет не так.

  Ответить  
 
 автор: Мичил   (24.05.2013 в 18:50)   письмо автору
 
   для: 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, тем самым знаю кому принадлежит этот файл, надеюсь я в правильном пути=)

  Ответить  

Сообщения:  [1-10]    [11-20]  [21-22] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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