Здравствуйте! Столкнулся с проблемой: Необходимо сделать форму отправки данных в mysql. Есть форма, скрипт отправки данных в sql тоже имеется. Но нужно сделать так, чтобы в строку запроса вставлялись данные из формы. Как сделать, чтобы заполнив поля в форме и нажав кнопку "сохранить" данные занеслись в соответствующую таблицу базы данных? Заранее спасибо!
ну ты же отсылаешь какому-то скрипту данные, вот в нём и обрабатывай то что пришло из формы (в $_GET или $_POST это уже от тебя зависит) пусть есть 2 переменные в массиве $_POST: $_POST['one'] и $_POST['two'] после установления соединения с БД Код (PHP): <? $one=mysql_real_escape_string($_POST['one']); $two=mysql_real_escape_string($_POST['two']); $query="INSERT INTO `table` (`field_one`,`field_two`) VALUES ('$one','$two')"; mysql_query($query); ?> а тут читал?
Спасибо, что откликнулся! Я так и понял, что нужно передать данные скрипту... Просто не совсем понятно, почему не получается (свой код пока выкладывать не буду, может сам разберусь). Мне нужно понять, скрипт должен быть размещен в другом файле и форма должна открыть этот файл и передать значения в виде переменных, или есть возможность запустить скрипт, написанный в том же файле, что и код формы? Я на форуме встретил такой код: Код (Text): <?php include("temp.php"); ?> <html> <head> <meta http-equiv="Content-Language" content="en" /> <meta name="GENERATOR" content="Zend Studio" /> <meta http-equiv="Content-Type" content="text/html; charset=cp1251" /> <title>test</title> </head> <body bgcolor="#FFFFFF" text="#000000" link="#FF9966" vlink="#FF9966" alink="#FFCC99"> <form name="form1" method="post" action=""> <input type="checkbox" name="checkbox[1]" value="1"> <input type="checkbox" name="checkbox[2]" value="2"> <input type="checkbox" name="checkbox[3]" value="3"> <br> <input type='submit' value=' Послать '> </form> </body> </html> <?php if (!isset($_POST['checkbox'])) die(); $arr=array_map("intval",$_POST['checkbox']); $query.="WHERE id in (".implode(",",$arr).")"; echo $query; ?> Я ошибаюсь, или здесь в одном файле указан и код формы и код скрипта отправки данных в базу?
слова из песни: "Пусть всё будет так как ты захочешь, пусть твои глаза, как прежде горят... Это как душе угодно, можно в одном файле, а можно и в бесконечно многих файлах. не совсем в базу, он просто выводит на экран что-то в этом духе: WHERE id in( on,,on ) на сколько мне не изменяют глаза, это лишь подготовительный момент (с выводом результата на экран). Очевидно в последующем должена идти строка: mysql_query( "тадам, тасям... $query;" ); ну и конечно строка echo $query в последствии коментируется...
Re: Форма отправки данных в базу mysql будет время, я выложу нормальный скрипт, ща пока не до него 8) это вовсе не сложно, просто очевидно всем тоже некогда 8) вот, нашел времечко: данный скрипт проверяет инфу и записывает в базу если такого пользователя ещё нет. +отправляет письмо, на указанный почтовый адрес. (и есче): функция DeleteSymbols() удалаяет из принятых значений, лишние символы, она здесь не описывается, потому что она подключена гораздо выше. PHP: <? echo "<TITLE>Игра Колония - Регистрация</TITLE>"; if ( !isset( $submit ) ) { echo " <font color=#AAAA00><form method="post" action="index.php?panel=$panel"> <br> <table border=0> <tr> <td>Ваше логин:<br><input type=text size=20 name="Login" class="fields"></td><td> </td> </tr> <tr> <td>Ваше пароль:<br><input type=text size=20 name="Password" class="fields"></td><td> </td> </tr> <tr valign=top> <td>Адрес (e-mail):<br><input type=text size=20 name="Email" class="fields"></td> </tr> <tr> <td><input name="submit" type="submit" value="Зарегистрироваться" class="fields"></td> </tr> </table> </form></font>"; } else { if ( $Login != "" && $Password != "" && $Email != "" ) { $Login = DeleteSymbols( $Login ); $Password = DeleteSymbols( $Password ); $Email = DeleteSymbols( $Email ); $date = substr( GetData(), 0, 8 ); if ( mysql_connect( $DBhost, $DBuser, $DBpassword ) ) { if ( mysql_select_db( $DBName ) ) { $flag = 0; if ( $result = mysql_query( "SELECT * FROM reg_users WHERE Login='$Login'" ) ) { while ( $row = mysql_fetch_assoc ( $result ) ) { $flag = 1; } } if ( $flag == 0 ) { $mess = "Вы или кто-то от Вашего имени произвели регистрацию в игре Колония, на сайте $gateway.\r\nLogin: $Login\r\nPassword: $Password\r\nСпасибо за регистрацию!.\r\n\r\nЕсли не Вы регистрировались в игре, то не отвечайте на это сообщение. Или напишите письмо администратору: $AdminEmail"; SendEmail( $Email, "Регистрация в игре Колония на сайте $gateway", $mess ); $attr = 0; if ( $Login == $AdminLogin ) $attr = 255; $Password = md5( "$Password" ); if ( mysql_query( "INSERT INTO reg_users VALUES( '', '$Login', '$Password', '$Email', '0', '$attr' );" ) ) { echo "<font color=#AAAA00>Регистрация прошла успешно, на ваш почтовый ящик было выслано уведомление. Для входа в игру необходимо перейти на <a href=$gateway>главную страницу</a>.</font>"; } else echo mysql_error(); } else { echo "<font color=#AAAA00>Пользователь с таким логином уже сущществует, вернитесь <a href=index.php?panel=registration>назад</a> и попробуйте заного.</font>"; } } } } else { echo "<font color=#AAAA00>Для регистрации необходимо заполнить все поля, вернитесь <a href=index.php?panel=registration>назад</a> и попробуйте заного.</font>"; } } ?>
ZZZubec, как-то этот скрипт... попахивает register_globals = On [sql]SELECT * FROM reg_users WHERE Login='$Login'"[/sql] ИМХО излишне, достаточно и одно поле проверить 35 строку вообще не понял зачем а что будет, если я после регистрации F5 нажму? и на последок, а вдруг где-нибудь понадобится добавить пару строк с header?
Люди добрые, четвертый день бьюсь, читаю мануалы, учебники, интернет... Нашел очень хороший пример: http://phpclub.ru/detail/article/phpintro. Но там описывается, как сделать запрос из одного файла, а результат получаем в другом. Это впринципе нормально, но хотелось узнать, как можно все сделать одним скриптом, написанным в одном файле. Это так, для общего развития Заранее спасибо, если кто поможет наглядным примером!
У меня форма отправки данных создается динамически, т.к. поля формы создаются на основе столбцов в таблице базы данных. Например в таблице 8 столбцов - в форме появляется 8 Текстовых полей, создаю 9 столбец в таблице - появляется 9 текстовых полей, и т.д. каждому полю присваивается имя, соответствующее имени столбца таблицы BD. Код (Text): <?php // Здесь подгружаем дизайн и переменные, необходимые для подключения к базе: include("header.php"); require_once("temp.php"); echo "$menusotr"; // Выводим заголовок таблицы: echo "<div align=center>"; echo "<b><font color=#C0C0C0>Список сотрудников компании</font><b><br><br>"; echo "<table border=2 cellpadding=4 bordercolordark=#000000 bordercolorlight=#87BEDC bgcolor=#FFFFFF style=\"border-collapse: collapse\">"; echo "<tr>"; $fields = mysql_list_fields("$db", "sotrudniki"); $columns = mysql_num_fields($fields); echo "<td background=images/head_td.gif height=41><b>Поля базы</td>"; echo "<td background=images/head_td.gif height=41><b>Данные</td></tr>"; for ($i = 1; $i < $columns; $i++) { $zagol = mysql_field_name($fields, $i); echo "<tr><td>$zagol</td><td><input type=text name=$zagol size=20></td></tr>"; } echo "<tr><td colspan=2><form method=\"submit\" action=\"adduser2.php\"><input type=\"submit\" value=\"Добавить в базу данных\" size=\"50\" name=\"B1\"></td></tr></tr>"; echo "</table>"; ?> Отсюда вопрос: Как сделать запрос к базе данных, если заранее не известно, сколько в ней столбцов и их название??? Код (Text): /* составить запрос для вставки информации о клиенте в таблицу */ $query = "INSERT INTO $userstable VALUES('$zagol1','$zagol2', '$zagol3' и т.д. )"; /* Выполнить запрос. Если произойдет ошибка - вывести ее. */ mysql_query($query) or die(mysql_error()); echo "Информация о вас занесена в базу данных."; Впринципе понятно, что нужно вставить код, который выдает количество и имена столбцов в базе, но как получить переменные с названием столбца и вставить их в запрос к базе?
Temeshov 1. 2. какое-то шаманство ты задумал, посмотри что даст запрос [sql]SHOW TABLE STATUS[/sql] но только зачем? ты ведь форму составляешь из определённой таблицы, её имя ты знаешь, так в чём проблема?
Нет, постойте! Никаких террористических актов делать не хотелось!!! База еще пригодится... Может я конечно что-то и шаманю, но только по неопытности. Напишу пример, чтобы лучше понять проблему: В базе данных есть таблица "users". Я (предположим) не знаю, сколько в ней столбцов и как они называются. Но мне нужно вывести форму для внесения данных в эти столбцы. Затем, при нажатии кнопки "Сохранить" данные из формы вставляются в соответствующие столбцы таблицы. Как сделать форму, в которой отображабтся все столбцы таблицы я знаю (код приводил выше). Я не могу понять, как сделать запрос: $query = "INSERT INTO users VALUES('$zagol1','$zagol2', '$zagol3' и т.д. )"; - здесь должны идти имена всех столбцов таблицы, например если в таблице базы данных есть три столбца с именами: 'famaliya','imya', 'otchestvo', то запрос должен выглядеть как $query = "INSERT INTO users VALUES('$famaliya','$imya', '$otchestvo')"; Но как сюда вставить эти данные???
ой, а где вы все берёте такую хорошую траву? это как? «тут помню, тут не понню» (с) получается. так же, как и при генерировании формы узнай количество и имена полей, потом циклом создай запрос: PHP: <?php // $list - массив с именами полей $query = 'INSERT INTO `users` VALUES ('; for($i=0;$i<count($list);$i++) $query.= "'".$_POST[$list[$i]]."',"; // если передаёшь методом GET, то замени на $_GET[$list[$i]] $query = substr($query,0,strlen($query)-1).')'; mysql_query($query); ?> удовлетворил любопытство? А теперь весь этот бред забудь! Ибо ересь. Ситуация высосана из пальца, если ты пишешь скрипт, то явно для каких-то целей => ознакомится с содержимым БД можно и заранее. Форму проще-простого написать ручками и предоставить пользователю, а не гонять ради это машину. Хотя, может у тебя идея такая, что пользователю для заполнения подсовывается одна, случайно выбранная из тысяч, форма, тогда, конечно, так и делай. А знаешь, что здесь самое неприятное? 1. как сгенерировать подписи к полям, что бы пользователь понял, что от него хотят? 2. а вот возьмёт и не совпадёт, то, что ввёл пользователь с разрядностью или типом полей, и как быть? так что попробуй лучше сам, руками написать форму и уже из полученных из неё данных делать запрос в таблицу, количество и насвания полей которой известны
Luge, спасибо за ответ! 1. Подписи к полям будут такие же, как и заголовки столбцов в таблице. 2. В данном случае все поля тектовые, поэтому особых проблем возникнуть не должно. Но над этим еще подумаю. Нет, я не собираюсь подсовывать одну из тысячи форм, просто идея была такая: Мы заливаем этот скрипт на определенный сервер. И сотрудник вводит в эту форму данные. Потом (через какое-то время) администратор (не я), захочет добавить в данную таблицу еще какой-нибудь столбец (например данные о детях), и нужно, чтобы сотруднику выводилась форма с новым полем "данные о детях". При этом php код не переписывался. Может ситуация и правда высасана из пальца, но по моему это было бы удобно. Не переписывать каждый раз код, если админу захочется добавить в базу дополнительный столбец.
Все сделал!!!! Ура. Спасибо всем! Файл: adduser.php Код (Text): <?php include("header.php"); require_once("temp.php"); global $host, $user, $password, $db; echo "$menusotr"; // Выводим заголовок таблицы: echo "<div align=center>"; echo "<b><font color=#C0C0C0>Список сотрудников компании</font><b><br><br>"; echo "<table border=2 cellpadding=4 bordercolordark=#000000 bordercolorlight=#87BEDC bgcolor=#FFFFFF style=\"border-collapse: collapse\">"; echo "<tr>"; $fields = mysql_list_fields("$db", "sotrudniki"); $columns = mysql_num_fields($fields); echo "<FORM ACTION=\"add_user.php\" METHOD=\"POST\">"; echo "<td background=images/head_td.gif height=41><b>Поля базы</td>"; echo "<td background=images/head_td.gif height=41><b>Данные</td></tr>"; for ($i = 1; $i < $columns; $i++) { $zagol = mysql_field_name($fields, $i) . "\n"; echo "<tr><td>$zagol</td><td><input type=text name=$zagol size=20></td></tr>"; } echo "<tr><td colspan=2><INPUT TYPE=\"submit\" VALUE=\"Отправить запрос!\"></td></tr></tr>"; echo "</table>"; ?> Файл add_user.php Код (Text): <?php require_once("temp.php"); global $host, $user, $password, $db; // Подключаемся к mysql серверу $link = mysql_connect($host, $user, $password); // Выбираем нашу базу данных mysql_select_db($db, $link); $fields = mysql_list_fields("$db", "sotrudniki"); $columns = mysql_num_fields($fields); $query = 'INSERT INTO `sotrudniki` VALUES (0,'; for ($i = 1; $i < $columns; $i++) { $zagol = mysql_field_name($fields, $i); $query.= "'".$_POST[$zagol]."',"; } $query = substr($query,0,strlen($query)-1).')'; mysql_query($query) or die(mysql_error()); include("header.php"); require_once("temp.php"); echo "$menusotr"; echo "<br><br><br><br>Информация о вас занесена в базу данных."; ?> Т.е. получилась универсальная форма добавления данных в любую таблицу базы данных. Все что нужно поменять, это имя таблицы (в данном случае это таблица sotrudniki). Кроме мнения, что это бред, еще есть замечания?
только если сделал как я последний раз написал, то проэкранировать $_POST не забудь, т.е. будет форма в которой перед полем будет пояснительная надпись famaliya? нет, ну ещё транслитом пользователь поймёт, а если твой скрипт будет на базе с полями, которые называютяся как-то вроде US_INF_FIRSTNAME, то что, будешь это пользователю выводить? ИМХО, если админ в состянии добавить поле в БД, то поправить форму и запрос ему труда уже не составит
Что значит "проэкранировать $_POST не забудь"??? Данные будут транслитом, но сейчас я хочу сделать так, чтобы эти данные менялись на русские названия (как в php nuke) заголовки заменяются на данные, содержащиеся в файле lang-russian.php Я понимаю, что у вас всех недоумение по поводу того, что админ может добавить поле в БД, но не может изменить форму запроса. Но такое может быть, по крайней мере у нас. Я уважаю вашу критику, но нам так надо. Спасибо.
Что-то у меня сегодня с логикой не то, получается, что (теоретически) не зная количества и названия полей создаётся форма и запрос, и одновременно с этим в lang-russian.php должны быть русские эквиваленты названиям таблицы, о веселуха. моё первое сообщение посмотри. И всё-таки прочитай http://phpfaq.ru/slashes, хотя наверное весь phpfaq
Я этот сайт себе в закладки уже поместил! Там очень много полезной информации, спасибо. Про экранирование понял. Вообще планируется подключить данный скрипт к базе в которой простые заголовки полей типа "imya", "otchestvo" и т.д. Про логику я уже думал, но ведь можно что-нибудь придумать? Когда придумаю - напишу.
Придумал следующее: Есть таблица в базе данных "russian", в ней два поля "eng" и "rus" соответственно. Заносим в таблицу "eng" имена полей таблиц базы данных, а в "rus" их русские названия. При выводе формы скрипт смортит таблицу "russian" и ищет там перевод, если не находит то выводит имя таблицы в транслите (проверено на практике - работает без проблем). Далее, в скрипте, который будет добавлять новые таблицы или новые поля в уже существующие таблицы, дописываем код, который будет спрашивать у пользователя имя нового поля в транслите и его русское название и добавлять эти значения в табл. "russian". Есть замечания? p.s. Данный код разрабатывается для внутреннего сайта компании, так что тысяч обращений в день не будет (всего 10-15 пользователей). Это для тех, кто считает, что я издеваюсь над базой данных.
Temeshov, это нормально, на самом деле. У меня есть надстройка над системой биллинга, там похожий принцип используется, для построения справочников автоматически — заголовку столбца и имени таблицы сопоставляется осмысленный русский эквалиент.
Есть еще несколько вопросов: В базе данных мы указываем всем полям определенные критерии, например максимальное количество символов или формат поля (текст, числа или дата, и т.д.). На данный момент меня интересует, как можно узнать какой тип данных необходим для ввода в данное поле и какое количество символов разрешено. Т.е. когда скрипт формирует "универсальную форму" отпраки данных, хотелось бы чтобы полям присваивались максимальные значения длинны Код (Text): echo"<input type=text name=test maxlength=13>"; Или если поле имеет числовые данные, то и в форму можно было бы ввести только числовые данные, в противном случае выдавалось бы предупреждение. И отдельная тема про формат даты! В базе данных дата хранится в виде ГГГГ-ММ-ДД, а мы все привыкли вводить дату как ДД.ММ.ГГГГ Как быть? В голову лезет только одна мысль: выводить три поля формы типа "введите день" "введите месяц" "введите год", а потом скрипт сам подставляет данные как надо, но это не удобно. Возникает ожидаемый вопрос "ЧТО ДЕЛАТЬ?"
тут уже на тему даты и mysql были дебаты [sql]SHOW COLUMNS FROM имя_таблицы[/sql] а у гугла спросить слабо?
У гугла? Да не слабо, есть много разной инфы, что получается ищу там... но я этот форум тоже через гугл нашел, вот и спарашиваю... За ссылку про даты, спасибо.