[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Работа с формой и базой данных
Glomen
Есть код

<?php




//соединение с базой данных при помощи функции mysql_connect()
//в аргументах функции укажите имя сервера, логин и пароль.

$db = mysql_connect("localhost","root","");
//функция mysql_select_db() выбирает текущую
//базу данных с именем "test"

mysql_select_db("bsm_demo" ,$db);
//функция mysql_query() выполняет запрос на выборку данных
//результирующий набор данных хранится в переменной $sql

$sql = mysql_query("SELECT * FROM lib" ,$db);
//после получения данных начнём формирование HTML-таблицы
echo ("<table cellspacing='2' cellpadding='2' border='1' width='100%'>");
//выводим строку заголовков
echo ("<tr><td>Статус</td><td>Название книги</td><td><br _moz_editor_bogus_node='on'></td></tr>");
//функция mysql_fetch_row() извлекает одну строку из результата
//и сохраняет её в массиве $tablerows

while ($tablerows = mysql_fetch_row($sql))
{
//теперь в цикле для каждой полученной строки сделаем вывод
//$tablerows[1] соответствует полю "status"
//$tablerows[2] соответствует полю "name"

$list="<select name='stat' size='1'><option value='$tablerows[1]' SELECTED>В наличии</option><option value='$tablerows[1]'> Отсутствует </option></select>";

echo("<tr><td width='50'");
if ($tablerows[1]>0)
echo ("class='n'");
else
echo ("class='y'");
echo ("></td><td>$tablerows[2]</td><td align='right'>$list</td></tr> ");
}
echo "</table>";
//закрытие соединение (рекомендуется)
mysql_close($db);

?>


Данный код выводит данные из таблицы
id | status | name

Подскажите как реализовать:
При генерации таблицы в php select форма соответствовала статусу
В наличии / Отсутствует

При смене в select формы происходила запись значения в базу к нужной книге
0 - В наличии
1 - Отсутсвует



данный скрипт для самообучения, так что за код не пинайте строго =)



Спустя 13 минут, 23 секунды (10.11.2010 - 14:43) Sanchopansa написал(а):
ну для удобства лучше юзай
 while ($tablerows = mysql_fetch_assoc($sql))

тогда у тебя на выходе будет ассоциативный массив..
и можно будет обращаться к данным так
$tablerows['name']

вместо
$tablerows[2]


чтоб не менять сильно твой код можно сделать так.. но совсем правильно
$list=($tablerows[1])?"<select name='stat' size='1'><option value='$tablerows[1]' SELECTED>В наличии</option><option value='$tablerows[1]'> Отсутствует </option></select>":"<select name='stat' size='1'><option value='$tablerows[1]'>В наличии</option><option value='$tablerows[1]' selected> Отсутствует </option></select>";


а что по поводу записи при смене то отлавливай событие у селекта onchange и отправляй форму

Спустя 38 минут, 11 секунд (10.11.2010 - 15:22) Glomen написал(а):

$list=($tablerows[1])?"<form name='form_name' aсtion='insert_stat.php' method='post'><select onChange='document.forms['form_name'].submit()' name='stat' size='1'><option value='$tablerows[1]' SELECTED>Отсутствует</option><option value='$tablerows[1]'> В наличии </option></select>":"<select onChange='document.forms['form_name'].submit()' name='stat' size='1'><option value='$tablerows[1]'> Отсутствует</option><option value='$tablerows[1]' selected> В наличии </option></select></form>";

Вот делаю так , вроде должно быть правильно.

Но как я понимаю нужно увязывать статус книги с ее id ? Иначе нельзя будет записать изменения в таблицу.

Спустя 10 минут, 57 секунд (10.11.2010 - 15:33) Sanchopansa написал(а):
ну нужно сделать в документе форму.. а также в первом селекте тоже добавь яваскрипт на onchange
и нада написать функцию на яваскрипте для отправки формы.. типа так

function sendForm(id)
{
var form = document.getElementById('myForm');
form.id = id;
form.submit();
}


а ХТМЛ типа такого :
<form action="" id="myForm" method="POST">
тут таблица твоя
<input type="hidden" name="id" />
</form>


Спустя 3 часа, 4 минуты, 36 секунд (10.11.2010 - 18:37) Glomen написал(а):
Вот что наколякал

