Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/2: Рейтинг темы: голосов - 2, средняя оценка - 5.00
Helo
4 / 4 / 0
Регистрация: 04.07.2013
Сообщений: 52
1

Генерация выборки из базы данных

20.06.2015, 19:55. Просмотров 462. Ответов 7
Метки нет (Все метки)

Здравствуйте! Нужна помощь с кодом. Писал форму которая обращается к базе данных, делает выборку вопросов и выводит на экран, но скрипт не срабатывает выдавая лишь предупреждения:

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\Users\Maks\Desktop\OpenServer\domains\work\add.php on line 144

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\Users\Maks\Desktop\OpenServer\domains\work\add.php on line 212

Помогите найти и исправить ошибку.

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
<html>
<head>
<title>Добавить ответ</title>
</head>
<link rel="stylesheet" type="text/css" href="style.css">
<script language="JavaScript">
function str_edit(str)
{
    for(var i=0; i<str.length; i++)
    { str=str.replace(';', ' '); str=str.replace(',', ' ' ); }
return str;
}
</script>
<?php
Error_Reporting(E_ALL & ~E_NOTICE);
include("module/connect_mysql.php");
if (empty($_POST["id_form"])) {
$id_form=$_GET["id_form"]; }
else { $id_form=$_POST["id_form"]; }
?>
<body>
<?php
// Здесь будет обработка результирующей строки
$query=$_POST["query"];
// Если результирующая строка не пустая
if ($query!="")
{
    // Получаем данные из глобального массива
    $id_form=$_POST["id_form"];
    $date=$_POST["date"];
    $place=$_POST["place"];
    $audience=$_POST["audience"];
    // Объявляем временные переменные
    $current_number=0;
    $i=0;
    $history_created=false;
    $global_query="";
    $too_big=false;
    // Обрабатываем результирующую строку
    $query=str_replace(",,", ",", $query);
    $query=str_replace(", ;", ";", $query);
    $query=str_replace(",;", ";", $query);
    // Получаем идентификатор следующей записи в таблице history
    $row_id_ans=mysql_fetch_array(mysql_query("SELECT max(id_answer) FROM answer"));
    $current_id_answer=$row_id_ans["max(id_answer)"]+1;
    // Разбиваем результирующую строку в массив $field_info разделив его по символу «;»
    $field_info=explode(";", $query);
    foreach ($field_info as $temp)
    {
        $current_number+=1;
        // Читаем из базы формат вопроса и ответов на него
        $ques_q=mysql_query("SELECT id_question, q_type, a_few_answer FROM form, question
        WHERE form.id_form=$id_form AND question.number=$current_number
        AND form.id_form=question.id_form");
        $row_ques_q=mysql_fetch_array($ques_q);
        $id_question=$row_ques_q["id_question"];
        // Создаем запись о заполненной анкете
        if (!$history_created)
        {
            $row12 = mysql_fetch_array(mysql_query("SELECT max(id_filled_form) FROM history"));
            $id_filled_form=$row12["max(id_filled_form)"]+1;
            // В переменную global_query сохраняем все запросы к БД, чтобы потом выполнить их разом
            $global_query.="INSERT INTO `history`
            (`id_filled_form`, `date`, `place`, `audience`)
            VALUES ($id_filled_form, '$date', '$place','$audience');";
            $history_created=true;
        }
//--------------------------------------
// Если вопрос закрытый
//--------------------------------------
if ($row_ques_q["q_type"]=="c")
{
    if ($row_ques_q["a_few_answer"]!="1")
    {
        // Один вариант ответа
        $id_variant=$temp;
        $global_query.="INSERT INTO `answer`
        (`id_answer`, `own_answer`, `id_question`, `id_variant`,`id_filled_form`)
        VALUES ('$current_id_answer', NULL, $id_question, $id_variant, $id_filled_form); ";
        $current_id_answer+=1;
    }
    else
    {
        // Несколько вариантов ответа
        $j=0;
        $variant_value=explode(",", $temp);
        foreach ($variant_value as $temp_var)
        {
            // Получение id варианта
            $id_variant=$temp_var;
            $global_query.="INSERT INTO `answer`
            (`id_answer`, `own_answer`, `id_question`, `id_variant`,`id_filled_form`)
            VALUES ('$current_id_answer', NULL, '$id_question','$id_variant', '$id_filled_form'); ";
            $current_id_answer+=1;
            $j+=1;
        }
    }
}
//--------------------------------------
// Если вопрос открытый
//--------------------------------------
if ($row_ques_q["q_type"]=="o")
    if ($temp=="")
    {
        $global_query.="INSERT INTO `answer` (`id_answer`,`own_answer`, `id_question`, `id_variant`,`id_filled_form`)
        VALUES ($current_id_answer, NULL, $id_question, NULL,$id_filled_form); ";
        $current_id_answer+=1;
    }
    else
    {
        $temp=str_replace("'", "\'", $temp);
        $global_query.="INSERT INTO `answer` (`id_answer`,`own_answer`, `id_question`, `id_variant`,`id_filled_form`)
        VALUES ($current_id_answer, '$temp', $id_question, NULL,$id_filled_form); ";
        $current_id_answer+=1;
    }
}
// Разбиваем строку со всеми запросами на массив, а затем выполняем каждый запрос
$query_array=explode(";", $global_query);
foreach ($query_array as $a)
{
    mysql_query("$a");
}
}
// ГЕНЕРАЦИЯ ФОРМЫ
// Временная переменная для хранения html кода формы
$forma_text="";
// Временная переменная, для хранения JavaScript кода, обрабатывающего форму
$java_script="";
// Функция use(); будет перебирать все элементы формы и собирать их
// значения во временную переменную, значение которой будет помещено
// в специальное поле формы
$java_script.="<script language=\"JavaScript\"type=\"text/javascript\">\n\n function use() \n
{ \n";
$java_script.="window.document.forma.query.value=\"\"; \n";
// Делаем выборку всех вопросов и сортируем их по номерам вопросов
$ques_f=mysql_query("SELECT `question`.* FROM `form`, `question` WHERE `form`.`id_form`=$id_form
AND `form`.`id_form` =`question`.`id_form` ORDER BY `number`");
while ($row_f=mysql_fetch_array($ques_f))
{
    // Определяем временные переменные
    $checked="selected=\"selected\"";
    $id_ques_f=$row_f["id_question"];
    $number_f=$row_f["number"];
    $q_text_f=$row_f["q_text"];
    // Каждый вопрос – это отдельная форма с именем form<идентификатор анкеты>
    $forma_text.="<form name=form$id_ques_f>";
    // Открытый вопрос
    if ($row_f["q_type"]=="o")
    {
        $number_f=$row_f["number"];
        $q_text_f=$row_f["q_text"];
        $forma_text.="<h2>$number_f. $q_text_f</h2>\n";
        // Имя формы для открытого вопроса input<идентификатор вопроса>
        $forma_text.="<input name=\"input$id_ques_f\"type=\"text\" size=\"100\">\n";
        $java_script.="window.document.forma.query.value+=
        str_edit(window.document.form$id_ques_f.input$id_ques_f.value +\"; \"; \n";
    }
    // Закрытый вопрос
    if ($row_f["q_type"]=="c")
    {
        // Несколько вариантов ответа
        if ($row_f["a_few_answer"]=="1")
        {
            $forma_text.="<h2>$number_f. $q_text_f</h2>\n";
            $ques_var=mysql_query("SELECT `variant`.* FROM `question`, `variant` WHERE `question`.`id_question`='$id_ques_f'
            AND `question`.`id_question`=`variant`.`id_question` ORDER BY `v_number`");
            while ($row_var=mysql_fetch_array($ques_var))
            {
                // Элементы «Опция» для закрытого вопроса, с несколькими вариантами ответа. Имя элемента checkbox<идентификатор варианта>
                $id_var_f=$row_var["id_variant"];
                $v_num_f=$row_var["v_number"];
                $var_text_f=$row_var["variant_text"];
                $forma_text.="\t<br><input name=\"checkbox$id_var_f\"type=\"checkbox\" value=\"$v_num_f\" size=\"100\" $checked> $var_text_f\n";
                $checked="";
                $java_script.="\n if (document.form$id_ques_f.checkbox$id_var_f.checked==true) \n document.forma.query.value+=
                document.form$id_ques_f.checkbox$id_var_f.value+ \", \"; \n";
            }
            // Очередной вопрос кончился, ставим символ «;»
            $java_script.="document.forma.query.value=document.forma.query.value+\"; \"; \n";
        }
        // Один вариант ответа
        if ($row_f["a_few_answer"]=="0")
        {
            $forma_text.="<h2>$number_f. $q_text_f</h2>\n";
            $ques_var=mysql_query("SELECT variant.* FROM question, variant WHERE question.id_question='$id_ques_f'
            AND question.id_question=variant.id_question ORDER by v_number");
            $forma_text.="<select name=\"radio_but\">";
            while ($row_var=mysql_fetch_array($ques_var))
            {
                $id_var_f=$row_var["id_variant"];
                $v_num_f=$row_var["v_number"];
                $var_text_f=$row_var["variant_text"];
                $forma_text.="\t<br><option value=\"$v_num_f\"$checked> $var_text_f </option>\n";
                $checked="";
            }
            $forma_text.="</select>";
            $java_script.="document.forma.query.value+=document.form$id_ques_f.radio_but.value+\"; \"; \n";
        }
    }
    $forma_text.="</form>\n";
}
$java_script.="
} \n//\n
</script>\n";
echo "$java_script";
$info = mysql_fetch_array(mysql_query("SELECT * FROM form WHERE id_form=$id_form"));
$title=$info["title"];
$author=$info["author"];
$comment=$info["comment"];
echo "<div id=\"main\"><div id=\"body\">";
echo "<h1>Об анкете</h1>
<blockquote>Название - $title";
echo "<br>Автор - $author";
echo "<br>Комментарий - $comment</blockquote>";
echo "<h1>Вопросы</h1>";
// Вывод формы
echo "<p>$forma_text";
?>
<h1>Дополнительные вопросы</h1>
<form name="forma" action="add.php" method="post">
<h2>Дата</h2>
<input name="date" readonly type="text" size="10"
value="<?php echo date ("d/m/y");?>">
<h2>Место проведения</h2>
<select name=”place”>
<?php
$place=mysql_query("SELECT * FROM `place_audience` WHERE `name_place` IS NOT NULL");
while ($place_res=mysql_fetch_array($place))
{
    if ($place_res["name_place"]==$place)
    {
        printf("<option value=\"%s\"selected=\"selected\">%s</option>",
        $place_res["name_place"], $place_res["name_place"]);
    }
    else
    {
        printf("<option value=\"%s\">%s</option>",
        $place_res["name_place"], $place_res["name_place"]);
    }
}
?>
</select>
<h2>Аудитория</h2>
<select name=”audience”>
<?php
$place=mysql_query("SELECT * FROM `place_audience` WHERE `name_audience` IS NOT NULL");
while ($place_res=mysql_fetch_array($place))
{
    if ($place_res["name_audience"]==$audience)
    {
        printf("<option value=\"%s\"selected=\"selected\">%s</option>",
        $place_res["name_audience"], $place_res["name_audience"]);
    }
    else
    {
        printf("<option value=\"%s\">%s</option>", $place_res["name_audience"], $place_res["name_audience"]);
    }
}
?>
</select>
<input type = "button" value = "Готово!" onclick = "use()">
<input type = "text" name = "query" size="100" value="">
</form></body></html>
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.06.2015, 19:55
Ответы с готовыми решениями:

Сложные выборки из базы данных
Здравствуйте. Я умею делать простые выборки, но сложные пока не получаются. Недостаток опыта и...

Вывод выборки базы данных на страницу сайта
Доброго времени суток всем. У меня тут возникла проблема не могу понять что тут не так: мне...

Запрос выборки из базы данных не прошел. Код ошибки:Table 'program.settings' doesn't exist
Что это и с чем его едят?

Генерация таблицы html на основе запроса из базы данных
Дан вот такой массив: Array ( =&gt; Array ( =&gt; Первый ...

Зацикливет вывод выборки из базы
Здравствуйте. Суть проблемы.Выбираю из базы поля с сортировкой по заданному полю, по убыванию, с...

7
fanatikus
1306 / 1230 / 579
Регистрация: 17.11.2012
Сообщений: 5,504
20.06.2015, 22:03 2
скорее всего, что-то с запросом sql
0
Belonard
10 / 10 / 11
Регистрация: 11.06.2015
Сообщений: 50
21.06.2015, 03:09 3
Может попробовать подавать mysql_fetch_array уже сгенерированную строковую переменную.

PHP
1
$info = mysql_fetch_array(mysql_query("SELECT * FROM form WHERE id_form=$id_form"));
->
PHP
1
2
$sql = "SELECT * FROM form WHERE id_form='$id_form'";
$info = mysql_fetch_array(mysql_query($sql));
1
Helo
4 / 4 / 0
Регистрация: 04.07.2013
Сообщений: 52
21.06.2015, 08:14  [ТС] 4
Ошибка в 212 строке теперь не выводится, но проблема пока не решена. Есть еще какие-нибудь идеи?
0
21.06.2015, 08:14
Belonard
10 / 10 / 11
Регистрация: 11.06.2015
Сообщений: 50
21.06.2015, 12:18 5
Helo,
Какую ошибку выдаёт?

PHP
1
echo "<h1>Об анкете</h1> <blockquote>Название - $title";
->
PHP
1
echo '<h1>Об анкете</h1> <blockquote>Название - '.$title;
0
Helo
4 / 4 / 0
Регистрация: 04.07.2013
Сообщений: 52
21.06.2015, 14:44  [ТС] 6
Цитата Сообщение от Belonard Посмотреть сообщение
Какую ошибку выдаёт?
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\Users\Maks\Desktop\OpenServer\domains\work\add.php on line 138
0
fanatikus
1306 / 1230 / 579
Регистрация: 17.11.2012
Сообщений: 5,504
21.06.2015, 14:47 7
а в базе, точно есть запрашиваемые данные?
0
Helo
4 / 4 / 0
Регистрация: 04.07.2013
Сообщений: 52
21.06.2015, 14:54  [ТС] 8
Цитата Сообщение от fanatikus Посмотреть сообщение
а в базе, точно есть запрашиваемые данные?
Да в базе есть информация об авторе, названии и несколько вопросов. Выводил все таблицы командой show tables отображаются нормально, проблем с кодировкой нет. Кодировка utf-8
0
21.06.2015, 14:54
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.06.2015, 14:54

Организация правильной выборки из базы
есть такой запрос к БД SELECT ads.id_ad FROM ads,работадатели where ...

Подскажите ошибку выборки из базы mysql
По первоначальному замыслу было задумано вывести наибольшее цисло &quot;id&quot; из базы, без функции...

Порядок выборки почтовых сообщений из базы
я сделал почту с помощью этого кода вытаскиваются сообщения из бд $res=mysql_query(&quot;SELECT *...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.