Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Оперирование данными из двух таблиц одновременно
 
 автор: Digidie   (21.02.2012 в 08:49)   письмо автору
 
 

Доброго времени суток! Проблема такая, есть база данных, в ней 2 таблицы vopros и otvet. Нужно сформировать запрос таким образом чтобы поля выводились из двух таблиц и вставляли значение из одной таблицы в другую. Что вроде:
$result = mysql_query("SELECT * FROM otvet и поле из таблицы vopros ") и дальше нужно сделать так чтобы можно было в этом же запросе вытащить содержимое из таблицы vopros.
Так же и со вставкой:
$result2 = mysql_query("INSERT INTO otvet () VALUES ('') и из таблицы vopros вставить поле=>$поле")

Помогите пожалуйста, подскажите! :-o

  Ответить  
 
 автор: Valick   (21.02.2012 в 09:02)   письмо автору
 
   для: Digidie   (21.02.2012 в 08:49)
 

покажите структуру таблиц, по какому полю они связаны и расскажите что у вас за проект.
вставить нужно в третью таблицу?

  Ответить  
 
 автор: Digidie   (21.02.2012 в 09:07)   письмо автору
 
   для: Valick   (21.02.2012 в 09:02)
 

в таблице vopros идет всего 2 поля(id,question) в таблице otvet 5 полей(id,responce,question,ip,view). Результат должен быть следующий:
Пользователь отвечает на вопрос, при нажатии "Ответить" вылазеет его ответ,ip,вопрос на который он ответил и количество ответов на этот вопрос. Мне надо чтобы вопрос из таблицы vopros попадал в таблицу otvet в поле question. чтобы потом его вывести. Как то так.

  Ответить  
 
 автор: Valick   (21.02.2012 в 09:20)   письмо автору
 
   для: Digidie   (21.02.2012 в 09:07)
 

понятно
тогда значит так
таблица question
id_q - тип int первичный ключ с автоинкрементом
question - тип varchar или text

таблица otvet
id - тип int первичный ключ с автоинкрементом
id_q - тип int поле связи с таблицей вопросов
responce - тип varchar или text
ip - скорее всего тип int
view - скорее всего тип int (уточните назначение этого поля)

  Ответить  
 
 автор: Digidie   (21.02.2012 в 09:27)   письмо автору
 
   для: Valick   (21.02.2012 в 09:20)
 

таблица vopros:
id - (int) auto_increment первичный ключ
question - (varchar(255))
Таблица otvet:
id - (int) auto_increment первичный ключ
question - стояло text поставлю int
responce - (text)
ip - (varchar(100)) - потому что ip передается через переменную
view - (int) - так будет счётчик
Таблица выглядит таким образом, могу выложить код для большей ясности.

  Ответить  
 
 автор: Valick   (21.02.2012 в 09:39)   письмо автору
 
   для: Digidie   (21.02.2012 в 09:27)
 

question - стояло text поставлю int
лучше обозвать поля как я написал, так сразу видно по какому полю идет связь таблиц
сейчас перейдем к запросам
view - это счетчик чего? количества просмотров? или количества ответов на вопрос, если последнее то это неправильный подход.

  Ответить  
 
 автор: Valick   (21.02.2012 в 09:43)   письмо автору
 
   для: Digidie   (21.02.2012 в 09:27)
 

с формированием ссылки для ответа на вопрос проблемы есть?

  Ответить  
 
 автор: Digidie   (21.02.2012 в 09:48)   письмо автору
 
   для: Valick   (21.02.2012 в 09:43)
 

щас код выложу, он вес написан в одном файле, а вы посмотрите скажите что не так:

index.php

<?php
$db = mysql_connect("localhost","motvei","123456");
mysql_select_db("golos",$db);

$result = mysql_query("SELECT question FROM vopros ORDER BY rand() LIMIT 1");
$myrow = mysql_fetch_array($result);

if (isset($_POST['id'])) { $id = $_POST['id']; }
if (isset($_POST['responce'])) { $responce = $_POST['responce']; }
if (isset($_POST['ip'])) { $ip = $_POST['ip']; }
if (isset($_POST['view'])) { $view = $_POST['view']; }
if (isset($_POST['question'])) { $question = $_POST['question']; }