<head>
<
script type="text/javascript">
function sendForm(id)
{
var form = document.getElementById('form_name');
form.id = id;
form.submit();
}
</script>

</
head>
<?php
//соединение с базой данных при помощи функции mysql_connect()
//в аргументах функции укажите имя сервера, логин и пароль.

$db = mysql_connect("localhost","root","");
//функция mysql_select_db() выбирает текущую
//базу данных с именем "test"

mysql_select_db("bsm_demo" ,$db);
//функция mysql_query() выполняет запрос на выборку данных
//результирующий набор данных хранится в переменной $sql

$sql = mysql_query("SELECT * FROM lib" ,$db);
//после получения данных начнём формирование HTML-таблицы
echo ("<form action='' id='form_name' method='POST'>");
echo ("<table cellspacing='2' cellpadding='2' border='1' width='100%'>");
//выводим строку заголовков
echo ("<tr><td>Статус</td><td>Название книги</td><td><br _moz_editor_bogus_node='on'></td></tr>");
//функция mysql_fetch_row() извлекает одну строку из результата
//и сохраняет её в массиве $tablerows

while ($tablerows = mysql_fetch_row($sql))
{
//теперь в цикле для каждой полученной строки сделаем вывод
//$tablerows[1] соответствует полю "status"
//$tablerows[2] соответствует полю "name"

$list=($tablerows[1])?"<form name='form_name' aсtion='insert_stat.php' method='post'><select onChange='document.forms['form_name'].submit()' name='stat' size='1'><option value='$tablerows[1]' SELECTED>Отсутствует</option><option value='$tablerows[1]'> В наличии </option></select>":"<select onChange='document.forms['form_name'].submit()' name='stat' size='1'><option value='$tablerows[1]'> Отсутствует</option><option value='$tablerows[1]' selected> В наличии </option></select></form>";
echo("<tr><td width='50'");
if ($tablerows[1]>0)
echo ("class='n'");
else
echo ("class='y'");
echo ("></td><td>$tablerows[2]</td><td align='right'>$list</td></tr> ");
}
echo "</table>";
echo " <input type='hidden' name='id' /></form>";
//закрытие соединение (рекомендуется)
mysql_close($db);

?>


Теперь только осталось написать запрос для апдейта в базе значений ?
Просто меняю значения в select, а он никак не реагирует, хотя бs должен бросать на файл, ан нет.

Спустя 3 часа, 13 минут, 46 секунд (10.11.2010 - 21:51) Sanchopansa написал(а):
зачем ты делаешь две формы?
 echo ("<form action='' id='form_name' method='POST'>");

м тут форму
$list=($tablerows[1])?"<form name='form_name' aсtion='insert_stat.php' method='post'><select onChange='document.forms['form_name'].submit()' name='stat' size='1'><option value='$tablerows[1]' SELECTED>Отсутствует</option><option value='$tablerows[1]'> В наличии </option></select>":"<select onChange='document.forms['form_name'].submit()' name='stat' size='1'><option value='$tablerows[1]'> Отсутствует</option><option value='$tablerows[1]' selected> В наличии </option></select></form>";
echo("<tr><td width='50'");


вот короче тебе пример:
файл index.php
<script type="text/javascript">
function
send (id)
{
var form = document.getElementById('form1');
form.id.value = id;
form.submit();
}
</script>
<form
action="add.php" id="form1" method="POST">
<select
name="select1" onchange="send(1);">
<option
value="1" selected>определен</option>
<option
value="0">не определен</option>
</select>

<select
name="select2" onchange="send(2);">
<option
value="1">определен</option>
<option
value="0" selected>не определен</option>
</select>
<input
type="hidden" name="id" />
</form>

и add.php
$id = $_POST['id'];
$val = $_POST['select'.$id];

echo 'ID = ' . $id . ' Select value = ' . $val;

Спустя 1 день, 13 часов, 39 минут, 19 секунд (12.11.2010 - 11:30) Glomen написал(а):
Все запутался окончательно =) Решил упростить и сделать отправку кнопкой.
Вот что получилось
index.php
<?php
//соединение с базой данных при помощи функции mysql_connect()
//в аргументах функции укажите имя сервера, логин и пароль.

