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

Форум MySQL

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Оперирование данными из двух таблиц одновременно

Сообщения:  [1-10]    [11-20]   [21-30]   [31-40]  [41-48] 

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

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

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

прикрепил

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

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

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

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

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

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

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

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

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

  Ответить  

Сообщения:  [1-10]    [11-20]   [21-30]   [31-40]  [41-48] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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