|
|
|
|
<?
echo '<pre>';
print_r($end_massivev); [b] //Здесь выводит массив, а ниже в цикле ничего не выводит.[/b]
echo '</pre>';
$end_massivev = select_users();
$k=0;
foreach ($end_massivev as $item) {
if ($item['status']==1) {$status='Открыт';} else {$status='Завершена';}
echo ' <tr>
<td>'.$k.'</td>
<td>'.$item['title'][$k].'</td>
<td>'.date("d.m.y",$item['start_time']).'</td>
<td><img width="40" src="'.$item['img_l'].'"/>'.$item['left'].'</td>
<td><img width="40" src="'.$item['img_r'].'"/>'.$item['right'].'</td>
<td>'.$item['votes'].'</td>
<td>'.$status.'</td>
</tr>';
$k++;
}
?>
|
| |
|
|
|
|
|
|
|
для: OLi
(09.01.2012 в 15:53)
| | Если поставить print_r после forech() то уже ничего не выводит. | |
|
|
|
|
|
|
|
для: OLi
(09.01.2012 в 15:53)
| | попробуйте для начала просто вывести $item
<?php
foreach ($end_massivev as $item) {
echo $item."<br />";
}
?>
|
откуда берётся массив $end_massivev ? | |
|
|
|
|
|
|
|
для: Slo_Nik
(09.01.2012 в 15:57)
| | Так выводит как вы предложили. В чем тогда стопор, если ошибок синтаксических не выдает? | |
|
|
|
|
|
|
|
для: OLi
(09.01.2012 в 15:59)
| | сделайте так
<?php
error_reporting(E_ALL);
foreach($end_massivev as $k => $item){
echo $k . " - " . $item."<br />";
// в переменной $item хранится значение индекса $k;
// тогда получается, что надо сравнивать чуть по другому
$status = ($k['status'] == 1) ? "Открыт" : "Завершена";
}
?>
|
p.s. error_reporting(E_ALL); впишите в Ваш код так же как и в моём варианте и посмотрите, будут ошибки/предупреждение или нет. | |
|
|
|
|
|
|
|
для: Slo_Nik
(09.01.2012 в 16:02)
| | Вроде, ошибок нету, возвратило только это:
0 - Array
title - Как быть легантным? | |
|
|
|
|
|
|
|
для: OLi
(09.01.2012 в 16:21)
| | покажите, что возвращает Ваш код.
что возвращает в моём варианте?
откуда массив берёте?
возможно Вам надо сделать вложенный цикл, если $item == Array | |
|
|
|
|
|
|
|
для: Slo_Nik
(09.01.2012 в 17:17)
| | Вот код:
<?
function select_users () {
$select_categoty=mysql_query("Select * from `notes` WHERE user='".intval($_COOKIE['id'])."'");
if (mysql_num_rows($select_categoty)>0){
$row_cat = mysql_fetch_row($select_categoty);
foreach ($row_cat as $key) {
$select_bitva=mysql_query("select * from `buttles` WHERE id='".$key."'");
while ($select_bitva_row = mysql_fetch_array($select_bitva)) {
$end_massive['title']=$select_bitva_row['title'];
$select_protivniki=mysql_query("select * from `protivniki` WHERE link='".$select_bitva_row['link']."'");
while ($select_bitva_protivniki = mysql_fetch_array($select_protivniki)){
$end_massive[]=$select_bitva_protivniki;
}
}
}
} else { echo 'У вас нет закладок';}
return $end_massive;
}
//////////////////////////////////////////////////////////
$end_massivev = select_users();
$k=0;
foreach ($end_massivev as $item) {
echo '<tr>
<td>'.$k.'</td>
<td>'.$item['title'][$k].'</td>
<td>'.date("d.m.y",$item['start_time']).'</td>
<td><img width="40" src="'.$item['img_l'].'"/>'.$item['left'].'</td>
<td><img width="40" src="'.$item['img_r'].'"/>'.$item['right'].'</td>
<td>'.$item['votes'].'</td>
<td>'.$status.'</td>
</tr>';
$k++;
}
?>
|
В моем случае ничего не возвращает...В вашем возвращает на страницу следующее:
title - Что круче: Google или Mozilla
0 - Array
|
| |
|
|
|
|
|
|
|
для: OLi
(09.01.2012 в 17:22)
| | правильно, так и будет возвращать потому, что Вы массив упаковали ещё в один массив и применили не нужный foreach()
Вот, у Вас уже есть массив
<?php
/* в данном случае mysql_fetch_array() возвратил массив, Вам осталось в цикле while() вывести данные
*/
while ($select_bitva_protivniki = mysql_fetch_array($select_protivniki)){
/* вот это лишнее */
// $end_massive[]=$select_bitva_protivniki;
echo "<pre>";
print_r($select_bitva_protivniki);
echo "</pre>";
/* формируйте html вывод здесь */
}
?>
|
получается, что foreach лишний | |
|
|
|
|
|
|
|
для: OLi
(09.01.2012 в 17:22)
| | Я тут немного запутался, возможно и Вас ввёл в заблуждение...
Не обратил внимание, что Вы это в функции пытаетесь сделать...
Но и в функции у Вас что то не то...
вот здесь
foreach ($row_cat as $key) {
В запросе Вы пытаетесь из таблицы "notes" получить данные по id пользователя
Что тогда Вы ожидаете в $key?
Скорей всего и этот foreach() тут лишний | |
|
|
|
|
|
|
|
для: Slo_Nik
(09.01.2012 в 17:55)
| | Да, вот теперь я запутался сам.. | |
|
|
|
|
|
|
|
для: OLi
(09.01.2012 в 17:22)
| | Вот, немного подправил, но не зная точно, что Вам надо трудно дать правильное решение
<?php
error_reporting(E_ALL);
function select_users () {
$select_categoty=mysql_query("SELECT * FROM `notes` WHERE user='".intval($_COOKIE['id'])."'");
if (mysql_num_rows($select_categoty)>0){
while($arr_1 = mysql_fetch_assoc($select_categoty)){
/* посмотрите, что вернул Вам запрос */
echo "<pre>";
print_r($arr_1)
echo "</pre>";
/* и на основании того, что Вам вернул запрос уже составляйте запросы к другим таблицам.
без foreach()
а для работы с массивом, который возвращает mysql_fetch_row() удобно использовать конструкцию list()*/
}
}
else{
echo 'У вас нет закладок';
}
return $end_massive;
}
|
| |
|
|
|
|
|
|
|
для: Slo_Nik
(09.01.2012 в 18:13)
| | Смысл понял, но в ничего не выводит print_r | |
|
|
|
|
|
|
|
для: OLi
(09.01.2012 в 19:08)
| | Сделал так:
<?
function select_users () {
$select_categoty=mysql_query("Select * from `notes` WHERE user='".intval($_COOKIE['id'])."'");
if (mysql_num_rows($select_categoty)>0){
while( $row_cat = mysql_fetch_row($select_categoty)) {
$select_bitva=mysql_query("select * from `buttles` WHERE id='".$key."'");
while ($select_bitva_row = mysql_fetch_array($select_bitva)) {
$end_massive['title']=$select_bitva_row['title'];
$select_protivniki=mysql_query("select * from `protivniki` WHERE link='".$select_bitva_row['link']."'");
while ($select_bitva_protivniki = mysql_fetch_array($select_protivniki)){
$end_massive[]=$select_bitva_protivniki;
}
}
}
//////////////////
} else { echo 'У вас нет закладок';}
return $end_massive;
}
?>
|
$end_massive = select_users();
print_r($end_massive); // ничего не вывело
|
Первый запрос возвращает 4 записи | |
|
|
|
|
|
|
|
для: OLi
(09.01.2012 в 19:17)
| | Вот здесь while( $row_cat = mysql_fetch_row($select_categoty)) { удобней будет использовать конструкцию list()
что-то вот так list($first; $second) = mysql_fetxh_row($select_categoty);
А так как Вы делаете, то я бы лучше использовал mysql_fetch_assoc($select_categoty);
и убрал бы цикл while() так как запись для одного конкретного пользователя
Потом во втором бы запросе подставлял в условие WHERE id = '' значение из первого запроса, к чему должно быть приравнено?
вот очередная редакция )))
<?php
error_reporting(E_ALL);
function select_users () {
$select_categoty=mysql_query("Select * from `notes` WHERE user='".intval($_COOKIE['id'])."'");
if (mysql_num_rows($select_categoty)>0){
$row_cat = mysql_fetch_assoc($select_categoty);
/* вот из результата запроса взял какое то значение и подставил в условие WHERE
например $row_cat['key'] или что там у Вас есть */
$select_bitva=mysql_query("select * from `buttles` WHERE id='".$row_cat['key']."'");
while ($select_bitva_row = mysql_fetch_array($select_bitva)) {
/* для третьего запроса в условие WHERE подставил бы значение из второго запроса, то которое требуется
вот как то так */
}
}
else{
echo 'У вас нет закладок';
}
return $end_massive;
}
|
хотя можно объеденить эти запросы в один при помощи JOIN, но это уже другая тема.
Начните с простых пока запросов, потом можно будет объединить...
p.s. конечно же для второго и третьего запроса while() нужен.... | |
|
|
|
|
|
|
|
для: OLi
(09.01.2012 в 19:08)
| | Да, действительно, что то я уже не то творю....
Сам запутался и Вас запутал
Надо подумать немного | |
|
|
|
|
|
|
|
для: Slo_Nik
(09.01.2012 в 19:19)
| | Чтобы было понятно, логика запросов такая:
Вывести из таблицы notes все записи для пользователя с id - затем вывести записи из таблицы protivniki где id=id записям от прошлого запроса, и еще с другой таблицы вывести так же где id=id и все это в один упорядоченный для каждой записи массив.. | |
|
|
|
|
|
|
|
для: OLi
(09.01.2012 в 19:23)
| | Я уже понял. выше очередная редакция кода... )))
смысл такой, что foreach() лишний цикл в коде.
функции для работы с базой данных уже возвращают массивы, не все конечно, так что не надо лишний массив делать без особой надобности.
а цикл while() помогает обойти эти массивы. | |
|
|
|
|
|
|
|
для: Slo_Nik
(09.01.2012 в 19:53)
| | Ну вроде уже понятнее стало, получается что для 2-го запроса, массив $end_massive; наполнять как:
while ($select_bitva_row = mysql_fetch_array($select_bitva)) {
$end_massive[]=$select_bitva_row['title'];
.....
//По всем полям полям?
}
|
| |
|
|
|
|
|
|
|
для: OLi
(09.01.2012 в 20:24)
| | Да вот сложность, должен возвратить 2 записи, а в массив закидывае одну:
Array
(
[title] => Какой диван круче?
[end_time] => 1326819200
[id] => 46
[img_l] => bitva_images/803_1_jpg
[img_r] => bitva_images/151_2_jpg
[left] => Диван №1
[right] => Диван №2
[votes_l] => 12
[votes_r] => 2
)
|
function select_users () {
$select_categoty=mysql_query("Select * from `notes` WHERE user='".intval($_COOKIE['id'])."'");
if (mysql_num_rows($select_categoty)>0){
$row_cat = mysql_fetch_assoc($select_categoty);
$select_bitva=mysql_query("select * from `buttles` WHERE id='".$row_cat['bitva_id']."'");
while ($select_bitva_row = mysql_fetch_array($select_bitva)) {
$end_massive['title']=$select_bitva_row['title'];
$end_massive['end_time']=$select_bitva_row['end_time'];
$select_bitva_p=mysql_query("select * from `protivniki` WHERE link='".$select_bitva_row['link']."'");
while ($select_bitva_row_p = mysql_fetch_array($select_bitva_p)) {
$end_massive['id']=$select_bitva_row_p['id'];
$end_massive['img_l']=$select_bitva_row_p['img_l'];
$end_massive['img_r']=$select_bitva_row_p['img_r'];
$end_massive['left']=$select_bitva_row_p['left'];
$end_massive['right']=$select_bitva_row_p['right'];
$end_massive['votes_l']=$select_bitva_row_p['votes_l'];
$end_massive['votes_r']=$select_bitva_row_p['votes_r'];
}
}
}
else{
echo 'У вас нет закладок';
}
return $end_massive;
}
|
А на выводе foreach вообще дает 9 записей | |
|
|
|
|
|
|
|
для: OLi
(09.01.2012 в 20:24)
| | вроде да....
только массив $end_massive получается индексным
то есть для обращения к элементам массива надо использовать числовые индексы....
$end_massive[1];
а лучше бы конечно делать ассоциативный массив
получится что то вроде
$end_massive['title']=$select_bitva_row['title'];
ну вот как то так.... вроде ни чего не напутал )))
p.s. Ну а теперь можно попробовать объединить эти запросы в один сложный... если конечно есть желание.
Плюсом будет меньше обращений к базе данных и циклов на выводе результата. | |
|
|
|
|
|
|
|
для: Slo_Nik
(09.01.2012 в 20:55)
| | Думаю, лучше сложный запрос попробовать сделать, потому как запутался так, если подскажете | |
|
|
|
|
|
|
|
для: OLi
(09.01.2012 в 21:01)
| | Тогда лучше создать тему в другой ветке форума, специально для MYSQL
Поищите информация по вложенным запросам, объединение таблиц в одном запросе и вот оператор JOIN есть такой | |
|
|
|