$db = mysql_connect("localhost","root","");
//функция mysql_select_db() выбирает текущую
//базу данных с именем "test"

mysql_select_db("bsm_demo" ,$db);
//функция mysql_query() выполняет запрос на выборку данных
//результирующий набор данных хранится в переменной $sql

$sql = mysql_query("SELECT * FROM lib" ,$db);
//после получения данных начнём формирование HTML-таблицы
echo ("<form name='form_name' aсtion='insert_stat.php' method='post'>");
echo ("<table cellspacing='2' cellpadding='2' border='1' width='100%'>");
//выводим строку заголовков
echo ("<tr><td>Статус</td><td>Название книги</td><td><br _moz_editor_bogus_node='on'></td></tr>");
//функция mysql_fetch_row() извлекает одну строку из результата
//и сохраняет её в массиве $tablerows

while ($tablerows = mysql_fetch_assoc($sql))
{
//теперь в цикле для каждой полученной строки сделаем вывод
//$tablerows[status] соответствует полю "status"
//$tablerows[name] соответствует полю "name"

$list=($tablerows[status])?"<select onChange='document.forms['form_name'].submit()' name='stat' size='1'><option value='$tablerows[status]' SELECTED>Отсутствует</option><option value='$tablerows[status]'> В наличии </option></select>":"<select onChange='document.forms['form_name'].submit()' name='stat' size='1'><option value='$tablerows[status]'> Отсутствует</option><option value='$tablerows[status]' selected> В наличии </option></select>";
echo("<tr><td width='50'");
if ($tablerows[status]>0)
echo ("class='n'");
else
echo ("class='y'");
echo ("></td><td>$tablerows[name]</td><td align='right'>$list</td></tr> ");
}
echo "</table>";
echo " <input type='submit' value='ВВОД'></form>";
//закрытие соединение (рекомендуется)
mysql_close($db);

?>


insert_stat.php
<?php
/* Соединяемся с базой данных */
$hostname = "localhost"; // название/путь сервера, с MySQL
$username = "root"; // имя пользователя (в Denwer`е по умолчанию "root")
$password = ""; // пароль пользователя (в Denwer`е по умолчанию пароль отсутствует, этот параметр можно оставить пустым)
$dbName = "bsm_demo"; // название базы данных

/* Таблица MySQL, в которой хранятся данные */

$table = "lib";

/* Создаем соединение */
mysql_connect($hostname, $username, $password) or die ("Не могу создать соединение");

/* Выбираем базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die (mysql_error());

/* Если была нажата кнопка редактирования, вносим изменения */
if(@$submit_edit) {
$query = "UPDATE $table SET status='$status' WHERE name='$name'";
/* Выполняем запрос. Если произойдет ошибка - вывести ее. */
mysql_query($query) or die (mysql_error());
}
/* Закрываем соединение */
mysql_close();

/* Выводим ссылку возврата */
echo ("<div style=\"text-align: center; margin-top: 10px;\"><a href=\"index.php\">Вернуться назад</a></div>");

?>


Все тихо, не работает ничего

Спустя 5 минут, 16 секунд (12.11.2010 - 11:35) Sanchopansa написал(а):
Что значит все тихо? форма не отправляется при выборе в селекте?

И покажи мне где ты в этом файле получаешь данные от формы?
/* Соединяемся с базой данных */
$hostname = "localhost"; // название/путь сервера, с MySQL
$username = "root"; // имя пользователя (в Denwer`е по умолчанию "root")
$password = ""; // пароль пользователя (в Denwer`е по умолчанию пароль отсутствует, этот параметр можно оставить пустым)
$dbName = "bsm_demo"; // название базы данных

/* Таблица MySQL, в которой хранятся данные */

$table = "lib";

/* Создаем соединение */
mysql_connect($hostname, $username, $password) or die ("Не могу создать соединение");

/* Выбираем базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die (mysql_error());

/* Если была нажата кнопка редактирования, вносим изменения */
if(@$submit_edit) {
$query = "UPDATE $table SET status='$status' WHERE name='$name'";
/* Выполняем запрос. Если произойдет ошибка - вывести ее. */
mysql_query($query) or die (mysql_error());
}
/* Закрываем соединение */
mysql_close();

