X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Массовое добавление в mysql
DrDRED
DrDRED
Topic Starter сообщение 14.2.2010, 2:11; Ответить: DrDRED
Сообщение #1


Здравствуйте, есть таблица в БД в ней хранятся вопросы, при выводе вопросов, на каждый вопрос выводится голосовалка (radio кнопки для вариантов ответа и textarea для ввода комментария).

[PHP]
include ("config.php"); //фаил подключения к базе данных
$result = mysql_query("SELECT * FROM swot_ques") or die ('Невозможно подключиться к БД!!!');
echo "<form action=\"add_swot_form.php\" method=\"post\">";
while ($row = mysql_fetch_array($result)) {
echo "<table border=\"0\" width=\"100%\" cellspacing=\"1\" cellpadding=\"1\">
<tr>
<td width=\"209\">
&nbsp; $row[id].&nbsp;$row[title]
</td>
<td width=\"209\" align=\"center\"> &nbsp;
<input type=\"radio\" name=\"voting_$row[id]\" value=\"1\" /> &nbsp;
<input type=\"radio\" name=\"voting_$row[id]\" value=\"2\" /> &nbsp;
<input type=\"radio\" name=\"voting_$row[id]\" value=\"3\" /> &nbsp;
<input type=\"radio\" name=\"voting_$row[id]\" value=\"4\" /> &nbsp;
<input type=\"radio\" name=\"voting_$row[id]\" value=\"5\" /> &nbsp;
<input type=\"radio\" name=\"voting_$row[id]\" value=\"6\" /> &nbsp;
<input type=\"radio\" name=\"voting_$row[id]\" value=\"7\" /> &nbsp;
</td>
<td width=\"209\">
<textarea name=\"comment_$row[id]\" cols=\"23\" rows=\"2\"> </textarea>
</td>
</tr></table>";
}
[/PHP]

Внимание вопрос, как добавить в таблицу БД вида:
CREATE TABLE `swot_form` (
`id` int(11) NOT NULL auto_increment,
`voting` int(10) NOT NULL,
`comment` varchar(800) NOT NULL
)

данные, которые передаются именами voting_$row[id] и comment_$row[id]

Есть скрипт добавления:

[PHP]
$conn = mysql_connect ("localhost", "root", "andrey");
mysql_select_db ("smk", $conn);
if ( isset ($HTTP_POST_VARS ['submit'] ))
{
if ((strlen ($HTTP_POST_VARS ['voting']) > 0) and (strlen ($HTTP_POST_VARS['comment']) > 0))
{
$query_user = "insert into swot_form values ('$HTTP_POST_VARS[voting]', '$HTTP_POST_VARS[comment]')";
$query_result = mysql_query($query_user);
if ($query_result) { header ("Location: 1.html"); exit;} else { echo 'Не удалось добавить';}
mysql_close();
}
}
[/PHP]

Извините за так много буков)))
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
r3ntg3n
r3ntg3n
сообщение 15.2.2010, 23:40; Ответить: r3ntg3n
Сообщение #2


я так понимаю, что у Вас имя radio и textarea герениться с добавлением id-шника вопроса?

тогда правильней будет так?
[php]while ($row = mysql_fetch_array($result)) {
echo "<table border=\"0\" width=\"100%\" cellspacing=\"1\" cellpadding=\"1\">
<tr>
<td width=\"209\">
&nbsp; $row[id].&nbsp;$row[title]
</td>
<td width=\"209\" align=\"center\"> &nbsp;
<input type=\"radio\" name=\"voting_".$row['id']."\" value=\"1\" /> &nbsp;
<input type=\"radio\" name=\"voting_".$row['id']."\" value=\"2\" /> &nbsp;
<input type=\"radio\" name=\"voting_".$row['id']."\" value=\"3\" /> &nbsp;
<input type=\"radio\" name=\"voting_".$row['id']."\" value=\"4\" /> &nbsp;
<input type=\"radio\" name=\"voting_".$row['id']."\" value=\"5\" /> &nbsp;
<input type=\"radio\" name=\"voting_".$row['id']."\" value=\"6\" /> &nbsp;
<input type=\"radio\" name=\"voting_".$row['id']."\" value=\"7\" /> &nbsp;
</td>
<td width=\"209\">
<textarea name=\"comment_".$row['id']."\" cols=\"23\" rows=\"2\"> </textarea>
</td>
</tr></table>";
}[/php]получение данных и вставка будет выглядить следующим образом:

