Постарался в заголовке максимально точно объяснить суть, но не уверен что он правильно отоброжает суть. Ситуация в следующем, есть форма входа пользователя, которая работает через сессии. Все работает отлично, но мне нужно было что бы пользователь мог обновлять только свои данные и не имел доступ к чужим, у меня есть страница product.php и она отражает содержимое товара через GET. То есть если profile.php?id=1 то отражает содержимое первого товара и позволяет его изменять, и так же с id=2 второй товар и так далее. Для того что бы нельзя было изменить url вручную и редактировать товар который принадлежит другому пользователю (Все товары в одной таблице бд) я сделал поле shopid которое связано с id пользователя, и на странице с редактирования товара реализовал такой код: Код (Text): <?php session_start(); include "connect.php"; $id = $_SESSION['id']; $productid = $_GET['id']; $product = mysqli_query($connection, "SELECT * FROM `product` WHERE `id` = '$productid'"); $product_array = mysqli_fetch_array($product); $shopid = $product_array['shopid']; $category = mysqli_query($connection, "SELECT * FROM `product_category` WHERE `shopid` = '$shopid'"); if($_SESSION['id']){ if($product_array['shopid'] == $id){ echo ' <div class="center"> <div class="top"> <a href="#">Сообщения</a><a href="#">Товары</a><a href="#">Общая информация</a><a href="#">настройки</a> </div> <div class="box"> <form action="redact-product.php" method="post"> <b>Название товара</b> <input class="name" type="text" name="name" value="' . $product_array['name'] . '"></input><br><br> <b>Описание товара</b> <textarea class="info" type="text" name="info" value="' . $product_array['info'] . '"></textarea><br><br> <b>Цена</b> <input class="price" type="text" name="price" value="' . $product_array['price'] . '"></input> <b>Старая цена</b> <input class="sale" type="text" name="sale" value="' . $product_array['sale'] . '"></input><br><br> <center> <div class="photo"> <b>Основное фото</b><br> <img class="redact" src="' . $product_array['avatar'] . '"></img><br> <input class="photo" type="text" name="avatar" value="' . $product_array['avatar'] . '"></input> </div> <div class="photo"> <b>Второе фото</b><br> <img class="redact" src="' . $product_array['photo1'] . '"></img><br> <input class="photo" type="text" name="photo1" value="' . $product_array['photo1'] . '"></input> </div> <div class="photo"> <b>третье фото</b><br> <img class="redact" src="' . $product_array['photo2'] . '"></img><br> <input class="photo" type="text" name="photo2" value="' . $product_array['photo2'] . '"></input> </div> <center><br> <b>Выберите категорию</b> <select name="catecory"> <option value=" ">Без категории</option>'; while($category_array = mysqli_fetch_array($category)){ echo '<option value="' . $category_array['id'] . '">' . $category_array['name'] . '</option>'; } echo ' </select><br><br><br> <input class="id" type="text" name="id" value="' . $product_array['id'] . '"></input> <input class="id" type="text" name="id" value="' . $product_array['shopid'] . '"></input> <input class="submit" type="submit" value="Обновить"> </form> </div> </div>'; }else{ echo 'У вас нет доступа'; } }else{ echo 'Доступ закрыт'; }?> Все работает прекрасно, если id пользователя не совпадает с полем shopid у товара то он видит соответствующее сообщение, а если совпадает он видит форму с редактированием. Но беда в том что когда форма заполнена и мы ее отправляем на страницу обработчик, выходит сообщение о том что доступ запрещен, и хотя страница другая и там нет таких условий (Обработчик просто обновляет все поля у товара с id который был получен методом POST) То есть сообщение берется не со страницы обработчика, а с той страницы где у меня форма ввода, я полагаю что каким то образом накосячил и передаю это условие в сессии, а оно мне не нужно, ведь проверку доступа мы прошли уже на предыдущем этапе и чужой товар не смогли бы отправить обработчику на UPGRADE. Пожалуйста, посмотрите код, подскажите что тут не так работает.
У меня даже слов нет, что бы повежливее объяснить на сколько вы не правы. @German, я конечно понимаю, что порог вхождения в РНР очень низкий, но ответьте мне на вопрос, почему человек вчера первый раз написавший <?php echo "Привет, мир!"; ?> сегодня уже берётся за изготовление интернет магазина? Даже не принимая во внимание SQL-инъекции, ваш код мягко говоря "не в транду". Для написания интернет магазина знаний необходимо вагон и маленькую тележку, и речь не о базовых знаниях (а сейчас именно их вам не хватает). Что вы хотите прочитать на форуме задавая подобный вопрос, что бы кто-то перепечатал из книги 200-300 страниц печатного текста, для того что бы у вас хоть что-то устаканилось в голове? P.S. я не злой
Да, да. Злодей) Я уже разобрался в чем дело, дело в том что я в форме указал путь redact.php и бразузер просто добавил это к текущему адресу, я заменил на абсолютный путь и все заработало. И кстати, я не пишу интернет магазин для выкладывания его в сеть, я учусь. Практическое обучение мне нравится больше. Я придумал что хочу сделать и делаю. Про SQL-инъекции я знаю, но пока не добрался до них, да и не нашел хорошего материала, если можете посоветовать что почитать, буду рад.
Этого мало. Во первых всё уже давно придумано. Во вторых даже если хочется придумывать самому, то делать это надо правильно, а ты делаешь не так как надо, а как получится и радуешься, а в итоге правильного варианта ты можешь никогда и не узнать. Теория без практики - это хорошие знания. Практика без теории - это никому не нужный говнокод. Выбирай золотую середину - практика после основательного изучения теории.
На каком таком пред. этапе? При отображении формы по GET что ли? ЩА буду злорадствовать Авторизацию нужно делать и по POST. Более того, не мешало бы связать GET и POST каким-нибудь CSRF-токеном Книжки называть не буду, вы все равно читать их не умеете.