фото upload
например, имя, адрес,город, и фото, как можно добавит все это вместе и патом показать на страничке?спасибо большое
Аплоадишь фото в папку, данные либо в файл, либо в БД... и все, потом показываешь =)
все до безобразия просто, надо только взять книгу по PHP и почитать раздел работа с файлами... пример закачки и работы с файлами + работы с бд есть в любой книге.
В частности нужно зааплоадить фото и закинуть имя фотки в базу. Но вместе с фото нужно в базу закинуть пару значений из текстового поля. Так вот, почему-то посылается всё кроме этих двух значений... я грешу на параметр формы enctype="multipart/form-data", но до конца не уверен что это именно он виноват...
[/SIZE]
Цитата: Xupypr
Где данные храняться?
Аплоадишь фото в папку, данные либо в файл, либо в БД... и все, потом показываешь =)
все до безобразия просто, надо только взять книгу по PHP и почитать раздел работа с файлами... пример закачки и работы с файлами + работы с бд есть в любой книге.
Аплоадишь фото в папку, данные либо в файл, либо в БД... и все, потом показываешь =)
все до безобразия просто, надо только взять книгу по PHP и почитать раздел работа с файлами... пример закачки и работы с файлами + работы с бд есть в любой книге.
Всё, я уже разобрался. почему-то переменные исчезали при вызове функции pg_escape_string(). Странно,но... факт...
Короче...
Есть форма с текстовыми полями и полем для выбора файла. Есть кнопка,по нажатию на которую вызывается js функция, которая, собственно, передаёт запрос на сервак. Я так понимаю что $_POST исчезает за счёт того что кнопка не сабмит а обычный батон... хотя почему тогда массив $_FILES на месте?
Кто-нить мне может сей феномен объяснить? Текстовое поле нужно в любом случае записать в базу... ну и файл тоже...
а если серьезно... то ты просишь догадаться что у тебя там понаписано, и как оно у тебя работает + к этому, найти в том, о чем догадались, ошибки :) жоска, да?
Это задание - ОБЯЗАТЕЛЬНО загружать фотки именно аяксом. Я использую для этого JsHttpRequest... но факт тот,что всё равно на форму повешана именно яваскриптовая функция а не сабмит... и что тут делать, честно говоря, ума не приложу...
Если говорить про код...
Функция JS:
Код:
function upload(value) {
// Create new JsHttpRequest object.
var req = new JsHttpRequest();
var alb_id = "<?php echo $_GET['album_id'] ?>";
var cat_id = "<?php echo $_GET['cat_id'] ?>";
if (!alb_id || !cat_id)
{
return false;
}
// Code automatically called on load finishing.
req.onreadystatechange = function() {
if (req.readyState < 4)
{
document.getElementById('result').innerHTML = 'Загружается файл...';
}
else if ((req.readyState = 4) )
{
if (req.responseJS.status == "404")
{
var result = "Загрузка не удалась";
}
else
if ( (req.responseJS.status == "200") || (req.responseJS.dberror == "0"))
{
alert(req.responseJS.title);
alert(req.responseJS.descr);
var result = "Файл успешно загружен";
}
else
if (req.responseJS.status == "500")
{
var result = "Неверный тип файла";
}
if (req.responseJS.dberror == "1")
{
var result = "Ошибка записи в базу...<br>" + req.responseJS.dbdescr;
}
// Write result to page element (_RESULT becomes responseJS).
document.getElementById('result').innerHTML = result;
}
}
// Prepare request object (automatically choose GET or POST).
req.open(null, 'http://www.site.ru/photogal/album.php?album_id=' + alb_id + '&cat_id=' + cat_id + '&mode=load', true);
// Send data to backend.
req.send({ upl: value });
}
// Create new JsHttpRequest object.
var req = new JsHttpRequest();
var alb_id = "<?php echo $_GET['album_id'] ?>";
var cat_id = "<?php echo $_GET['cat_id'] ?>";
if (!alb_id || !cat_id)
{
return false;
}
// Code automatically called on load finishing.
req.onreadystatechange = function() {
if (req.readyState < 4)
{
document.getElementById('result').innerHTML = 'Загружается файл...';
}
else if ((req.readyState = 4) )
{
if (req.responseJS.status == "404")
{
var result = "Загрузка не удалась";
}
else
if ( (req.responseJS.status == "200") || (req.responseJS.dberror == "0"))
{
alert(req.responseJS.title);
alert(req.responseJS.descr);
var result = "Файл успешно загружен";
}
else
if (req.responseJS.status == "500")
{
var result = "Неверный тип файла";
}
if (req.responseJS.dberror == "1")
{
var result = "Ошибка записи в базу...<br>" + req.responseJS.dbdescr;
}
// Write result to page element (_RESULT becomes responseJS).
document.getElementById('result').innerHTML = result;
}
}
// Prepare request object (automatically choose GET or POST).
req.open(null, 'http://www.site.ru/photogal/album.php?album_id=' + alb_id + '&cat_id=' + cat_id + '&mode=load', true);
// Send data to backend.
req.send({ upl: value });
}
Форма HTML:
Код:
<form method="post" enctype="multipart/form-data">
<table width="500px" cellpadding="0" cellspacing="0" border="0">
<tr>
<td>Пользователь: </td>
<td><b><div name="usr"><?php echo $usrname ?></div></b></td>
</tr>
<tr>
<td>Заголовок: </td>
<td><input name="title" maxlength="80" /></td>
</tr>
<tr>
<td>Описание: </td>
<td><textarea cols="15" rows="5" name="descr"></textarea></td>
</tr>
<tr>
<td>Фотография: </td>
<td><input type="file" name="upl"></td>
</tr>
<tr>
<td colspan="2"><input type="button" value="Загрузить" onclick="upload(this.form.upl)" name="go"></td>
<!-- <td colspan="2"><input type="submit" value="Загрузить" name="go"></td> -->
</tr>
</table>
</form>
<div id="result"></div> <!-- для вывода аяксовых сообщений -->
<table width="500px" cellpadding="0" cellspacing="0" border="0">
<tr>
<td>Пользователь: </td>
<td><b><div name="usr"><?php echo $usrname ?></div></b></td>
</tr>
<tr>
<td>Заголовок: </td>
<td><input name="title" maxlength="80" /></td>
</tr>
<tr>
<td>Описание: </td>
<td><textarea cols="15" rows="5" name="descr"></textarea></td>
</tr>
<tr>
<td>Фотография: </td>
<td><input type="file" name="upl"></td>
</tr>
<tr>
<td colspan="2"><input type="button" value="Загрузить" onclick="upload(this.form.upl)" name="go"></td>
<!-- <td colspan="2"><input type="submit" value="Загрузить" name="go"></td> -->
</tr>
</table>
</form>
<div id="result"></div> <!-- для вывода аяксовых сообщений -->
PHP-код, который всё это дело обрабатывает:
Код:
if ($_GET['mode'] == 'load' && isset($_GET['album_id']) && isset($_GET['cat_id']))
{
$type = $_FILES['upl']['type'];
$str = substr($type, 0, 5);
$size = $_FILES['upl']['size'];
//переменные формы
$picname = $_FILES["upl"]["name"];
$picsize = $_FILES["upl"]["size"];
$title = $_REQUEST["title"];
$descr = $_REQUEST["descr"];
if ( ($str == "image") && ( ($size > 200) || $size < 3145728 )) //ограничиваем размер снизу 200 байт,сверху 3 мегабайта
{
if (!copy($_FILES['upl']['tmp_name'], '/upload_dir/'.$_FILES['upl']['name']))
{
$GLOBALS['_RESULT'] = array(
"status" => "404",
"type" => $_FILES['upl']['type'],
"dberror" => "0"
);
}
else
{
$GLOBALS['_RESULT'] = array(
"status" => "200",
"type" => $_FILES['upl']['type'],
"dberror" => "0",
"title" => $_REQUEST['title'],
"descr" => $_REQUEST['descr']
);
$query = pg_query(//insert query);
if (!$query)
{
echo pg_last_error();
$GLOBALS['_RESULT'] = array(
"status" => "000",
"type" => $_FILES['upl']['type'],
"dberror" => "1",
"dbdescr" => pg_last_error()
);
}
else
{
$GLOBALS['_RESULT'] = array(
"status" => "200",
"type" => $_FILES['upl']['type'],
"dberror" => "0",
"title" => $title, //возвращает null!!!
"descr" => $descr //возвращает null!!!
);
}
}
}
else
{
$GLOBALS['_RESULT'] = array(
"status" => "500"
);
}
}
{
$type = $_FILES['upl']['type'];
$str = substr($type, 0, 5);
$size = $_FILES['upl']['size'];
//переменные формы
$picname = $_FILES["upl"]["name"];
$picsize = $_FILES["upl"]["size"];
$title = $_REQUEST["title"];
$descr = $_REQUEST["descr"];
if ( ($str == "image") && ( ($size > 200) || $size < 3145728 )) //ограничиваем размер снизу 200 байт,сверху 3 мегабайта
{
if (!copy($_FILES['upl']['tmp_name'], '/upload_dir/'.$_FILES['upl']['name']))
{
$GLOBALS['_RESULT'] = array(
"status" => "404",
"type" => $_FILES['upl']['type'],
"dberror" => "0"
);
}
else
{
$GLOBALS['_RESULT'] = array(
"status" => "200",
"type" => $_FILES['upl']['type'],
"dberror" => "0",
"title" => $_REQUEST['title'],
"descr" => $_REQUEST['descr']
);
$query = pg_query(//insert query);
if (!$query)
{
echo pg_last_error();
$GLOBALS['_RESULT'] = array(
"status" => "000",
"type" => $_FILES['upl']['type'],
"dberror" => "1",
"dbdescr" => pg_last_error()
);
}
else
{
$GLOBALS['_RESULT'] = array(
"status" => "200",
"type" => $_FILES['upl']['type'],
"dberror" => "0",
"title" => $title, //возвращает null!!!
"descr" => $descr //возвращает null!!!
);
}
}
}
else
{
$GLOBALS['_RESULT'] = array(
"status" => "500"
);
}
}
Пути, адрес сайта и запрос в базу не показываю по причинам безопасности :) все сопутствующие файлы, естественно, включены через require_once.
P. S. Использовать 2 разные формы - не вариант! (Сами подумайте,юзер сначала будет загружать фотку а потом описание к ней? В два приёма? :) :) :))