|
|
|
| Есть код ( суть проблемы описал внутри кода - чтобы было понятней)
<?php
include '../database/db_connect.php';
$result = mysql_query ("SELECT * FROM items LIMIT 5", $db);
/* Код - вывода значений из Базы данных в таблицу, и
выведение этих переменных в поле "input". Планирую так если
в input, внесены значения то все изминения сохраняются в
базу */
echo "<form action='' method='post'>";
while ($myrow = mysql_fetch_array ($result))
{
echo "
<table class='admin_table_items' >
<tr>
<td class='admin_table_items_td_title'><input name='title' value='$myrow[title]' type='text' /></td>
<td class='admin_table_items_td_number'><input name='id' value='$myrow[id]' type='text' /></td>
<td class='admin_table_items_td_number'><input name='Scout' value='$myrow[Scout]' type='text' /></td>
<td class='admin_table_items_td_number'><input name='Soldier' value='$myrow[Soldier]' type='text' /></td>
<td class='admin_table_items_td_number'><input name='Pyro' value='$myrow[Pyro]' type='text' /></td>
<td class='admin_table_items_td_number'><input name='Demoman' value='$myrow[Demoman]' type='text' /></td>
<td class='admin_table_items_td_number'><input name='Heavy' value='$myrow[Heavy]' type='text' /></td>
<td class='admin_table_items_td_number'><input name='Engineer' value='$myrow[Engineer]' type='text' /></td>
<td class='admin_table_items_td_number'><input name='Medic' value='$myrow[Medic]' type='text' /></td>
<td class='admin_table_items_td_number'><input name='Sniper' value='$myrow[Sniper]' type='text' /></td>
<td class='admin_table_items_td_number'><input name='Spy' value='$myrow[Spy]' type='text' /></td>
<td class='admin_table_items_td_number'><input name='the_weapons' value='$myrow[the_weapons]' type='text' /></td>
<td class='admin_table_items_td_number'><input name='the_hat' value='$myrow[the_hat]' type='text' /></td>
<td class='admin_table_items_td_number'><input name='the_other' value='$myrow[the_other]' type='text' /></td>
<td class='admin_table_items_td_number'><input name='set' value='$myrow[set]' type='text' /></td>
<td><img src='$myrow[image]'/></td>
<td class='admin_table_items_td_number'><input name='Slot' value='$myrow[Slot]' type='text' /></td>
<td class='admin_table_items_td_number'><input name='counter' value='$myrow[counter]' type='text' /></td>
</tr>
</table>";
}
echo
"
<input name='submit' class='admin_table_items_submit' type='submit' value='готово' />
<div class='clr'><div>
</form>
";
/* Все работает как надо, значения выводятся, я вношу
нужные значения и перенапрявляю их скрипту - и тут я незнаю
как сделать так чтобы все новые значения которые я ввел
соханялись в базе данных */
/* Как внести значения по одному знаю, скрипт ниже, а как в
несколько строк непонимаю */
$title = $_POST['title'];
$description = $_POST['id'];
$Scout = $_POST['Scout'];
$Soldier = $_POST['Soldier'];
$Pyro = $_POST['Pyro'];
$Demoman = $_POST['Demoman'];
$Heavy = $_POST['Heavy'];
$Engineer = $_POST['Engineer'];
$Medic = $_POST['Medic'];
$Sniper = $_POST['Sniper'];
$Spy = $_POST['Spy'];
$the_weapons = $_POST['the_weapons'];
$the_hat = $_POST['the_hat'];
$the_other = $_POST['the_other'];
$set = $_POST['set'];
$image = $_POST['image'];
$Slot = $_POST['Slot'];
$counter = $_POST['counter'];
$submit = $_POST['submit'];
/* Код - обновление параметров предметов */
if (isset($submit))
{
$resultADD = mysql_query ("UPDATE items SET title='Неумолимая сила' WHERE id=1", $db);
if ($resultADD) {echo "<br>Готово";} else {echo "<br>Ошибка";}
}
?>
|
| |
|
|
|
|
|
|
|
для: torxxx
(26.09.2011 в 08:54)
| | Просто через запятую указывайте значения в поле SET, я приведу обработку параметров и формирование UPDATE-запроса на примере двух параметров
<?php
...
/* Предотвращаение SQL-инъекции*/
$_POST['id'] = intval($_POST['id']);
if (!get_magic_quotes_gpc())
{
$_POST['title'] = mysql_escape_string($_POST['title']);
$_POST['Soldier'] = mysql_escape_string($_POST['Soldier']);
}
/* Код - обновление параметров предметов */
if (isset($submit))
{
$query = "UPDATE items
SET
title = '{$_POST['title']}',
Soldier = '{$_POST['Soldier']}'
WHERE id = {$_POST['id']}";
$resultUPDATE = mysql_query ($query, $db);
if ($resultUPDATE) {echo "<br>Готово";} else {echo "<br>Ошибка";}
}
?>
|
| |
|
|
|
|
 66.1 Кб |