[php]$result = $db->query("SELECT id FROM swot_ques");
if ($result) {
while (($row = $result->fetch_row()) !== null) {
$voting = $_POST['voting_'.$row[0]];
$comment = $_POST['comment_'.$row[0]];
if ((!empty($voting)) && (!empty($comment)) {
$db->query("UPDATE swor_ques SET voting=$voting && comment='$comment' WHERE id=".$row[0]);
}
}
}[/php]

дополнительно можно проводить обработку комментариев для удаления из их текста html-тэгов, слешей и escape-последовательностей, дабы исключить вероятность внедрения кода или передачи SQL-injection
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
DrDRED
DrDRED
Topic Starter сообщение 16.2.2010, 0:24; Ответить: DrDRED
Сообщение #3


r3ntg3n, начал разбираться в Вашем скрипте, при компиляции были ошибки в результате чего пришлось немного поменять Ваш скрипт на такой:

[php]
include("config.php");

$result = mysql_query("SELECT id FROM swot_ques");
if ($result) {
while (($row = mysql_fetch_array($result)) !== null) {
$voting = $_POST['voting_'.$row[0]];
$comment = $_POST['comment_'.$row[0]];
if ((!empty($voting)) && (!empty($comment)))
{
$query_user = ("UPDATE swot_form SET voting=$voting && comment='$comment' WHERE id=".$row[0]);
$query_result = mysql_query($query_user);
if ($query_result) { header ("Location: 1.html"); exit;} else { echo 'Не удалось добавить';}
mysql_close();
}
}
}
[/php]Но все равно добавление в БД не происходит, ошибок не пишет, переходит как в случае удачи на 1.html, но в БД ничего не заносит, в чем причина, не поможете?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
r3ntg3n
r3ntg3n
сообщение 16.2.2010, 0:36; Ответить: r3ntg3n
Сообщение #4


я писал код для изменения данных в таблице, но если Вам нужно добавление в базу, то измените запрос с "UPDATE..." на
"INSERT INTO swot_quest VALUES (0, $voting, '$comment')"
но при этом надо в таблицу swot_ques добавить поле parent_id типа int(11) или что-то этого вида для хранения id-шника вопроса, на который был дан ответ. При добавлении данных в таблицу добавлять и id вопроса следующим запросом:
[php]$db->query("INSERT INTO swot_ques VALUES (0, $voting, '$comment',".$row[0].")");[/php]в итоге Вы добавите в базу ответ на вопрос с комментариями и id-шник вопроса, на который отвечали. Потом по этому айдишнику можно будет доставать ответы на этот вопрос.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
DrDRED
DrDRED
Topic Starter сообщение 16.2.2010, 0:40; Ответить: DrDRED
Сообщение #5


Работать работает, но добавляет только одну запись, а не все, что передано.
А должен добавить приблизительно следующее:
Array ( [voting_1] => 1 [comment_1] => wd [voting_2] => 2 [comment_2] => fbtfb [voting_3] => 3 [comment_3] => wberbreberbr [voting_4] => 4 [comment_4] => wdwdw [submit] => Далее )
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
r3ntg3n
r3ntg3n
сообщение 16.2.2010, 0:54; Ответить: r3ntg3n
Сообщение #6


попробуйте поменять условие в цикле while c !== null на !== false, не помню точно, то в ООП используется null, так как работаем с объектами, а в процедурном варианте раньше использовал false

еще вопрос: с какой таблицы Вы берете id при формировании имен радио-кнопок в форме?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
r3ntg3n
r3ntg3n
сообщение 16.2.2010, 0:57; Ответить: r3ntg3n
Сообщение #7


немного запутался, да и Вас запутал :)
напишите, пожалуйста, с какой таблицы Вы берете вопросы и айдишники для формирования имен, и в какую таблицу хотите заливать результаты. + ко всему напишите имена полей, который используются в обоих таблицах. Спасибо!
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
DrDRED
DrDRED
Topic Starter сообщение 16.2.2010, 1:00; Ответить: DrDRED
Сообщение #8


id беру из таблицы вопросов:

`swot_ques` (
  `id` int(11) NOT NULL auto_increment,
  `title` varchar(500) NOT NULL
)


Ответы надо добавить в таблицу:

`swot_form` (
  `id` int(11) NOT NULL auto_increment,
  `voting` int(10) NOT NULL,
  `comment` varchar(800) NOT NULL,
  `id_ques` int(11) NOT NULL,
  PRIMARY KEY  (`id`)
)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Apay
Apay
сообщение 16.2.2010, 1:22; Ответить: Apay
Сообщение #9


