|
|
|
| Код формы
<?php
if (!isset($id))
{
$result=mysql_query("select * from brand");
$res=mysql_fetch_assoc($result);
do
{
printf (''.$res ['brand'].' ( <a href="'.$_SERVER['PHP_SELF'].'?id='.$res ['id'].'" class="edit">ред</a> )<br>',$res["brand"], $res["id"]);
}
while ($res=mysql_fetch_assoc($result));
}
else
{
$result=mysql_query("select * from brand WHERE id=$id");
$res=mysql_fetch_assoc($result);
printf ('
<form action="edit1.php" method="post" enctype="multipart/form-data">
<p>Название<br>
<input name="brand" type="text" size="60" value="'.$res ['brand'].'"></p>
<p>Новость<br>
<textarea name="des" cols="60" rows="10">'.$res ['des'].'</textarea></p><br>
Картинка
<input name="filename" type="file">
<input name="id" type="hidden" value="'.$res ['id'].'">
<input name="submit" type="submit" value="Редактировать" class="text">
</form>');
}
?>
|
Обработчик
<?php
if (isset ($_GET['id'])) {$id=$_GET['id'];}
if(isset($_FILES['filename']) && !$_FILES['filename']['error'] && isset($_POST['brand']) && isset($_POST['des']))
{
$result = mysql_query ("UPDATE brand SET brand='{$_POST['brand']}', des='{$_POST['des']}' WHERE id='{$_POST['id']}'") or die("error");
if (isset($_POST['filename']) && move_uploaded_file($_FILES['filename']['tmp_name'], "/home/e-toy.su/www/img/b{$_POST['id']}.jpg") )
{
echo "Добавлено";
}
else { echo "Не добавлено";}
}
?>
|
| |
|
|
|
|
|
|
|
для: scva
(10.07.2009 в 10:12)
| | >Код формы
>Обработчик
Мануал
while()
printf()
move_uploaded_file() | |
|
|
|
|
|
|
|
для: Николай2357
(10.07.2009 в 10:21)
| | супер, я все понял))))
Укажите мне ошибки и если можно русскими словами объясните | |
|
|
|
|
|
|
|
для: scva
(10.07.2009 в 11:11)
| | По первому пункту использовать while. Если любопытно почему, тут есть поиск и куча тем, где разбираются подобные ляпы. После выхода в свет суперпупервидеокурса г-на Попова это стало притчей воязыце.
По второму пункту. Тут совершенно не нужна конструкция printf(), к тому же совершенно неверно использованная. Сделайте проще:
<?
echo '
<form action="edit1.php" method="post" enctype="multipart/form-data">
<p>Название<br>
<input name="brand" type="text" size="60" value="'.$res ['brand'].'"></p>
<p>Новость<br>
<textarea name="des" cols="60" rows="10">'.$res ['des'].'</textarea></p><br>
Картинка
<input name="filename" type="file">
<input name="id" type="hidden" value="'.$res ['id'].'">
<input name="submit" type="submit" value="Редактировать" class="text">
</form>' ;
|
По третьему.
Проверка никуда не годится. Вот это что?
!$_FILES['filename']['error']
|
Напишите в начало обработчика
<pre>
<?
print_r($_FILES);
?>
</pre>
|
и поэксперементируйте. Посмотрите что в этом массиве и как Вы это пытаетесь использовать. | |
|
|
|
|
|
|
|
для: Николай2357
(10.07.2009 в 12:15)
| | !$_FILES['filename']['error'] - это самая оптимальная проверка, во всех других случаях это поле будет содержать какую-либо информацию (если файл не подгружали или произошла ошибка) и только если все ОК, то это поле равно 0. | |
|
|
|
|
|
|
|
для: Петр
(10.07.2009 в 12:37)
| | >!$_FILES['filename']['error'] - это самая оптимальная проверка
И всё?? Ну если Вам нужна куча всякого д... непонятно чего под флагом gif, то можно конечно посчитать её оптимальной. А Вы в курсе, что IE исполняет js из текстовых файлов?
Напишите это
<script type="text/javascript" language="javascript">
alert(document.cookie)
</script>
| сохраните с расширением.gif (как этот скрипт делает) и запустите в Эксплорере.
Вот это оптимально. | |
|
|
|
|
|
|
|
для: Николай2357
(10.07.2009 в 16:04)
| | Если сохранить как gif, и вставить как картинку, то IE ничего не выполнит. | |
|
|
|
|
|
|
|
для: sim5
(10.07.2009 в 16:09)
| | Это понятно, но напрямую то выполняет. А вообще это просто для примера.
Согласитесь, проверка ведь действительно никудышняя. | |
|
|
|
|
|
|
|
для: Петр
(10.07.2009 в 12:37)
| | оптимальной она станет лишь в случае $_FILES['filename']['error'] === 0
Можете объяснить, почему именно. | |
|
|
|
|
|
|
|
для: Николай2357
(10.07.2009 в 12:15)
| | Вообщем полная ж.....
мучаюсь третий день, если кто решит помочь, то могу выложить код
при добавлении
<pre>
<?
print_r($_FILES);
?>
</pre>
|
выводит
| |
|
|
|
|
|
|
|
для: scva
(10.07.2009 в 14:00)
| | Если при выборе и загрузке файла вы получаете пустой массив $_FILES, то проверьте, разрешена ли у вас вообще загрузка файлов на сервер. | |
|
|
|
|
|
|
|
для: sim5
(10.07.2009 в 14:04)
| | Загрузка на сервер разрешена, вообщем выкладываю весь код, если кто поможет, тому огромное человеческое спасибо скажу
<?
if (isset ($_GET['id'])) {$id=$_GET['id'];}
if (!isset($id))
{
$result=mysql_query("select * from `tovar`");
$res=mysql_fetch_assoc($result);
do
{
printf ('<tr><td><h4>'.$res ['title'].'</h4> бренд - <strong> '.$res ['brand'].'</strong> </td><td> ( <a href="'.$_SERVER['PHP_SELF'].'?id='.$res ['id'].'" class="edit">ред</a> )<br>
</td></tr> <tr bgcolor="F9E8E9">
<td colspan="2"></td>
</tr>',$res["id"], $res["category"], $res["title"]);
}
while ($res=mysql_fetch_assoc($result));
}
else
{
$result=mysql_query("select * from tovar WHERE id=$id");
$res=mysql_fetch_assoc($result);
echo '
<form action="edit_tovar1.php" method="post">
<p>Назание товара<br>
<input name="title" type="text" size="60" value="'.$res ['title'].'"></p>
<p>Артикул<br>
<input name="articul" type="text" size="60" value="'.$res ['articul'].'"></p>
<p>Категория<br>
<input name="category" type="text" size="60" value="'.$res ['category'].'">
</p>
<p>Фирма производитель<br>
<input name="brand" type="text" size="60" value="'.$res ['brand'].'">
</p>
<p>Цена <br>
<input name="price" type="text" size="60" value="'.$res ['price'].'">
</p>
<p>
Картинка
<input name="filename" type="file">
<input name="filename" type="hidden" value="'.$res ['id'].'">
</p>
<p>Краткое описание (META description)<br>
<input name="des" type="text" size="110" value="'.$res ['des'].'">
<p>
<p>Полное описание<br>
<textarea name="description" cols="60" rows="10">'.$res ['description'].'</textarea></p>
<p>
<p>Есть в наличии<br>
<input name="yamarket" type="text" size="10" value="'.$res ['yamarket'].'">
<p>
<p>Market-приоритетное размещение <br>
<input name="spec_ya" type="text" size="10" value="'.$res ['spec_ya'].'">
<p>
<p>Yandex-market наличие <br>
<input name="nal_ya" type="text" size="10" value="'.$res ['nal_ya'].'">
<p>
<p>Спецразмещение<br>
<input name="spec" type="text" size="10" value="'.$res ['spec'].'">
<p>
<input name="id" type="hidden" value="'.$res ['id'].'">
<input name="submit" type="submit" value="Редактировать" class="text">
</form>';
}
?>
|
обработчик
<pre>
<?
print_r($_FILES);
?>
</pre>
<?
if (isset($_POST['title'])) {$title = $_POST['title'];}
if (isset($_POST['articul'])) {$articul = $_POST['articul'];}
if (isset($_POST['category'])) {$category = $_POST['category'];}
if (isset($_POST['brand'])) {$brand = $_POST['brand'];}
if (isset($_POST['price'])) {$price = $_POST['price'];}
if (isset($_POST['des'])) {$des = $_POST['des'];}
if (isset($_POST['description'])) {$description = $_POST['description'];}
if (isset($_POST['yamarket'])) {$yamarket = $_POST['yamarket'];}
if (isset($_POST['spec_ya'])) {$spec_ya = $_POST['spec_ya'];}
if (isset($_POST['nal_ya'])) {$nal_ya = $_POST['nal_ya'];}
if (isset($_POST['spec'])) {$spec = $_POST['spec'];}
if (isset($_POST['id'])) {$id = $_POST['id'];}
if (isset($_POST['filename'])) {$filename = $_POST['filename'];}
if (isset($_FILES['filename']) && !$_FILES['filename']['error'] && isset($title) && isset($articul) && isset($category) && isset($brand) && isset($price) && isset($des) && isset($description) && isset($yamarket) && isset($spec_ya) && isset($nal_ya) && isset($spec) )
{
$result = mysql_query ("UPDATE tovar SET title='$title', articul='$articul', category='$category', brand='$brand', price='$price', des='$des', description='$description', yamarket='$yamarket', spec_ya='$spec_ya', nal_ya='$nal_ya', spec='$spec' WHERE id='{$_POST['id']}'") or die("error");
if (isset($_POST['filename']) && move_uploaded_file($_FILES['filename']['tmp_name'], "../tovar/b{$_POST['id']}.jpg") )
{
echo("<font style=\"font-size:8px;\">Картинка успешно загружена</font> <br>");
new_img_resizeb ("../tovar/b$id.jpg", 500, 500, $mid, 'tovar');
new_img_resize ("../tovar/b$id.jpg", 150,150, $mid, 'tovar');
}
else { echo "Не добавлено";}
}
?>
|
new_img_resizeb - функция ресайза картинок | |
|
|
|
|
|
|
|
для: scva
(10.07.2009 в 14:46)
| | Вы читаете о том, что вам говорят? Вам уже указывали на do...while, и проку? Вам уже говорили о enctype="multipart/form-data", и где оно у вас в форме? И нельзя вот так:
$id=$_GET['id']
а потом использовать этот $id в запросе, это БОООООЛЬШАЯ ДЫРА!
В общем для начала:
<?
$id = isset($_GET['id']) ? intval($_GET['id']) : NULL;
if (!$id) {
$result=mysql_query("select * from `tovar`");
while ($res=mysql_fetch_assoc($result))
print '<tr><td><h4>'.$res ['title'].'</h4> бренд - <strong> '.$res ['brand'].'</strong> </td><td>
( <a href="'.$_SERVER['PHP_SELF'].'?id='.$res ['id'].'" class="edit">ред</a> )<br>
</td></tr> <tr bgcolor="F9E8E9"><td colspan="2"></td>
</tr>',$res["id"], $res["category"], $res["title"]);
} else {
$result=mysql_query("select * from tovar WHERE id=$id");
//......
|
А в форме: <form action="edit_tovar1.php" method="post" enctype="multipart/form-data">
PS. И разбивайте свой код - длинные портянки "скручивать" не удобно. | |
|
|
|
|
|
|
|
для: sim5
(10.07.2009 в 15:33)
| | Спасибо проблему решил, картинки добавляются, но возникла другая проблема, теперь не редактируется просто текст, добавляются только картинки, а вот данные не меняются
<?
if (isset($_POST['title'])) {$title = $_POST['title'];}
if (isset($_POST['articul'])) {$articul = $_POST['articul'];}
if (isset($_POST['category'])) {$category = $_POST['category'];}
if (isset($_POST['brand'])) {$brand = $_POST['brand'];}
if (isset($_POST['price'])) {$price = $_POST['price'];}
if (isset($_POST['des'])) {$des = $_POST['des'];}
if (isset($_POST['description'])) {$description = $_POST['description'];}
if (isset($_POST['yamarket'])) {$yamarket = $_POST['yamarket'];}
if (isset($_POST['spec_ya'])) {$spec_ya = $_POST['spec_ya'];}
if (isset($_POST['nal_ya'])) {$nal_ya = $_POST['nal_ya'];}
if (isset($_POST['spec'])) {$spec = $_POST['spec'];}
if (isset($_POST['id'])) {$id = $_POST['id'];}
if (isset($_POST['filename'])) {$filename = $_POST['filename'];}
if (isset($_POST['opisanie'])) {$opisanie = $_POST['opisanie'];}
if (isset($_FILES['filename']) && !$_FILES['filename']['error'] && isset($title)
&& isset($articul) && isset($category) && isset($brand)
&& isset($price) && isset($des) && isset($description)
&& isset($yamarket) && isset($spec_ya) && isset($nal_ya) && isset($spec)
&& isset($opisanie) )
{
$result = mysql_query ("UPDATE tovar SET title='$title', articul='$articul',
category='$category', brand='$brand', price='$price', des='$des',
description='$description', opisanie='$opisanie',
yamarket='$yamarket', spec_ya='$spec_ya', nal_ya='$nal_ya',
spec='$spec' WHERE id='{$_POST['id']}'") or die("error");
$res = mysql_query("SELECT max(id) AS mid FROM tovar WHERE title='$title';");
$l = mysql_fetch_assoc($res);
$mid = $l['mid'];
mysql_free_result($res);
if (isset($_POST['filename']) && move_uploaded_file($_FILES['filename']['tmp_name'], "../tovar/b{$_POST['id']}.jpg") )
if(file_exists("../tovar/b$mid.jpg"))
{
echo("<font style=\"font-size:10px;\">Картинка успешно загружена</font><br><br>
<a href='edit_tovar.php'>Добавить еще</a><br><br>
<a href='manager.php'>На администраторскую</a>");
new_img_resizeb ("../tovar/b$mid.jpg", 500, 500, $mid, 'tovar');
new_img_resize ("../tovar/b$mid.jpg", 150,150, $mid, 'tovar');
}
else { echo "Не добавлено";}
}
?>
|
| |
|
|
|
|
|
|
|
для: scva
(10.07.2009 в 17:39)
| | $_POST['filename'] - от куда это? Вам уже говорили об этом, не будет такого в $_POST массиве! Элемент формы типа file будет только в массиве $_FILES! Зачем вы ставите в условие то, чего не существует в природе?
У вас обязательно условие, что все поля формы должны быть заполнены, а если не заполнены, тогда что? Где логика у вас?
PS. Так у вас так скрытое поле называется, как поле tile. Зачем? Вообще зачем оно нужно? | |
|
|
|
|
|
|
|
для: sim5
(10.07.2009 в 17:46)
| | Спасибо, что помогаете!!!
Но запутался я окончательно
Пробывал так, тоже никаких изменений
$res = mysql_query("SELECT max(id) AS mid FROM tovar");
$l = mysql_fetch_assoc($res);
$mid = $l['mid'];
mysql_free_result($res);
if (move_uploaded_file($_FILES['filename']['tmp_name'], "../tovar/b{$_POST['id']}.jpg") )
if(file_exists("../tovar/b$mid.jpg"))
|
| |
|
|
|
|
|
|
|
для: scva
(10.07.2009 в 18:04)
| | Я не об этом, бог с ней с картинкой, загружается и слава богу, вот только обязательно нужно проверять, что вам загружают, если конечно это не админ часть и админом является хозяин, который себе же вредить не будет.
Зачем у вас это скрытое поле? Если ваше условие, это заполнение всех полей формы, то значит даже одно незаполненное поле уже причина возврата формы назад пользователю, для его заполнения. Где у вас это?
У вас весь скрипт не имеет логической структуры. | |
|
|
|
|
|
|
|
для: sim5
(10.07.2009 в 18:17)
| | Вообщем ничего не получилось | |
|
|
|
|
|
|
|
для: scva
(10.07.2009 в 22:26)
| | К примеру. Вы пишите этот магазин для себя, вы будете его владельцем, и администратором, либо пишите его кому-то, и он будет единственным администратором своего магазина.
Тогда прверки на сервере: isset($title) && isset($articul) && isset($category) && isset($brand).... и т.д. можно не делать, а возложить этот "сервис" на сторону клиента - на JavaScript. То есть, заполняемость полей, их корректность при заполнении, все делать на стороне клиента, а на сервере получать уже корректные данные. Кстати, isset(переменная) не проверяет пуста ли она, она проверяет установлена ли таковая, более ничего. А объявленная переменная, даже с пустым значением вернет вам при такой проверке true.
Если же иначе, то принимаемые данные от формы нужно обязательно проверять на сервере, чего вы вообще не делаете. К тому же, вы пытаетесь проверить (как я уже говорил не правильно) все ли данные заполнены, а значит надо полагать, что условием является заполнение всех полей. В таком случае даже одно не заполненное поле формы, это ошибка, а значит нужно вернуть клиенту форму назад, с соответствующим сообщением. Проверка полей формы, это значит проверка на допустимость вводимых данных, например, цена не может быть символом, а только числом, и если это символы (все мы можем ошибаться при вводе), значит опять ошибка, опять возврат формы.... И так далее.
Таким образом должно все работать. У вас же этого нет. Да и изображение вы не задумываясь отправляете в каталог, а лишь только затем делаете его ресайз, почему?
И всю эту работу можно описать одним скриптом, кстати это будет удобнее, не зачем разбивать его на два, как у вас.
В общем подумайте сначала над логикой работы вашей задачи, а уж затем задавайтесь более мелкими решениями в ней. | |
|
|
|
|