if ($_REQUEST['submit'])
{
if (strlen($responce) <=0 or strlen($responce) < 3) { echo "<p style='color:red;'>Вы не заполнили поле либо ввели менее 3-х символов</p>"; }
else {
$ip = $_SERVER['REMOTE_ADDR'];
$result2 = mysql_query("INSERT INTO otvet (responce,ip,view) VALUES ('$responce','$ip','$view')");

if ($result2 == 'true')
{ echo "<p style='color:green; font-weight:bold;'>Ваш ответ понятен!</p>"; }
}
}
if ($result2 == 'true')
{
$result3 = mysql_query("SELECT * FROM otvet",$db);
$myrow3 = mysql_fetch_array($result3);

echo " <fieldset><legend> ";
echo " <p><b>Ваш IP:</b> $ip</p> ";
echo "<p><b>Вопрос был:</b> $question</p>";
echo "<p><b>Ваш ответ:</b> <u>$responce</u></p>";
echo "<p><b>На данный вопрос ответило:</b>$view человек(а)</p>";
echo " </legend></fieldset> ";
}
?>
<html>
<head>
<title>Голосование!</title>
</head>
<body>
<p><? echo $myrow['question']; ?></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">
<p><input type="submit" name="submit" value="Проголосовать!"></p>


</body>
</html>
Не судите строго, не профессионал)))

  Ответить  
 
 автор: Valick   (21.02.2012 в 10:13)   письмо автору
 
   для: Digidie   (21.02.2012 в 09:48)
 

постойте, так у вас всетаки голосование?
или вы на базе скрипта голосования пытаетесь сделать что-то другое?

  Ответить  
 
 автор: Digidie   (21.02.2012 в 10:33)   письмо автору
 
   для: Valick   (21.02.2012 в 10:13)
 

Это не голосование. Просто в базе есть вопросы они выпадают случайным образом, это никакой не скрипт который будет где то работать, это просто ТЗ. Поэтому я прошу вас помочь, как лучше сделать, чтобы не ударить лицом в грязь. Суть проблемы вам понятна?

  Ответить  
 
 автор: Valick   (21.02.2012 в 10:46)   письмо автору
 
   для: Digidie   (21.02.2012 в 10:33)
 

суть то понятна, но мне гораздо проще работать с конкретным ТЗ, а то фантазия слишком бурная :)
я уже начал писать свой вариант, но при таком раскладе думаю наверно придется докорректировать ваш вариант
сколько у меня времени на все по все?

  Ответить  
 
 автор: Digidie   (21.02.2012 в 11:21)   письмо автору
 
   для: Valick   (21.02.2012 в 10:46)
 

в принципе я не тороплю. Мне нужно так чтобы не кто то делал) а чтобы я в дальнейшем мог использовать такую конструкцию, короче надо догнать)))

  Ответить  
 
 автор: Valick   (21.02.2012 в 11:56)   письмо автору
 
   для: Digidie   (21.02.2012 в 11:21)
 

Мне нужно так чтобы не кто то делал)
цель не дать вам готовый код, а показать как нужно подходить к решению задачи как её разбить на подзадачи и тд.

  Ответить  
 
 автор: Digidie   (21.02.2012 в 12:00)   письмо автору
 
   для: Valick   (21.02.2012 в 11:56)
 

я вообще в правильном направлении шел?

  Ответить  
 
 автор: Valick   (21.02.2012 в 12:38)   письмо автору
 
   для: Digidie   (21.02.2012 в 12:00)
 

Ну почти, если не принимать во внимание решение проблемы "в лоб", ну и вам не хватает терминов, что бы грамотно объяснить ситуацию. Поэтому приходиться слегка додумывать и задавать кучу наводящих вопросов, что бы додумывать в правильном направлении.

  Ответить  
 
 автор: Digidie   (21.02.2012 в 12:40)   письмо автору
 
   для: Valick   (21.02.2012 в 12:38)
 