[PHP]include('config.php'); //фаил подключения к базе данных
$result = mysql_query('SELECT * FROM swot_ques') or die ('Невозможно подключиться к БД!!!');
echo '<form action="add_swot_form.php" method="post">';
while( $row = mysql_fetch_assoc($result) ){
echo
'<table border="0" width="100%" cellspacing="1" cellpadding="1"><tr>'.
'<td width="209">&nbsp; '.$row['id'].'&nbsp;'.$row['title'].'</td>'.
'<td width="209" align="center"> &nbsp; ';
'<input type="radio" name="voting_'.$row['id'].'" value="1" /> &nbsp;'.
'<input type="radio" name="voting_'.$row['id'].'" value="2" /> &nbsp;'.
'<input type="radio" name="voting_'.$row['id'].'" value="3" /> &nbsp;'.
'<input type="radio" name="voting_'.$row['id'].'" value="4" /> &nbsp;'.
'<input type="radio" name="voting_'.$row['id'].'" value="5" /> &nbsp;'.
'<input type="radio" name="voting_'.$row['id'].'" value="6" /> &nbsp;'.
'<input type="radio" name="voting_'.$row['id'].'" value="7" /> &nbsp;'.
'</td>'.
'<td width="209"><textarea name="comment_'.$row['id'].'" cols="23" rows="2"></textarea></td>'.
'</tr></table>';
}
[/PHP]
[PHP]include('config.php'); //фаил подключения к базе данных
if( isset($_POST['submit'] ) ){
$result = mysql_query( 'SELECT id FROM swot_ques' )
$query = array();
while( $row = mysql_fetch_row($result) )
if( !empty($_POST['voting_'.$row[0]]) && !empty($_POST['comment_'.$row[0]]) )
$query[] = '(NULL,"'.$_POST['voting_'.$row[0]].'","'.$_POST['comment_'.$row[0]].'")';
if( !empty($query) ){
if( mysql_query( 'INSERT INTO show_form VALUES'.implode(',',$query) ) )
header( 'Location: 1.html' );
else echo 'Не удалось добавить';
}
else header( 'Location: 2.html' ); // если ничего не отправлено
}
mysql_close();
[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
r3ntg3n
r3ntg3n
сообщение 16.2.2010, 1:42; Ответить: r3ntg3n
Сообщение #10


отлично, спасибо!

тогда список вопросов выводим следующим образом (попытаюсь написать процедурным подходом, если будут ошибки заранее простите):

[php]$query = "SELECT * FROM swot_ques";
$id_query = mysql_query($query);
echo "<form action=\"handler.php\" method=\"post\">";
if ($id_query) {
while (list($id, $title) = mysql_fetch_row($id_query)) { // ставим поле hidden с айдишником вопроса, чтобы в обработчике формы не селектить опять таблицу
echo "<table>
<tr>
<td>$id. $title
<input type=\"hidden\" name=\"question_$id\" value=\"$id\">
</td>
<td>
<input type=\"radio\" name=\"voting_$id\" value=\"1\">1;&nbsp;
<input type=\"radio\" name=\"voting_$id\" value=\"2\">2;&nbsp;
<input type=\"radio\" name=\"voting_$id\" value=\"3\">3;&nbsp;
<input type=\"radio\" name=\"voting_$id\" value=\"4\">4;&nbsp;
<input type=\"radio\" name=\"voting_$id\" value=\"5\">5;&nbsp;
</td>
<td><textarea name=\"comment_$id\" cols=\"50\" rows=\"5\"></textarea>
</tr>
</table>
";
}
echo "<input type=\"submit\" value=\"Ответить\" name=\"answer\">";
}[/php]в файле handler.php "ловим" данные:

[php]if (!empty($_POST['answer'])) {
foreach ($_POST as $key=>$value) { // перебираем элементы массива $_POST
$field = substr($key, strpos("_", $key)); // определяем имя элемента до знака подчеркивания, по имени будем создавать переменные
switch ($field) {
case "question": // если элемент question_id
$question_id = $value;
break;
case "voting": // если элемент voting_id
$voting = $value;
break;
case "comment": // если элемент comment_id
$comment = htmlspecialchars(stripslashes($value)); // избавляем комментарий от тэгов и слешей
break;
default:
break;
}
$query = "INSERT INTO swot_form VALUES (0, $voting, '$comment', $question_id)";
$id_query = mysql_query($query);
if ($id_query) echo "Answer for question # $question_id succesfully added<br />";
}
}[/php]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Услуги по созданию и доработке скриптов PHP, MySQL, JavaScript, jQuery
Разработка сайтов и сервисов под-ключ
0 alexey 1129 24.11.2023, 14:46
автор: alexey
Горячая тема (нет новых ответов) Массовое размещение объявлений на досках.
Ручное размещение. Повышение ИКС
99 gold15 70503 24.1.2022, 16:00
автор: gold15
Открытая тема (нет новых ответов) Массовое размещение объявлений на досках
25 Mapshal 3696 12.10.2020, 11:57
автор: Mapshal
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыДобавление RSS-ленты на новостные агрегаторы и блоги
4 agency 4808 14.5.2020, 15:53
автор: agency
Открытая тема (нет новых ответов) Web программирование на С/С++/PHP/MySQL/SQL, высоконагруженные проекты
Есть наработки в области бирж трафика, топов, тизеров, видео cj-тубов
4 DFService 3327 8.4.2020, 18:02
автор: DFService


 



RSS Текстовая версия Сейчас: 19.3.2024, 13:28
Дизайн