|
|
для: cheops
(26.09.2011 в 09:57)
| | Спасибо за сообщение.
Но проблема вот в чем, вверху генерируется таблица (в цикле), пока есть строчки в базе данных, тоесть данные выводятся, пока в таблице items есть строки. В рамках одной строки мне понятно как вставить данные. Но у меня выводятся 5 строк (которые соответствуют параметрам выборки).
Дак вот я заполнил (исправил) нужные данные, нажал кнопку. И тут мне надо чтобы все внеслись в базу.
Прикрепил пример таблицы. | |
|
|
|
|
|
|
|
для: cheops
(26.09.2011 в 09:57)
| | Я так понимаю надо создать ассоциативный массив и вносить в него данные. Но как я пока не знаю | |
|
|
|
|
|
|
|
для: torxxx
(26.09.2011 в 10:25)
| | нужно писать не title, а title[]
вот так
<td class='admin_table_items_td_title'><input name='title[]' value='$myrow[title]' type='text' /></td>
|
и так далее все имена
в обработчик получите массив
который в простейшем случае можно вставить в базу в цикле foreach
___
хотя может лучше немного изменить логику составления массива
просто надо глубже проанализировать таблицу и связи, а сейчасас мало времени | |
|
|
|
|
|
|
|
для: Valick
(26.09.2011 в 10:41)
| | спасибо, сейчас попробую | |
|
|
|
|
|
|
|
для: torxxx
(26.09.2011 в 10:46)
| | я о том чтобы сформировать массив таким образом (и не много а один массив), чтобы его легче было обрабатывать и не потерять зависимость значений друг от друга
_
просто у вас получается много массивов и связаны они только мнимым порядком, а это достаточно ненадёжная связь (я бы даже сказал крайне ненадежная), такого нельзя позволять и особенно в онлайн игре | |
|
|
|
|
|
|
|
для: Valick
(26.09.2011 в 10:49)
| | это не игра, пишу движок (для изучения php) | |
|
|
|
|
|
|
|
для: torxxx
(26.09.2011 в 11:08)
| | тогда у вас достаточно странные имена полей для "не игры" | |
|
|
|
|
|
|
|
для: Valick
(26.09.2011 в 11:18)
| | Есть игра "http://wiki.teamfortress.com/wiki/Heavy/ru"/ В ней предусмотрен обмен предметами между игроками. У меня есть лишние игровые предметы и так-как я начал изучать php, решил написать движок сайта по обмену этими предметами. | |
|
|
|
|
|
|
|
для: Valick
(26.09.2011 в 10:49)
| | - | |
|
|
|
|
|
|
|
для: torxxx
(26.09.2011 в 10:46)
| | id в принципе величина постоянная менять его нельзя (его можно только удалить вместе со всей строкой) и вообще он выступает в роли ключа, что само по себе естественно, вот и нужно формировать вложенный массив родительскими элементами которого будут выступать id | |
|
|
|
|
|
|
|
для: Valick
(26.09.2011 в 11:07)
| | я так и планирую, вывел его для наглядности
Непонятна такая логика:
<td class='admin_table_items_td_title'><input name='title[]' value='$myrow[title]' type='text' /></td>
|
А если так сделать:
$items = array (
$id=>array
(
"title"=>$title,
"Scout"=>$Scout,
"Soldier"=>$Soldier,
"Pyro"=>$Pyro,
"Demoman"=>$Demoman,
"Engineer"=>$Engineer,
"Medic"=>$Medic,
"Sniper"=>$Sniper,
"Spy"=>$Spy,
"counter"=>$counter,
... .
)
);
|
Таким образом я создам многомерный массив со всеми значениями, для каждой строчки, вроде верно? | |
|
|
|
|
|
|
|
для: torxxx
(26.09.2011 в 11:09)
| | уже ответил ниже) | |
|
|
|
|
|
|
|
для: Valick
(26.09.2011 в 11:24)
| | - | |
|
|
|
|
|
|
|
для: torxxx
(26.09.2011 в 10:46)
| | в итоге получим:
<td class='admin_table_items_td_title'><input name='line[$myrow[id]][title]' value='$myrow[title]' type='text' /></td>
|
<td class='admin_table_items_td_number'><input name='id' value='$myrow[id]' type='text' /></td> - эту строку можно удалить
<td class='admin_table_items_td_number'><input name='line[$myrow[id]][Scout]' value='$myrow[Scout]' type='text' /></td>
|
в обработчике напишите вывод этого массива и посмотрите на структуру
<?php
echo "<PRE>";
print_r($_POST[line]);
echo "</PRE>";
|
| |
|
|
|
|
|
|
|
для: Valick
(26.09.2011 в 11:15)
| | Ага, то что надо (буду продумывать код дальше), не знал что так можно сделать, логика понятна.
Благодарю! | |
|
|
|
|
 134 Кб |
