Здравствуйте. Есть скрипт магазина для ФФ но там серьезная дыра. Если пользователь создаст товар и купите его у себя, то стоимость товара зачислится ему же на баланс.
Вопрос к знатокам, как закрыть? При создании товара в базе данных отсутствует запись о продавце. Следовательно я создаю в строчке с товаром новый столбец, пусть будет "id_us".
Какие команды необходимо вписать в файле создания товара, чтобы в таблицу мускула в столбец id_us занесся id пользователя. Файл ниже:
<?PHP header("Content-Type: text/html; charset=windows-1251");?>
<meta http-equiv="content-type" content="text/html; charset=windows-1251" />
<html>
<head>
</div>
<div class="cl-right">
<div class="s-bk-lf">
<div class="acc-title">Добавить товар</div>[br /]
</div>
<div class="silver-bk"><div class="clr"></div>
<center>
Прежде чем добавить свой товар на продажу, убедитесь, что нет такого товара в списке магазина!
[hr /]
</center>
<form action="/?menu=manager&sel=mag_get_tavar" method="post" enctype="multipart/form-data">
<p>Название товара</p>
<p><input type='text' name='nametovar' size='60' /></p>
<p>Цена товара (RUB)</p>
<p><input type='text' name='price' size='40' /></p>
<p>Категория товара</p>
<p><select name="cat">
<option selected disabled>Выберите категорию товара</option>
<?php
$db->Query("SELECT * FROM `db_mag_cat` ORDER BY `id` ASC ");
while ( $rows = $db->FetchArray() ){
echo "<option value='".$rows['id']."'>".$rows['name_cat']."</option>";
}
?>
</select>
</p>
<p>Описание товара</p>
<p><textarea rows="15" cols="55" name="description"></textarea></p> [br /][br /]
<p>Выберите фото (JPG, jpg, jpeg, JPEG, gif, GIF, png, PNG) [br /]Название картинки должно быть по АНГЛИЙСКИ!!!</p>
<p><input type="FILE" name="imgupload"></p>
<p>Выберите товар (RAR, ZIP, TXT) [br /]Название файла должно быть по АНГЛИЙСКИ!!!</p>
<!-- Поле файла и кнопка Обзор -->
<p><input type='file' name='FILE' size='15' /></p> [br /][br /]
<input type=submit name="submit" id="submit" value="Загрузить">
</form>
<?php
//echo 'Document root: '.$_SERVER['DOCUMENT_ROOT'].'[br /]';
//echo 'Полный путь к скрипту и его имя: '.$_SERVER['SCRIPT_FILENAME'].'[br /]';
//echo 'Имя скрипта: '.$_SERVER['SCRIPT_NAME'];
$_OPTIMIZATION["title"] = "Добавить товар";
$usid = $_SESSION["user_id"];
$usname = $_SESSION["user"];
$submit=$_POST["submit"];
if(isset($submit))
{
# === Грузим архив на сервер === #
//$uploadfile = "uploads/".$_FILES['FILE']['name'];
$now_date = time();
$namefile = $now_date.$_FILES['FILE']['name'];
$uploadfile = "uploads/".$namefile;
$zagruzil = move_uploaded_file($_FILES['FILE']['tmp_name'], $uploadfile);
// Копируем файл из каталога для временного хранения файлов:
if (isset($zagruzil))
{
echo "<h3 style='color:green'>Файл успешно загружен на сервер</h3>";
}
else { echo "<h3 style='color:red'>Ошибка! Не удалось загрузить файл на сервер!</h3>"; }
# === Грузим архив на сервер === #
//заносим введенное пользователем описание в переменную $imgupload, если оно пустое, то уничтожаем переменную
if (isset($_POST['description']))
{
$description = $_POST['description'];
if ($description == '')
{
unset($description);}
}
if (empty($_FILES['imgupload']['name']))
{
//если переменной не существует (пользователь не отправил изображение),то присваиваем ему заранее приготовленную картинку с надписью "нет аватара"
//$avatar = "avatars/net-avatara.jpg";
$avatar = "nophoto.png";
//можете нарисовать net-avatara.jpg
}
else
{
//иначе - загружаем изображение пользователя
$path_directory = $_SERVER["DOCUMENT_ROOT"].'/uploads/';
//папка, куда будет загружаться начальная картинка и ее сжатая копия
if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)|(gif)|(GIF)|(png)|(PNG)$/',$_FILES['imgupload']['name']))
//проверка формата исходного изображения
{
$filename = $_FILES['imgupload']['name'];
$source = $_FILES['imgupload']['tmp_name'];
$target = $path_directory . $filename;
move_uploaded_file($source, $target);
//загрузка оригинала в папку $path_directory
if(preg_match('/[.](GIF)|(gif)$/', $filename)) {
$im = imagecreatefromgif($path_directory.$filename) ;
//если оригинал был в формате gif, то создаем изображение в этом же формате. Необходимо для последующего сжатия
}
if(preg_match('/[.](PNG)|(png)$/', $filename)) {
$im = imagecreatefrompng($path_directory.$filename) ;
//если оригинал был в формате png, то создаем изображение в этом же формате. Необходимо для последующего сжатия
}
if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) {
$im = imagecreatefromjpeg($path_directory.$filename);
//если оригинал был в формате jpg, то создаем изображение в этом же формате. Необходимо для последующего сжатия
}
$date=time();
$avatar = $date.".jpg";
//$w = 400; // мы получим пропорциональное изображение шириной 400px
$q = 100; // качество jpeg по умолчанию
$src = $im;
// функция imagecreatefromjpeg создает изображение JPEG из файла
// т.е. создаём исходное изображение на основе исходного файла и определяем его размеры
$w_src = imagesx($src);
$h_src= imagesy($src);
// получение ширины и высоты изображения в пикселях
//$ratio = $w_src/$w;
//$w_dest = round($w_src/$ratio);
//$h_dest = round($h_src/$ratio);
$w_dest = $w_src;
$h_dest = $h_src;
// получение координат для построения нового изображения необходимой нам ширины
$dest = imagecreatetruecolor($w_dest,$h_dest);
// функция imagecreatetruecolor пустое полноцветное изображение размерами x_size и y_size.
// Созданное изображение имеет черный фон.
imagecopyresized($dest, $src, 0, 0, 0, 0, $w_dest, $h_dest, $w_src, $h_src);
// Функция imagecopyresized копирует прямоугольные области с одного изображения на другое
// вывод картинки и очистка памяти
//imagejpeg($dest,$avatar,$q);
imagejpeg($dest, $path_directory.$date.".jpg" ,$q);
imagedestroy($dest);
imagedestroy($src);
//вычисляем время в настоящий момент.
//imagejpeg($dest, $path_directory.$date.".jpg");
//сохраняем изображение формата jpg в нужную папку, именем будет текущее время. Сделано, чтобы у аватаров не было одинаковых имен.
//почему именно jpg? Он занимает очень мало места + уничтожается анимирование gif изображения, которое отвлекает пользователя. Не очень приятно читать его комментарий, когда краем глаза замечаешь какое-то движение.
//$avatar = $path_directory.$date.".jpg";
//*******************Можно не использовать, если нет необходимости сжимать***************
//заносим в переменную путь до аватара.
$delfull = $path_directory.$filename;
unlink ($delfull);
//удаляем оригинал загруженного изображения, он нам больше не нужен. Задачей было - получить миниатюру.
//*******************Можно не использовать, если нет необходимости сжимать***************
}
else
{
//в случае несоответствия формата, выдаем соответствующее сообщение
exit ("Фото/картинка должно/а быть в формате <strong>JPG,GIF или PNG</strong>"); //останавливаем выполнение сценариев
}
//конец процесса загрузки и присвоения переменной $avatar адреса загруженной авы
}
if (@copy($_FILES['imgupload']['tmp_name'], $path_directory . $_FILES['imgupload']['name'])){
echo "<h3 style='color:red'>Ошибка! Не удалось загрузить ФОТО на сервер!</h3>";
}
else { echo "<h3 style='color:green'>ФОТО успешно загружено на сервер</h3>"; }
$date_add = time();
$name = $_POST['nametovar'];
$price = $_POST['price'];
$cat = $_POST['cat'];
$db->Query("INSERT INTO `db_mag` (date_add, img, description, name, namefile, price, id_cat)
VALUES('$date_add','$avatar','$description','$name', '$namefile', '$price', '$cat' )");
$tovar_id = $db->LastInsert();
$db->Query("INSERT INTO `db_mag_users` (user, user_id, tovar_id)
VALUES('$usname','$usid','$tovar_id' )");
}
?>
</center>
</BR>
</div>
</div>
<div class="clr"></div>
</div>
<div class="footer">
<center>
<div class="clr-line"></div>
</center>
</div>
</div>
</div>
</body>
</html>
И как написать сравнение в файле покупки товара, чтобы продавцу с id равному id_us невозможно была покупка. Файл покупки ниже:
<?PHP header("Content-Type: text/html; charset=windows-1251");?>
<meta http-equiv="content-type" content="text/html; charset=windows-1251" />
</div>
<?PHP
$_OPTIMIZATION["title"] = "Магазин";
$_OPTIMIZATION["description"] = "Магазин";
$_OPTIMIZATION["keywords"] = "Магазин";
?>
<div class="cl-right">
<div class="s-bk-lf">
<div class="acc-title">Магазин</div>
</div>
<div class="silver-bk"><div class="clr">
<?php
$userid = $_SESSION["user_id"];
$username = $_SESSION["user"];
$data = time();
$db->Query("SELECT * FROM `db_config` WHERE id = '1' LIMIT 1");
$sonfig_site = $db->FetchArray();
$db->Query("SELECT * FROM `db_users_a` WHERE id = '$userid' AND user = '$username' LIMIT 1");
$user_array = $db->FetchArray();
$db->Query("SELECT * FROM db_users_b WHERE id = '$userid' LIMIT 1");
$user_data = $db->FetchArray();
$db->Query("SELECT * FROM `db_mag_cat` ");
$cat_site = $db->FetchArray();
if(isset($_GET["show"])){
$idShow = $_GET['show'];
echo $idShow;
$db->Query("SELECT * FROM `db_mag` WHERE id=".$idShow);
$show = $db->FetchArray();
$serebro = $show['price'] * $sonfig_site["ser_per_wmr"];
$link = "http://".$_SERVER['SERVER_NAME']."/uploads/".$show["namefile"]."";
if ($idShow == $show['id']) { // Проверка на существование товара в магазине
$mass = "[br /]<center>Поздравляем с приобретением ".$show["name"]."![br /]
С Вашего счета было списано ".$serebro." серебра.[br /][br /]
Скачать архив можно по сылке: <a target='_blank' href='".$link."'>".$link."[/url][br /]
или нажав <a target='_blank' href='".$link."'> =>>> СЮДА[/url][br /][br /]
Спасибо!</center>";
# Блокировка сессии
if(!isset($_SESSION["user_id"])){
//Header("Location: /");
echo "<center><H2 style='color:red'>Авторизуйтесь, пожалуйста! <a href='/magazin'>Назад[/url]</H2></center>";
//return;
}
else
{
# Проверяем баланс пользовтеля
if($serebro <= $user_data["money_b"]){
# Проверяем на существующие заявки
$db->Query("SELECT COUNT(*) FROM `db_mag_orders` WHERE user_name = '$username' AND user_id = '$userid' AND tovar_id = '$idShow' ");
if($db->FetchRow() == 0){
//echo "No";
# ==== ОПЛАТА ПОЛЬЗОВАТЕЛЮ ==== #
# Проверяем на существующие заявки
$db->Query("SELECT COUNT(*) FROM `db_mag_users` WHERE tovar_id = '$idShow' ");
if($db->FetchRow() == 0){
//echo "Нет товара! Пользователь НЕ продает!";
# СРЕДСТВА ИДУТ АДМИНУ, т.к. выложил товар АДМИН. #
# Заносим в db_mag_orders покупку
$db->Query("INSERT INTO `db_mag_orders` (user_name, user_id, tovar_id, date_add, sum)
VALUES ('$username','$userid','$idShow','$data', '".$show['price']."') ");
# Снимаем с пользователя
$db->Query("UPDATE `db_users_b` SET money_b = money_b - '$serebro' WHERE id = '$userid'");
# Отправляем на почту
$sender = new isender;
$sender -> SendMagazin($username, $user_array["email"], $link);
# Выводим сообщение
echo $mass;
} else {
//echo "Есть такой товар. Пользователь продает!";
# СРЕДСТВА ИДУТ ПОЛЬЗОВАТЕЛЮ, т.к. выложил товар ПОЛЬЗОВАТЕЛЬ. #
# Заносим в db_mag_orders покупку
$db->Query("INSERT INTO `db_mag_orders` (user_name, user_id, tovar_id, date_add, sum)
VALUES ('$username','$userid','$idShow','$data', '".$show['price']."') ");
# Добавляем на баланс пользователю
$db->Query("SELECT * FROM `db_mag_users` WHERE tovar_id = ".$idShow);
$showRow = $db->FetchArray();
$idUserTov = $showRow['user_id'];
$db->Query("UPDATE `db_users_b` SET money_b = money_b + '$serebro' WHERE id = '$idUserTov'");
# Добавляем статистику пользователю
$db->Query("UPDATE `db_mag_users` SET sumtov = sumtov + '$serebro' WHERE user_id = '$idUserTov' AND tovar_id = '$idShow' ");
# Отправляем на почту
$sender = new isender;
$sender -> SendMagazin($username, $user_array["email"], $link);
# Выводим сообщение
echo $mass;
}
# ==== /ОПЛАТА ПОЛЬЗОВАТЕЛЮ ==== #
}
else
{
echo "<center><H2 style='color:red'>Вы уже покупали данный товар! <a href='/magazin'>Назад[/url]</H2>
Скачать архив можно по сылке: <a target='_blank' href='".$link."'>".$link."[/url][br /]
или нажав <a target='_blank' href='".$link."'> =>>> СЮДА[/url][br /][br /]</center>";
}
}else echo "<center><H2 style='color:red'>Недостаточно средств! <a href='/magazin'>Назад[/url]</H2></center>";
}
} else echo "<center><H2 style='color:red'>Такого товара НЕТ! <a href='/magazin'>Назад[/url]</H2></center>";
}
else
{
#start //echo "no show";
if(isset($_GET["buy"])){
$idTovar = $_GET['buy'];
$db->Query("SELECT COUNT(*) FROM `db_mag` WHERE id = '$idTovar' ");
if($db->FetchRow() == 0){ // Проверка на существование товара в магазине
echo "<center><H2 style='color:red'>Такой товар купить нельзя! <a href='/magazin'>Назад[/url]</H2></center>";
}
else
{
$db->Query("SELECT * FROM `db_mag` WHERE id=".$idTovar);
while($magtov = $db->FetchArray()){
$serebro = $magtov['price'] * $sonfig_site["ser_per_wmr"];
?>
<table align="left" cellspacing="5" cellpadding="5" border="1" width="99%">
<tr>
<td><H2><?=$magtov["name"];?></H2></td>
<td>Дата публикации: <?=date("d.m.Y",$magtov["date_add"]); ?> в <?=date("H:m:s",$magtov["date_add"]); ?></td>
</tr>
<tr>
<td colspan="2" align="center"><img src="../../uploads/<?php echo $magtov['img']; ?>" width="" height="" /></td>
</tr>
<tr>
<td colspan="2"><?php echo $magtov["description"]; ?></td>
</tr>
<tr>
<td colspan="1">Цена: <?=$magtov['price'];?> RUB</td>
<td colspan="1"><a href="/magazin/show/<?=$magtov['id'];?> ">КУПИТЬ[/url]</td>
</tr>
</table>
<?php
}
}
}
else
{
#start //echo "no bye";
?>
<?php
if(isset($_GET["cat"])){
$idCat = $_GET["cat"];
$db->Query("SELECT * FROM `db_mag` WHERE `id_cat` = '$idCat' ORDER BY `id` DESC ");
if($db->NumRows() > 0){
while($mag = $db->FetchArray()){
?>
<table align="left" cellspacing="5" cellpadding="5" border="1" width="99%">
<tr>
<td>№<?=$mag["id"];?></td>
<td><?=$mag["name"];?></td>
<td>Дата публикации: <?=date("d.m.Y",$mag["date_add"]); ?> в <?=date("H:m:s",$mag["date_add"]); ?></td>
</tr>
<tr>
<td colspan="3"><img src="/uploads/<?=$mag['img'];?>" width="" height="35%" > <?php $desc=$mag["description"]; echo substr("$desc", 0, 100)."..."; /* читаем с нулевого символа, до 100 и добавляем многоточие */ ?></td>
</tr>
<tr>
<td colspan="2"><a href="/magazin/buy/<?=$mag['id'];?>">Подробнее о товаре ...[/url]</td>
</tr>
</table>
<HR/>
<?php
}
}
else
{
$db->Query("SELECT COUNT(*) FROM `db_mag_cat` WHERE id = '$idCat' ");
if($db->FetchRow() !== 0){ // Проверка на существование товара в магазине
echo "<center><H2 style='color:red'>Такой категории товара НЕТ! <a href='/magazin'>Назад[/url]</H2></center>";
}
else
{
echo "<center><H2 style='color:red'>Такого товара НЕТ! <a href='/magazin'>Назад[/url]</H2></center>";
}
}
}
else
{
# ========== Постраничная навигация =============== #
DEFINE('ITEMS_PER_PAGE', 8); # <= количество товаров на страницу
// Выбираем из БД общее количество записей
$db->Query("SELECT COUNT(*) FROM `db_mag` ");
//$res = $db->FetchRow();
$total = $db->FetchRow( 0, 0 );
// Проверяем передан ли номер текущей страницы
if ( isset($_GET['page']) ) {
$page = (int)$_GET['page'];
if ( $page < 1 ) $page = 1;
} else {
$page = 1;
}
// Сколько всего получится страниц
$cnt_pages = ceil( $total / ITEMS_PER_PAGE );
if ( $page > $cnt_pages ) $page = $cnt_pages;
// Начальная позиция
$start = ( $page - 1 ) * ITEMS_PER_PAGE;
# ========== /Постраничная навигация =============== #
$db->Query("SELECT * FROM `db_mag` ORDER BY `id` DESC LIMIT ".$start.", ".ITEMS_PER_PAGE);
if($db->NumRows() > 0){
while($mag = $db->FetchArray()){
?>
<table align="left" cellspacing="5" cellpadding="5" border="1" width="99%">
<tr>
<td>№<?=$mag["id"];?></td>
<td><?=$mag["name"];?></td>
<td>Дата публикации: <?=date("d.m.Y",$mag["date_add"]); ?> в <?=date("H:m:s",$mag["date_add"]); ?></td>
</tr>
<tr>
<td colspan="3"><img src="/uploads/<?=$mag['img'];?>" width="" height="35%" > <?php $desc=$mag["description"]; echo substr("$desc", 0, 100)."..."; /* читаем с нулевого символа, до 100 и добавляем многоточие */ ?></td>
</tr>
<tr>
<td colspan="2"><a href="/magazin/buy/<?=$mag['id'];?>">Подробнее о товаре ...[/url]</td>
</tr>
</table>
<HR/>
<?php
}
}else echo "[br /]<center>Товаров нет!</center>";
# ========== Постраничная навигация =============== #
if ( $cnt_pages > 1 ){
echo '<div style="margin:1em 0"> Страницы: ';
// Проверяем нужна ли стрелка "В начало"
if ( $page > 3 )
$startpage = '<a href="/magazin/1"><<[/url] ... ';
else
$startpage = '';
// Проверяем нужна ли стрелка "В конец"
if ( $page < ($cnt_pages - 2) )
$endpage = ' ... <a href="/magazin/'.$cnt_pages.'">>>[/url]';
else
$endpage = '';
// Находим две ближайшие станицы с обоих краев, если они есть
if ( $page - 2 > 0 )
$page2left = ' <a href="/magazin/'.($page - 2).'">'.($page - 2).'[/url] | ';
else
$page2left = '';
if ( $page - 1 > 0 )
$page1left = ' <a href="/magazin/'.($page - 1).'">'.($page - 1).'[/url] | ';
else
$page1left = '';
if ( $page + 2 <= $cnt_pages )
$page2right = ' | <a href="/magazin/'.($page + 2).'">'.($page + 2).'[/url]';
else
$page2right = '';
if ( $page + 1 <= $cnt_pages )
$page1right = ' | <a href="/magazin/'.($page + 1).'">'.($page + 1).'[/url]';
else
$page1right = '';
// Выводим меню
echo $startpage.$page2left.$page1left.'<strong>'.$page.'</strong>'.$page1right.$page2right.$endpage;
echo '</div>';
}
# ========== /Постраничная навигация =============== #
}#Finish //echo "no cat";
}#Finish //echo "no bye";
}#Finish //echo "no show";
?>
</div>
<div class="clr"></div>
</center>
</div>
</div>
<div class="clr"></div></div><div class="clr"></div>[br /][br /]</div><div class="clr"></div>
</body>
</html>
Огромное спасибо за ответы!