код сильно изменится?

  Ответить  
 
 автор: Valick   (21.02.2012 в 12:43)   письмо автору
 
   для: Digidie   (21.02.2012 в 12:40)
 

ну вообще да, и по хорошему будет состоять из не одного файла

  Ответить  
 
 автор: Digidie   (21.02.2012 в 12:54)   письмо автору
 
   для: Valick   (21.02.2012 в 12:43)
 

ну я надеюсь не больше 2 файлов? Чтобы я потом объяснить мог как я это всё делал. И по поводу книжки)

  Ответить  
 
 автор: Valick   (21.02.2012 в 13:01)   письмо автору
 
   для: Digidie   (21.02.2012 в 12:54)
 

я сейчас пытаюсь привести ваш код в порядок, у вас там одна логическая ошибка есть
потом если будет что не понятно спросите по коду

  Ответить  
 
 автор: Digidie   (21.02.2012 в 13:48)   письмо автору
 
   для: Valick   (21.02.2012 в 13:01)
 

как ваши дела?

  Ответить  
 
 автор: Valick   (21.02.2012 в 14:00)   письмо автору
 
   для: Digidie   (21.02.2012 в 13:48)
 

отлично, спасибо что спросили :)
посто работа приехала, занят сейчас и ваш код медленно продвигается

  Ответить  
 
 автор: Digidie   (21.02.2012 в 14:02)   письмо автору
 
   для: Valick   (21.02.2012 в 14:00)
 

до 18:00 успеете?

  Ответить  
 
 автор: Valick   (21.02.2012 в 16:16)   письмо автору
 
   для: Digidie   (21.02.2012 в 14:02)
 

ну примерно вот так

<?php
$db 
mysql_connect("localhost","root","");
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 (
strlen($responce) <=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())";
        
$res mysql_query($query) or die(mysql_error());
    }
}
if (
$res){
    
$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> ";
    echo 
"<p><b>Вопрос:</b> $m[question]?</p>";
    echo 
"<p><b>Ваши ответы:</b>(".mysql_num_rows($res).")<ul>";
    
mysql_data_seek($res0);
    while(
$m mysql_fetch_array($res)){
    echo 
"<li>$m[responce] (ответ добавлен $m[date_post])</li>";
    }
    
$query "SELECT COUNT(DISTINCT ip) AS t FROM otvet WHERE id_q=$id_q";
    
$res mysql_query($query);
    
$c mysql_fetch_array($res);
    echo 
"</ul><p><b>Количество пользователей ответивших на данный вопрос:</b>$c[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>

  Ответить  
 
 автор: Digidie   (22.02.2012 в 08:02)   письмо автору
 
   для: Valick   (21.02.2012 в 16:16)
 

Я так понял что и в таблице vopros и в таблице otvet поле id_q должно быть одинаковым?

  Ответить  
 
 автор: Valick   (22.02.2012 в 08:05)   письмо автору
 
   для: Digidie   (22.02.2012 в 08:02)
 

да, это и есть связь таблиц

  Ответить  
 
 автор: Digidie   (22.02.2012 в 08:09)   письмо автору
 
   для: Valick   (22.02.2012 в 08:05)
 

и ещё откуда мы взяли date_post?

  Ответить  
 
 автор: Valick   (22.02.2012 в 08:46)   письмо автору
 
   для: Digidie   (22.02.2012 в 08:09)
 

это я в таблице ненужное поле veiw заменил на date_post (DATETIME)

  Ответить  
 
 автор: Digidie   (22.02.2012 в 08:57)   письмо автору
 
   для: Valick   (22.02.2012 в 08:46)
 

заменил всё как должно пишет:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in X:\home\localhost\www\zadanie\index.php on line 28

Ваш IP: 127.0.0.1

Вопрос: ?

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in X:\home\localhost\www\zadanie\index.php on line 32

Ваши ответы:()

Warning: mysql_data_seek() expects parameter 1 to be resource, boolean given in X:\home\localhost\www\zadanie\index.php on line 33

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in X:\home\localhost\www\zadanie\index.php on line 34

Можете объяснить из за чего возникают такие ошибки?

  Ответить  
 
 автор: Valick   (22.02.2012 в 09:02)   письмо автору
 
   для: Digidie   (22.02.2012 в 08:57)
 

вы код из браузера скопировали или руками меняли?
имена полей в таблице такая как в моем втором посте?
с учетом замены veiw на date_post
___
и еще учитесь пользоваться конструкцией or die(mysql_error())
сэкономит много нервов и времени :)

  Ответить  
 
 автор: Digidie   (22.02.2012 в 09:15)   письмо автору
 
   для: Valick   (22.02.2012 в 09:02)
 

