$query_polls = mysqli_query ($dbc, "SELECT * FROM polls WHERE poll_id='$id'");
$row_polls = mysqli_fetch_array ($query_polls);
if (isset ($_POST['submit']))
{
foreach($_POST['answer'] as $answer_id=>$value)
{
foreach($_POST['votes'] as $answer_id=>$value2)
{
$query = "UPDATE polls_answer SET answer = '".mysqli_real_escape_string($dbc, trim ($value))."',
votes = '".mysqli_real_escape_string($dbc, trim ($value2))."' WHERE poll_id='$id' AND answer_id=".$answer_id;
mysqli_query ($dbc, $query) or die ('ошибка записи');
}
}
}
Спустя 3 минуты, 57 секунд (26.09.2011 - 22:27) Winston написал(а):
А зачем тебе вложенные циклы foreach? Покажи какой у тебя массив получается ?
print_r($_POST);
Цитата (plumli @ 26.09.2011 - 22:24) |
$answer_id=>$value) |
Цитата (plumli @ 26.09.2011 - 22:24) |
$answer_id=>$value2) |
Во втором цикле напиши тогда уже
$answer_id2 => $value2)
Спустя 24 минуты, 59 секунд (26.09.2011 - 22:52) plumli написал(а):
вот весь код:
вот структура таблицы к которой обращается скрипт с попыткой редактирования:
<?php
require_once ('debag.php');
require_once ('head.php');
require_once ('connectdb.php');
require_once('startsession.php');
error_reporting(E_ALL);
$dbc = mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die ('сбой подключения');
$id = (int)$_GET['id'];
mysqli_query($dbc, "SET NAMES utf8");
$query_polls = mysqli_query ($dbc, "SELECT * FROM polls WHERE poll_id='$id'");
$row_polls = mysqli_fetch_array ($query_polls);
if (isset ($_POST['submit']))
{
foreach($_POST['answer'] as $answer_id=>$value)
{
foreach($_POST['votes'] as $answer_id2=>$value2)
{
$query = "UPDATE polls_answer SET answer = '".mysqli_real_escape_string($dbc, trim ($value))."',
votes = '".mysqli_real_escape_string($dbc, trim ($value2))."' WHERE poll_id='$id' AND answer_id=".$answer_id;
mysqli_query ($dbc, $query) or die ('ошибка записи');
$home_url = 'votes.php';
header ('Location: ' . $home_url);
}
}
}
require_once ('html.php');
?>
<a href="edit_poll_step1.php?id=<?php echo $id;?>">К шагу 1</a>
<h3>Редактирование опроса. Шаг 2.</h3>
<center><form method="POST" action="">
<fieldset style="width:500px;">
<legend>Шаг 2</legend>
<table id="edit_table">
<tr><td>Название голосования:</td>
<td><?php echo $row_polls['poll_name']?></td></tr>
<tr><td>Вопрос:</td>
<td><?php echo $row_polls['poll_quest']; ?></td></tr>
<tr><td> </td></tr>
<tr><td>Варианты ответов:</td><td>Количество голосов:</td></tr>
<?php
$query = mysqli_query ($dbc, "SELECT * FROM polls_answer WHERE poll_id='$id'");
while ($row = mysqli_fetch_array($query))
{
echo '<tr><td><input type="text" size="30" name="answer['.$row['answer_id'].']" value="'.$row['answer'].'" /></td>
<td><input type="text" size="2" name="votes['.$row['answer_id'].']" value="'.$row['votes'].'" /></td></tr>';
}
?>
</table><br>
<center><input type="submit" name="submit" value="Сохранить"/></center>
</fieldset>
</form>
</center>
вот структура таблицы к которой обращается скрипт с попыткой редактирования:
Спустя 24 минуты, 38 секунд (26.09.2011 - 23:17) Xes написал(а):
$answer_id два раза повторяется в фореч, это нормально что она перезаписывается в другом цикле? Поросто весь код не смотрел... так сразу в глаза бросилось.
Спустя 19 минут, 59 секунд (26.09.2011 - 23:37) plumli написал(а):
$answer_id вообще не перезаписывается, она просто указывает на те строки в которых должно произойти редактирование
Спустя 9 часов, 27 минут, 57 секунд (27.09.2011 - 09:05) plumli написал(а):
больше идей нет?
Спустя 9 минут, 3 секунды (27.09.2011 - 09:14) inpost написал(а):
Что значит "только один"? А сколько должен? И как должен?
И покажи данные сюда:
И покажи данные сюда:
echo '<pre>'.print_r($_POST,1).'</pre>';
Спустя 33 минуты, 44 секунды (27.09.2011 - 09:48) plumli написал(а):
выдает:
Редактируются только "варианты ответов" а "количество голосов" редактирует по последнему инпуту - заполняет все
Array
(
)
Редактируются только "варианты ответов" а "количество голосов" редактирует по последнему инпуту - заполняет все
Спустя 2 часа, 12 секунд (27.09.2011 - 11:48) inpost написал(а):
plumli
Значит форма не передаёт $_POST вообще
Значит форма не передаёт $_POST вообще
Спустя 15 минут, 35 секунд (27.09.2011 - 12:04) plumli написал(а):
если бы форма не передавала бы в массив $_POST данные то я бы вообще не смог редактировать строки в бд, однако же $_POST['answer'] - редактируется правильно, а $_POST['votes'] редактируется только записью из последнего инпута, что наводит на мысль, что он просто не видит по какому ключу ему проводить редактирование.
Спустя 13 минут, 33 секунды (27.09.2011 - 12:17) plumli написал(а):
мде.. ну я и голова... решил проблему просто:
if (isset ($_POST['submit']))
{
foreach($_POST['answer'] as $answer_id=>$value)
{
$query = "UPDATE polls_answer SET answer = '".mysqli_real_escape_string($dbc, trim ($value))."' WHERE poll_id='$id' AND answer_id=".$answer_id;
mysqli_query ($dbc, $query) or die ('ошибка записи');
}
foreach($_POST['votes'] as $answer_id=>$value2)
{
$query = "UPDATE polls_answer SET votes = '".mysqli_real_escape_string($dbc, trim ($value2))."' WHERE poll_id='$id' AND answer_id=".$answer_id;
mysqli_query ($dbc, $query) or die ('ошибка записи');
$home_url = 'votes.php';
// header ('Location: ' . $home_url);
}
}
Спустя 4 часа, 52 минуты, 29 секунд (27.09.2011 - 17:10) inpost написал(а):
plumli
Ты сказал, что "$answer_id" НЕ ПЕРЕЗАПИСЫВАЕТСЯ, типо тебе это не надо. Хотя в твоём РЕШЕНИИ ты используешь обе "$answer_id"...
2. Это условие пройти не может: if (isset ($_POST['submit'])) , так как у тебя МАССИВ ПУСТОЙ. Или ты код КРИВО записал, который я выше давал...
print_r($_POST) - должен был вывести ВЕСЬ массив... может ты записал $_PAST ? Или $_GET ?
Ты сказал, что "$answer_id" НЕ ПЕРЕЗАПИСЫВАЕТСЯ, типо тебе это не надо. Хотя в твоём РЕШЕНИИ ты используешь обе "$answer_id"...
2. Это условие пройти не может: if (isset ($_POST['submit'])) , так как у тебя МАССИВ ПУСТОЙ. Или ты код КРИВО записал, который я выше давал...
print_r($_POST) - должен был вывести ВЕСЬ массив... может ты записал $_PAST ? Или $_GET ?