/* Выводим ссылку возврата */
echo ("<div style=\"text-align: center; margin-top: 10px;\"><a href=\"index.php\">Вернуться назад</a></div>");

Спустя 36 минут, 52 секунды (12.11.2010 - 12:12) Glomen написал(а):
Да данные не уходят из формы, видимо мож я что то с путями напутал к файлу который должен принимать данные, но они лежат в 1 каталоге.

Спустя 1 час, 43 минуты, 2 секунды (12.11.2010 - 13:55) inpost написал(а):
Glomen
Форму и скрипт-обработчик делай в одном файле, логика такая, в начале проверяется, есть ли $_POST, если нету - выводится форма, если есть - обрабатывается файл.
Путь пишется так: <form action="" method="post">
Теперь и с путями никогда проблем не будет, и скрипт легко импортируется под другие сайты.

echo в скобки брать не надо: echo "ТЕКСТ";, а ещё лучше использовать одинарные кавычки, в них отлично можно додерживаться стандартов ХТМЛ: echo '<span class="beer" id="beer">';

Спустя 1 день, 23 минуты, 3 секунды (13.11.2010 - 14:18) Glomen написал(а):
Все запутался окончательно. Уже и форму пытался переделать и как-нибудь составить форму по другому, что бы можно было проще менять статус.

Помогите написать обработчик формы, что бы можно было при изменении селекта выставлять статус книги.

<?php
//соединение с базой данных при помощи функции mysql_connect()
//в аргументах функции укажите имя сервера, логин и пароль.

$db = mysql_connect("localhost","root","");
//функция mysql_select_db() выбирает текущую
//базу данных с именем "test"

mysql_select_db("bsm_demo" ,$db);
//функция mysql_query() выполняет запрос на выборку данных
//результирующий набор данных хранится в переменной $sql

$sql = mysql_query("SELECT * FROM lib" ,$db);
//после получения данных начнём формирование HTML-таблицы
echo ("<form action='' id='form1' name='stat' method='POST'>");
echo ("<table cellspacing='2' cellpadding='2' border='1' width='100%'>");
//выводим строку заголовков
echo ("<tr><td>Статус</td><td>Название книги</td><td><br _moz_editor_bogus_node='on'></td></tr>");
//функция mysql_fetch_row() извлекает одну строку из результата
//и сохраняет её в массиве $tablerows

while ($tablerows = mysql_fetch_assoc($sql))
{
//теперь в цикле для каждой полученной строки сделаем вывод
//$tablerows[status] соответствует полю "status"
//$tablerows[name] соответствует полю "name"

$list=($tablerows[status])?"<select name='select1' onchange='send(1);' size='1'><option name='a1' value='$tablerows[status]' SELECTED>Отсутствует</option><option value='$tablerows[status]'> В наличии </option></select>":"<select name='select2' onchange='send(2);' size='1'><option value='$tablerows[status]'> Отсутствует</option><option value='$tablerows[status]' selected> В наличии </option></select>";
echo("<tr><td width='50'");
if ($tablerows[status]>0)
echo ("class='n'");
else
echo ("class='y'");
echo ("></td><td>$tablerows[name]</td><td align='right'>$list</td></tr> ");
}
echo "</table>";

echo " <input type='button' value='Изменить' name='id' /></form>";
//закрытие соединение (рекомендуется)
mysql_close($db);

?>


Вот что отображается

user posted image

Структура базы

lib ===

id | name | status

Нужно по изменению селекта на форме изменять значение статуса книги в базе

0 - Доступен
1 - Не доступен

Спустя 1 час, 4 минуты, 54 секунды (13.11.2010 - 15:23) inpost написал(а):
надо: input type="submit" , button используется для работы с JS как кнопка, которая вызывает какой-то скрипт.

Спустя 2 часа, 4 минуты, 33 секунды (13.11.2010 - 17:28) Glomen написал(а):
Да, что то я затупил =) все данные начались передаваться в скрипт.

А вот как передать значения Списков выпадающих ?

Я понимаю что нужно сравнить id или name колонку и по ней вставить status

Но вот тут список динамически формируется, как из него достать значение ?