я код сначала скопировал потом руками) менял. Имена полей точно такие же как в вашем коде, заменил view на date_post.
P.S. Посоветуйте какой нить мануал, чтобы просто и понятно и практика была.

  Ответить  
 
 автор: Valick   (22.02.2012 в 10:16)   письмо автору
 
   для: Digidie   (22.02.2012 в 09:15)
 

если имена правильные проверяйте типы полей
ну а по поводу мануала я уже говорил - это книга... хорошая книга

  Ответить  
 
 автор: Digidie   (22.02.2012 в 10:52)   письмо автору
 
   для: 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)

Помогите добить плз,сегодня край надо.

  Ответить  
 
 автор: 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)

если пока не понятно почему имена такие, то просто поверьте, потом поймете
и код скопируйте из темы без каких либо изменений

  Ответить  
 
 автор: Digidie   (22.02.2012 в 12:13)   письмо автору
 
   для: Valick   (22.02.2012 в 11:57)
 

спасибо большое и правда работает,буду разбираться, и всё таки на счёт книжки, какую можете посоветовать новичку чтобы было понятно написано и самое главное было побольше примеров и кода с объяснениями?

  Ответить  
 
 автор: Valick   (22.02.2012 в 12:21)   письмо автору
 
   для: Digidie   (22.02.2012 в 12:13)
 

вы зря просите побольше примеров и кода
лучше начните с хорошей теории, иначе рискуете упустить важные моменты и MySQL так навсегда и останется "непобеждённой"

размышления
___
можете дойти до книжного магазина и переписать какие есть книги в наличии
напишите их сюда, а я попробую определиться с советом

  Ответить  
 
 автор: Digidie   (22.02.2012 в 12:43)   письмо автору
 
   для: Valick   (22.02.2012 в 12:21)
 

вот кстати эту книжку я вчера и скачал. А так мне нужно mysql и php, чтобы не путаться в элементарных функциях, а так же грамотно сочитать php и mysql. Вот многие например советуют PHP5 в подлиннике Котерова и Костарева, или Лари Ульман mysql конструкция языка, Лаура Томпсон и Люк Веллинг - php и mysql. Вы ведь тоже куда то заглядываете. Посоветуйте.

  Ответить  
 
 автор: Valick   (22.02.2012 в 12:58)   письмо автору
 
   для: Digidie   (22.02.2012 в 12:43)
 

в том-то и дело, что лично я считаю что SQL нужно учить отдельно от других языков
я сейчас не могу объяснить детально почему
грамотное сочетание php и mysql - это так:
PHP - использовать по возможности только для вывода результата в браузер + функции работы с mysql а их так мало что там и учить нечего, весь остальной функционал это MySQL с его разнообразными запросами.
Самое главное уметь составлять правильные запросы, а тут ни PHP ни один другой язык не поможет.
Имея знания в PHP вы будете стараться непроизвольно переложить некоторый функционал на него, потому-что знаете как, а это в корне не верно, лучше при изучении запросов про РНР вообще забыть.

  Ответить  
 
 автор: 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) <=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($res0); /*непонял для чего нужно*/
    
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 получится какая то путаница)

  Ответить  
 
 автор: Valick   (22.02.2012 в 14:15)   письмо автору
3.8 Кб
 
   для: Digidie   (22.02.2012 в 13:26)
 

прикрепил

  Ответить  
 
 автор: Digidie   (22.02.2012 в 15:03)   письмо автору
 
   для: Valick   (22.02.2012 в 14:15)
 

