Всем привет, есть две таблицы связанные между собой SHOP TICKETS каким образом можно вносить и вытаскивать данные одновременно в две связанные таблицы? суть в том, чтоб юзер выбрал свою точку и отправил заявку, а я потом ее прочитал. есть вот такое выпадающее меню, но оно не выдает данных PHP: <select name="shop"> <option value="0">Выберите магазин</option> <? $link= new mysqli('localhost', 'root', 'root', 'new_db'); $sql= 'SELECT name FROM shop'; $res = mysqli_query($link, $sql); while($row = mysqli_fetch_assoc($res)){ ?> <option value="<?=$row['name']?>"></option> <? } ?> </select>
Вставка – INSERT, при этом лучше использовать подготовленные запросы. И зачем тогда вносить в SHOP? Хотите редактировать состав магазинов своим софтом? Пустые option Совсем что ли не сечете? Тогда переносите тему во фриланс. --- Добавлено --- Имя как раз в тексте option должно быть, а не в атрибуте value --- Добавлено --- P.S. Пихать работу с БД между тегами – полнейший отстой. И нет проверки ошибок.
я пока только учусь и делаю это по большей части для себя и если получится, то применю в своей сфере деятельности, посоветовался с человеком, он сказал, что всегда создаются две таблицы, связываются индексами. и поэтому и всплыл вопрос в разделе "php для новичков" как реализовать выпадающее меню с именами магазинов, чтоб вносить в две таблицы заявки и потом их просматривать. С выпадающим меню разобрался, спасибо
Еще раз. У вас таблица заявок одна. Именно в нее нужно вносить заявки. SHOP – вспомогательная таблица в данном случае. По ней вы обеспечиваете целостность данных (автоматом, как вам показали в пред. теме, или вручную, т.е. при помощи доп. кода).
я вас услышал, над таблицей и связями поработал, пришел к связи один ко многим, получилось следующее SHOP TICKETS СВЯЗЬ Далее как я понимаю, нужно при помощи SELECT вытащить из таблицы TICKETS id_shop и присвоить ему name из таблицы SHOP для человеческого вида в выпадающем меню, верно? и если да, то как примерно должно выглядеть условие, чтоб было понимание как это делается
Для «человеческого вида» имя в текст option заносится. А серверу передается id-шник магаза. Мускул сам будет проверять его соответствие имеющимся магазинам, благодаря явно определенной связи.
не могу понять логики построения выражения, то есть как оно должно выглядеть PHP: <?php $link=mysqli_connect('localhost', 'admin', 'pass', 'new_db') or die(mysqli_error() .$link); $sql=('SELECT name FROM shop'); $result=mysqli_query($link, $sql); ?> <select name='name'> <?php while($name = mysqli_fetch_assoc($result)); ?> <option><?=$name['name']?></option> <?php endwhile?> </select> таким образом вытаскиваю имя из базы, а как потом передать его в виде id ума не приложу, можно какой-то пример? не обязательно мой, просто чтоб понять как дальше ковырять все это действие если в option value добавить id это поможет? HTML: <option value="<?=$name['id']?>"><?=$name['name']?></option>
с выпадающим списком разобрались, теперь другой вопрос возник, есть форма, которая вносит данные в таблицу, до этого работала, но теперь говорит, что id_shop не может быть пустым, вот собственно сама форма PHP: <?php $dsn = "mysql:host=localhost;dbname=new_db;charset=utf8"; $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]; $pdo = new PDO($dsn, 'admin', 'pass', $options); $magz = $_POST['id_shop']; $contact = $_POST['contacts']; $problem = $_POST['problem']; $data = $_POST['data']; $stmt = $pdo->prepare("INSERT INTO tickets (id_shop, contact, problem, data) VALUES (:id_shop, :contact, :problem, :data)"); $stmt->bindParam(':id_shop', $magz); $stmt->bindParam(':contact', $contact); $stmt->bindParam(':problem', $problem); $stmt->bindParam(':data', $data); $falg = $stmt->execute(); ?>
Вам нужно понять, как работают формы. Иначе так и будете топтаться на ровном месте. --- Добавлено --- Вот это муть: PHP: $magz = $_POST['id_shop']; $contact = $_POST['contacts']; $problem = $_POST['problem']; $data = $_POST['data']; Нужно проверять наличие необходимых параметров и не переприсваить без надобности.
понял косяк и исправил, данные вносятся корректно, ошибка была как в sql запросе-не был указан id_shop при выборке из базы, а так же не верно указан параметр name в select, вот как теперь это выглядит PHP: <?php $link=mysqli_connect('localhost', 'admin', 'pass', 'new_db') or die(mysqli_error() .$link); $sql=('SELECT name, id_shop FROM shop'); $result=mysqli_query($link, $sql); ?> <select name="id_shop"> <?php while($name = mysqli_fetch_assoc($result)); ?> <option value="<?=$name['id_shop']?>"><?=$name['name']?></option> <?php endwhile?> </select> теперь вопрос другой, каким образом лучше подгружать картинки к заявкам- с хранением непосредственно в базе mysql или же где-то в папке на сервере? вот тут не понял вас, разъясните если не трудно?
Почти «все нормальные люди» хранят файлы в ФС, а доп. инфу о них в БД. Ту же привязку к заявкам нужно где-то хранить. Еще одно имя файла картинки можно хранить в самой заявке. И то, если картинки прикрепляются не часто, получается почти «бесполезное» поле. Речь о POST-параметрах. Кто-то может сделать POST-запрос напрямую без какого-то параметра или пользователь может стереть какое-то поле в форме (через инструменты Web-разраба в браузере). В результате ваш скрипт-обработчик начнет глючить. Норм. обработка всех входных параметров – основа Web-разработки. И Шо у вас за прикол с использованием разных расширений для работы с БД? Мускулай если что тоже поддерживает подготовленные выражения --- Добавлено --- P.S. Только сейчас заметил еще один прикол в старт. посте. Шо за id_ticket в SHOP?!
подразумевается, что ко многим заявкам будет идти прикрепление изображения для видения полноты картины проблемы и понимания объема работ, так что без этого поля никак вы имеете ввиду фильрацию вводимых данных, чтобы кул хацкер инъекцию не бахнул? я пока только учусь и это планируется ввести в полу-боевою работу, само собой все будет обновляться и дописываться не раз, пока что пытаюсь довести до рабочего состояния хоть как-то, а потом уже с чувством тактом и расстановкой так сказать допиливать
Я имею в виду проверку наличия того, что используете. Тут любой мало-мальски подкованный юзер может завалить ваш сайт. О хакерах и речи нет. Есть минимум, который нужно соблюдать при разработке Web-приложений. Без него пускать ваши поделки в прод опасно, позорно и т.п. --- Добавлено --- В общем учитесь! Желаю успехов! --- Добавлено --- P.S. Проверять наличие/тип/формат можно через ф-ции фильтрации пыха, но не обязательно именно через них.
благодарю за помощь, осталась буквально пара вопросов проверку этих данных можно сделать в уже имеющейся форме или для каждой проверки лучше сделать свою и подключать через include? и если каждую отдельно подключать то к index'y или к форме?