$list=($tablerows[status])?"<select name='select1' size='1'><option name='a1' value='1' SELECTED>Отсутствует</option><option value='0'> В наличии </option></select>":"<select name='select2' ' size='1'><option value='1'> Отсутствует</option><option value='0' selected> В наличии </option></select>";


то есть мне нужно что бы при нажатии кнопки Изменить скрипт собирал значения с select_ов и названия книг, передавал их скрипту для занесения в базу, а скрипт принимал значения и передавал в базу значения статуса книги, сравнивая его с именем книги, мои мысли в верном направлении идут ?

Спустя 1 день, 18 часов, 20 минут, 17 секунд (15.11.2010 - 11:48) Glomen написал(а):
так вроде разобрался немного.
$list=($tablerows[status])?"<select name='select_$tablerows[id]' size='1'><option name='a1' value='1' SELECTED>Отсутствует</option><option value='0'> В наличии </option></select>":"<select name='select_$tablerows[id]' size='1'><option value='1'> Отсутствует</option><option value='0' selected> В наличии </option></select>";

Так формирую список значений.

Если проверить GET то получаю
add.php?select_1=1&select_2=0&select_3=0&select_4=0&select_5=0&select_6=1&select_7=1&select_8=1&select_9=1&select_10=0&select_11=1&select_12=1&select_13=0&select_14=1&select_15=1&select_16=1&select_17=1&select_18=0&select_19=0


Значит значения передаются. Подскажите как составить запрос в базу, что бы перенести туда значения.

Спустя 2 часа, 36 минут, 9 секунд (15.11.2010 - 14:24) inpost написал(а):
Передаёшь POST, проверяешь:
echo "<pre>";
print_r($_POST);
echo "</pre>";


Вставка в БД... ищи в гугле, вот один из примеров работы:
http://php.su/mysql/?functions

Мини пример:
mysql_query("INSERT INTO `table` SET
`select1`='"
.$select1."',
`select2`='"
.$select2."'
"
);

Спустя 2 часа, 28 минут, 57 секунд (15.11.2010 - 16:53) Glomen написал(а):
Да так и сделал, но если количество книг увеличиться, то придется править в ручную запрос.

Спустя 2 дня, 17 часов, 15 минут, 33 секунды (18.11.2010 - 10:09) trish написал(а):
у меня другая проблема: есть 2 таблицы в БД - region (поля - region, name) и cities (city, name, region). Надо чтоб формировался выпадающий список из регионов (<select>) и при выборе конкретного региона формировался список городов, соответствующий данному региону (т.е. чтоб region.region = cities.region).

<?

// соединение с базой

$conn = mysql_connect("localhost", "root", "");
mysql_select_db("mybase", $conn);

echo "<form method=post action=sel_f.php>";

// первый выпадающий список

$query = "select * from cms_region";
$cat = mysql_query($query,$conn);
if(!$cat) exit(mysql_error());
// Если имеется хотя бы одна запись
// формируем выпадающий список

if(mysql_num_rows($cat) > 0)
{
echo "<select name=id>";

while($catalog = mysql_fetch_assoc($cat))
{
if($catalog['region'] == $catalog['region']) $selected = "selected";
else $selected = "";
echo "<option value=$catalog[region] $selected>$catalog[name]</option>";
}
echo "</select>";
}


// Формируем второй выпадающий список


$query = "select * FROM cms_cities WHERE region='$catalog[region]'";


$prd = mysql_query($query);
if(!$prd) exit(mysql_error());
if(mysql_num_rows($prd) > 0)
{
echo "<select name=id2>";
while($product = mysql_fetch_assoc($prd))
{
echo "<option value=$product[region]>$product[name]</option>";
}
echo "</select> ";
}

// Конец HTML-формы
echo "<br> <input type=submit value=Go!></form>";
?>


не знаю как передать значения из одного списка в другой. Помогите, пожалуйста, я уже третий день пытаюсь разобраться. Пробовала и через javascript, но вот где ошибки - не вижу......

Спустя 3 часа, 3 секунды (18.11.2010 - 13:09) inpost написал(а):
Одно и то же каждый день! Со своими проблемами в свою тему.

Спустя 58 минут, 10 секунд (18.11.2010 - 14:07) trish написал(а):
а вот нашла то, что надо в теме
Страна>Регион>Город selectы Спасибо!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.