Спасибо большое, разобрался, теперь если вопросы будут возникать, буду обращаться))) если не против)

  Ответить  
 
 автор: cheops   (21.02.2012 в 11:18)   письмо автору
 
   для: Digidie   (21.02.2012 в 08:49)
 

Обычно в этом случае прибегают к двухтабличному запросу,
SELECT
  vopros.question AS question,
  otvet.responce AS responce,
  otvet.ip AS ip,
  otvet.view AS view
FROM
  vopros
LEFT JOIN
  otvet
ON
  vopros.id = otvet.question
только otvet.question должен иметь тип и значение совпадающее с vopros.id.

  Ответить  
 
 автор: Digidie   (21.02.2012 в 11:40)   письмо автору
 
   для: cheops   (21.02.2012 в 11:18)
 

в какой кусок кода вставить в result3 ???

  Ответить  
 
 автор: cheops   (21.02.2012 в 12:19)   письмо автору
 
   для: Digidie   (21.02.2012 в 11:40)
 

Зависит от того, чего вы хотите добиться... да вы сначала просто запрос выполните и посмотрите что он выдает (и вообще работает ли, у меня же нет вашего дампа, чтобы проверить/отладить), это то, что вам нужно или нет? Лучше к цели двигаться маленькими шагами, на каждом шаге четко разбираясь, что происходит.

  Ответить  
 
 автор: Digidie   (21.02.2012 в 12:28)   письмо автору
 
   для: cheops   (21.02.2012 в 12:19)
 

тот запрос который вы написали не дал ничего. А добиться я хочу того чтобы из таблицы vopros поле question вставлялось в таблицу otvet в аналогичное поле. А затем в echo "Вопрос был: $question"; вывести сам вопрос на который ответил пользователь. Как то так. И если есть дайте пожалуйста ссылку на какой нибудь мануал по вот таким запросам?

  Ответить  
 
 автор: Valick   (21.02.2012 в 12:42)   письмо автору
 
   для: Digidie   (21.02.2012 в 12:28)
 

Без хорошей книги вам ни одна ссылка не поможет (немного утрированно).
В интернете столько лажи, что не зная правильного ответа практически не возможно его найти. Хорошая книга дает вам базу с учетом которой вы уже сможете самомтоятельно оценить правильность ответа на свои вопросы.

  Ответить  
 
 автор: Digidie   (21.02.2012 в 12:47)   письмо автору
 
   для: Valick   (21.02.2012 в 12:42)
 

в теории можно быть с 7 пядями во лбу))) а на практике накласть. Но как говориться нет дыма без огня. А так можете что нить посоветовать из книжки? И ещё, код сильно изменится?

  Ответить  
 
 автор: cheops   (21.02.2012 в 13:15)   письмо автору
 
   для: Digidie   (21.02.2012 в 12:47)
 

>И ещё, код сильно изменится?
Лучше сначала спроектировать базу данных, не обращая внимания на код. Когда вы будете уверены, что все сущности описаны и связи расставлены, можно начинать кодировать. Код можно переписать в любой момент, это не сложно, а вот живую работающую базу перекраивать гораздо сложнее и потребуется составлять много довольно изощренных запросов. Если такого опыта нет, лучше сразу с самого начала тщательно проектировать базу данных.

  Ответить  
 
 автор: cheops   (21.02.2012 в 13:13)   письмо автору
 
   для: Digidie   (21.02.2012 в 12:28)
 

Потому, что сначала нужно преобразовать otvet.question таким образом, чтобы таблицы были связаны. Вам не обязательно вставлять данные физически, достаточно связать таблицы друг с другом и вы получите возможность в запросе получать данные сразу из двух таблиц.

>И если есть дайте пожалуйста ссылку на какой нибудь мануал по вот таким запросам?
Мы написали несколько книг по MySQL, они правда бумажные. Если хотите именно электронную документацию, можно обратиться к русской документации на нашем сайте. Это, конечно, старенький перевод, но там есть руководство (глава 4, если не ошибаюсь), которое вводит в курс дела. Однако, SQL, как и любой язык программирования нужно серьезно изучать - он далеко не прост и имеет декларативную природу (т.е. допустим знание императивного языка программирования в его освоении вам уже не поможет).

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования