|
|
|
|
|
для: Valick
(22.02.2012 в 14:15)
| | Спасибо большое, разобрался, теперь если вопросы будут возникать, буду обращаться))) если не против) | |
|
|
|
|
 3.8 Кб |
|
|
для: Digidie
(22.02.2012 в 13:26)
| | прикрепил | |
|
|
|
|
|
|
|
для: Valick
(22.02.2012 в 12:58)
| | Ну и на последок для уверенности, я повставлял комменты, посмотрите пожалуйста, я всё правильно понял?
P.S. Чтобы потом под себя изменить.
<?php
$db = mysql_connect("localhost","motvei","123456");
mysql_select_db("golos",$db);
if ($_REQUEST['submit']){
if (isset($_POST['id_q'])) { $id_q = $_POST['id_q']; }
if (isset($_POST['responce'])) { $responce = $_POST['responce']; }
if (isset($_POST['ip'])) { $ip = $_POST['ip']; }
if (strlen($responce) <=0 or strlen($responce) < 3){
echo "<p style='color:red;'>Вы не заполнили поле либо ввели менее 3-х символов</p>";
}else{
$query = "SELECT * FROM vopros WHERE id_q=$id_q"; /*Вытаскиваем все вопросы*/
$res = mysql_query($query); /*Заносим выполнение запроса в переменную*/
$m = mysql_fetch_assoc($res); /*Заносим вытащенные данные в массив а массив в переменную*/
$query = "INSERT INTO otvet (id_q,responce,ip,date_post) VALUES ($m[id_q],'$responce','$ip',NOW())"; /*Вставляем значения полей в базу---зачем нужен NOW не понятно---*/
$res = mysql_query($query) or die(mysql_error());
}
}
if ($res){ /*Если данные вставились формируем JOIN запрос и объединяем таблицу vopros и otvet ---тут немного непонятно,как это сделано---*/
$query = "SELECT question, responce, date_post
FROM otvet
JOIN vopros
USING (id_q)
WHERE vopros.id_q=$id_q AND otvet.ip='$ip'";
$res = mysql_query($query); /*Помещаем запрос в переменную*/
$m = mysql_fetch_array($res); /*создаем массив и помещаем его в переменную*/
echo "<p><b>Ваш IP:</b> $ip</p> "; /*тут выводим ip непонятно из какого запроса*/
echo "<p><b>Вопрос:</b> $m[question]?</p>"; /*тут выводим вопрос на который отвечал человек из последнего запроса*/
echo "<p><b>Ваши ответы:</b>(".mysql_num_rows($res).")<ul>"; /*Считаем сколько всего ответов на этот вопрос*/
mysql_data_seek($res, 0); /*непонял для чего нужно*/
while($m = mysql_fetch_array($res)){ /*выводим в цикле переменную с массивом до тех пор пока в поле responce есть записи*/
echo "<li>$m[responce] (ответ добавлен $m[date_post])</li>"; /*выводим дату и время добавления ответа*/
}
$query = "SELECT COUNT(DISTINCT ip) AS t FROM otvet WHERE id_q=$id_q"; /*считаем сколько раз человек зашел с одного ip и выводим без повторения*/
$res = mysql_query($query); /*заносим запрос в переменную*/
$c = mysql_fetch_array($res); /*заносим в переменную массив из результатов запроса*/
echo "</ul><p><b>Количество пользователей ответивших на данный вопрос:</b>$c[t] человек(а)</p><hr />"; /*выводим кол-во ответов с одного ip*/
}
$ip = $_SERVER['REMOTE_ADDR']; /*узнаем ip отвечавшего*/
$query = "SELECT * FROM vopros ORDER BY rand()"; /*формируем запрос по выводу вопроса из базы*/
$res = mysql_query($query);
if($res){ /*тут проверяем "если в базе есть вопросы то тогда заносим результат в массив и помещаем в переменную"*/
if(mysql_num_rows($res) > 0){
$m = mysql_fetch_assoc($res);
}else{
echo "База данных не содержит вопросов"; exit;
}
}else{
echo "Ошибка выборки."; exit;
}
?>
<html>
<head>
<title>Голосование!</title>
</head>
<body>
<p>Всего вопросов в базе данных: <?=mysql_num_rows($res) ?></p> <!--Здесь так понимаю выводяться вопросы сформированные в последнем запросе -->
<p>Текущий случайный вопрос: <br /><li><?=$m[question]; ?>?</li></p> <!--Здесь тоже вопрос из последнего запроса -->
<form action="<?=$_SERVER['SCRIPT_NAME']?>" method="post">
<textarea cols="40" rows="5" name="responce" id="responce"></textarea>
<input type="hidden" name="ip" value="<?=$ip ?>"> <!--Здесь передаем ip -->
<input type="hidden" name="id_q" value="<?=$m[id_q] ?>"> <!--Здесь тоже немного непонятно -->
<p><input type="submit" name="submit" value="Проголосовать!"></p>
</body>
</html>
|
И ещё у меня вопрос, вот у вас везде в запросах одни и те же переменные, разве так можно? Если я например вместо $query поставлю $result получится какая то путаница) | |
|
|
|
|
|
|
|
для: Digidie
(22.02.2012 в 12:43)
| | в том-то и дело, что лично я считаю что SQL нужно учить отдельно от других языков
я сейчас не могу объяснить детально почему
грамотное сочетание php и mysql - это так:
PHP - использовать по возможности только для вывода результата в браузер + функции работы с mysql а их так мало что там и учить нечего, весь остальной функционал это MySQL с его разнообразными запросами.
Самое главное уметь составлять правильные запросы, а тут ни PHP ни один другой язык не поможет.
Имея знания в PHP вы будете стараться непроизвольно переложить некоторый функционал на него, потому-что знаете как, а это в корне не верно, лучше при изучении запросов про РНР вообще забыть. | |
|
|
|
|
|
|
|
для: Valick
(22.02.2012 в 12:21)
| | вот кстати эту книжку я вчера и скачал. А так мне нужно mysql и php, чтобы не путаться в элементарных функциях, а так же грамотно сочитать php и mysql. Вот многие например советуют PHP5 в подлиннике Котерова и Костарева, или Лари Ульман mysql конструкция языка, Лаура Томпсон и Люк Веллинг - php и mysql. Вы ведь тоже куда то заглядываете. Посоветуйте. | |
|
|
|
|
|
|
|
для: Digidie
(22.02.2012 в 12:13)
| | вы зря просите побольше примеров и кода
лучше начните с хорошей теории, иначе рискуете упустить важные моменты и MySQL так навсегда и останется "непобеждённой"
размышления
___
можете дойти до книжного магазина и переписать какие есть книги в наличии
напишите их сюда, а я попробую определиться с советом | |
|
|
|
|
|
|
|
для: Valick
(22.02.2012 в 11:57)
| | спасибо большое и правда работает,буду разбираться, и всё таки на счёт книжки, какую можете посоветовать новичку чтобы было понятно написано и самое главное было побольше примеров и кода с объяснениями? | |
|
|
|
|
|
|
|
для: Digidie
(22.02.2012 в 10:52)
| | я же вам сказал сделать имена полей как в моем втором посте
это у вас
id_q(int) - первичный ключ автоинкремент
question(int)
responce(text)
ip(varchar(100))
date_post(datetime)
|
а надо вот так
id(int) - первичный ключ автоинкремент
id_q(int)
responce(text)
ip(varchar(100))
date_post(datetime)
|
если пока не понятно почему имена такие, то просто поверьте, потом поймете
и код скопируйте из темы без каких либо изменений | |
|
|
|
|
|
|
|
для: Valick
(22.02.2012 в 10:16)
| | имена правильные. Сейчас код выглядит след. образом:
<?php
$db = mysql_connect("localhost","motvei","123456");
mysql_query('SET NAMES cp1251');
mysql_select_db("golos",$db);
if ($_REQUEST['submit']){
if (isset($_POST['id_q'])) { $id_q = $_POST['id_q']; }
if (isset($_POST['responce'])) { $responce = $_POST['responce']; }
if (isset($_POST['ip'])) { $ip = $_POST['ip']; }
if (isset($_POST['date_post'])) { $date_post = $_POST['date_post']; }
if (isset($_POST['question'])) { $question = $_POST['question']; }
if (strlen($responce) <=0 or strlen($responce) < 3){
echo "<p style='color:red;'>Вы не заполнили поле либо ввели менее 3-х символов</p>";
}else{
$result = mysql_query("SELECT * FROM vopros WHERE id_q=$id_q"); /*Выводим вопрос*/
$myrow = mysql_fetch_assoc($result); /*Кидаем в массив*/
$result2 = mysql_query("INSERT INTO otvet (id_q,responce,ip,date_post) VALUES ($myrow[id_q],'$responce','$ip')") or die(mysql_error()); /*заносим в базу информацию*/
}
}
if ($result2){
$result3 = mysql_query("SELECT question, responce, date_post
FROM otvet
JOIN vopros
USING (id_q)
WHERE vopros.id_q=$id_q AND otvet.ip='$ip'");
$myrow3 = mysql_fetch_array($result3);
echo "<p><b>Ваш IP:</b> $ip</p> ";
echo "<p><b>Вопрос:</b> $myrow[question]?</p>";
echo "<p><b>Ваши ответы:</b>(".mysql_num_rows($result3).")<ul>";
mysql_data_seek($result3, 0);
while($myrow3 = mysql_fetch_array($result3)){
echo "<li>$myrow3[responce] (ответ добавлен $myrow[date_post])</li>";
}
$result4 = mysql_query("SELECT COUNT(DISTINCT ip) AS t FROM otvet WHERE id_q=$id_q");
$myrow4 = mysql_fetch_array($result4);
echo "</ul><p><b>Количество пользователей ответивших на данный вопрос:</b>$myrow4[t] человек(а)</p><hr />";
}
$ip = $_SERVER['REMOTE_ADDR'];
$query = "SELECT * FROM vopros ORDER BY rand()";
$res = mysql_query($query);
if($res){
if(mysql_num_rows($res) > 0){
$m = mysql_fetch_assoc($res);
}else{
echo "База данных не содержит вопросов"; exit;
}
}else{
echo "Ошибка выборки."; exit;
}
?>
<html>
<head>
<title>Голосование!</title>
</head>
<body>
<p>Всего вопросов в базе данных: <?=mysql_num_rows($res) ?></p>
<p>Текущий случайный вопрос: <br /><li><?=$m[question]; ?>?</li></p>
<form action="<?=$_SERVER['SCRIPT_NAME']?>" method="post">
<textarea cols="40" rows="5" name="responce" id="responce"></textarea>
<input type="hidden" name="ip" value="<?=$ip ?>">
<input type="hidden" name="id_q" value="<?=$m[id_q] ?>">
<p><input type="submit" name="submit" value="Проголосовать!"></p>
</body>
</html>
Но выдает ошибку:
Column count doesn't match value count at row 1
По поводу полей:
vopros
id_q(int)
question - (varchar(255))
otvet
id_q(int)
question(int)
responce(text)
ip(varchar(100))
date_post(datetime)
Помогите добить плз,сегодня край надо. | |
|
|
|
|
|
|
|
для: Digidie
(22.02.2012 в 09:15)
| | если имена правильные проверяйте типы полей
ну а по поводу мануала я уже говорил - это книга... хорошая книга | |
|
|
|
|