|
|
для: torxxx
(26.09.2011 в 11:29)
| | Появилась еще одна задача (непонятная для меня)
Есть массив (упростил до 2-ух "веток", на самом деле число меняется):
$_POST['items'] =>
Array
(
[1] => Array
(
[title] => Неумолимая сила
[Scout] => 1
[Soldier] => 0
[Pyro] => 0
[Demoman] => 0
[Heavy] => 0
[Engineer] => 0
[Medic] => 0
[Sniper] => 0
[Spy] => 0
[the_weapons] => 0
[the_hat] => 0
[the_other] => 0
[set] => нет
)
[40] => Array
(
[title] => Томислав
[Scout] => 0
[Soldier] => 0
[Pyro] => 0
[Demoman] => 0
[Heavy] => 1
[Engineer] => 0
[Medic] => 0
[Sniper] => 0
[Spy] => 0
[the_weapons] => 0
[the_hat] => 0
[the_other] => 0
[set] => есть
)
)
|
Обработал его комантой Foreach и вставил функцию обновления строк таблицы - но получилась "Борода" какая-то (не работает). Не обновляются поля строки таблицы (сделал проверку - которая подтверждает что я сделал неправильно запрос):
foreach ($_POST['items'] as $arrid => $arrtitle)
{
foreach ($arrtitle as $value => $key)
{
$resultADD = mysql_query ( "UPDATE items SET
title='$key',
Scout='$key',
Soldier='$key',
Pyro='$key',
Demoman='$key',
Heavy='$key',
Engineer='$key',
Medic='$key',
Sniper='$key',
Spy='$key',
the_weapons='$key',
the_hat='$key',
the_other='$key',
set='$key',
Slot='$key',
counter='$key',
WHERE id='$arrid'", $db);
}
if ($resultADD) {echo "<br>Новые параметры внесены в базу данных<br><br>";} else {echo "<br>Ошибка запроса - параметры не внесены<br><br>";}
}
|
Прикрепил скриншот таблицы для наглядности. | |
|
|
|
|
|
|
|
для: torxxx
(26.09.2011 в 16:58)
| | поля таблицы возьмите в кавычки: `set` либо не называйте таблицы и ее поля зарезервированными в mysql словами. | |
|
|
|
|
|
|
|
для: Lotanaen
(26.09.2011 в 17:20)
| | спасибо за найденную ошибку, поправил.
Но данные все равно не заносятся | |
|
|
|
|
|
|
|
для: torxxx
(26.09.2011 в 17:42)
| | да... вы второй foreach зачем делаете?
там получится такой же запрос:
$resultADD = mysql_query ( "UPDATE items SET
title='$arrtitle[title]'
WHERE id='$arrid'", $db);
|
т.е. так с массивом поступите | |
|
|
|
|
|
|
|
для: Lotanaen
(26.09.2011 в 17:48)
| | Если правильно понял, нужно сделать так:
foreach ($_POST['items'] as $arrid => $arrtitle)
{
$resultADD = mysql_query ( "UPDATE items SET
'title'=$arrtitle[title],
'Scout'=$arrtitle[Scout],
'Soldier'=$arrtitle[Soldier],
'Pyro'=$arrtitle[Pyro],
'Demoman'=$arrtitle[Demoman],
'Heavy'=$arrtitle[Heavy],
'Engineer'=$arrtitle[Engineer],
'Medic'=$arrtitle[Medic],
'Sniper'=$arrtitle[Sniper],
'Spy'=$arrtitle[Spy],
'the_weapons'=$arrtitle[the_weapons],
'the_hat'=$arrtitle[the_hat],
'the_other'=$arrtitle[the_other],
'set'=$arrtitle[set],
'Slot'=$arrtitle[Slot],
'counter'=$arrtitle[counter]
WHERE 'id'='$arrid'", $db);
if ($resultADD) {echo "<br>Новые параметры внесены в базу данных<br><br>";} else {echo "<br>Ошибка запроса - параметры не внесены<br><br>";}
}
|
Ясно как сказано выше я допустил 1 ошубку (фатальную):
1) нельзя использовать зарезервированные переменные в названия таблиц (в моем случаи set)
2) нельзя так-же делать так:
'title'='$arrtitle[title]' - неправильно
title='$arrtitle[title]' - правильно
|
$resultADD = mysql_query ( "UPDATE items SET
title='$arrtitle[title]',
set='$arrtitle[set]',
WHERE id='$arrid'", $db);
|
| |
|
|
|
|
|
|
|
для: torxxx
(26.09.2011 в 18:11)
| | зарезервированые слова можно использовать в названиях таблиц и их полей, но лучше всегда при формировании запросов все имена эти брать в апостроф(обратные кавычки) - не ' , а `:
$resultADD = mysql_query ( "UPDATE `items` SET
`title`='$arrtitle[title]',
`set`='$arrtitle[set]',
WHERE `id`='$arrid'", $db);
|
| |
|
|
|
|
|
|
|
для: Lotanaen
(27.09.2011 в 09:27)
| | спасибо учту | |
|
|
|