За последние 24 часа нас посетили 17455 программистов и 1686 роботов. Сейчас ищут 963 программиста ...

помогите со списком

Тема в разделе "PHP для новичков", создана пользователем writer, 19 авг 2012.

  1. writer

    writer Активный пользователь

    С нами с:
    17 авг 2012
    Сообщения:
    131
    Симпатии:
    0
    все равно не могу разобратся никак(((

    Есть таблица (это упрощенный вариант а то там такое кол-во кода что ппц)
    таблица дома:
    id|name

    выводится в форму:
    1 | первый | <url>просмотреть жильцов</url>
    2 | второй |<url> просмотреть жильцов</url>

    и есть таблица жильцов
    id | name

    при нажатии на ссылку мне надо получить список проживающих в этом доме.
    Пробовал сделать через обьединение таблиц но не получается вывести в форму это.SQL запросы то написаны везде а как вывести на страницу результат не могу найти.
    И обьяснил бы кто проще из чего состоят запросы типа
    select t_resources.t_name, t_users.t_nick
    from t_resources
    inner join t_users on t_users.t_id = t_resources.t_userid
     
  2. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Зачем создавать много тем, вам так никто не поможет...
     
  3. делаешь две таблицы:

    nomer_doma | imya_doma


    id | name | nomer_doma


    в первой таблице номер дома всегда уникален.
    дальше просто пробегаешь по второй таблице и если его номер дома совпадает с нужным - выводишь этого юзера
     
  4. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Добавь поле id дома в таблицу с жильцами.
     
  5. writer

    writer Активный пользователь

    С нами с:
    17 авг 2012
    Сообщения:
    131
    Симпатии:
    0
    Это я знаю. как реализовать это? есть какой нибудь простой иточник где напсано как это сделать?
     
  6. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Код (PHP):
    1. SELECT `us`.*,`hs`.* 
    2. FROM `users` as `us` 
    3. INNER JOIN `houses` as `hs` 
    4. ON `hs`.`id`=`us`.`house_id`
    5. WHERE `login`='login' 
    6. LIMIT 0,1

    Это я так примерно показал, как структурируются запросы.
    Вам же придется составлять, самому!
     
  7. writer

    writer Активный пользователь

    С нами с:
    17 авг 2012
    Сообщения:
    131
    Симпатии:
    0
    Добавлено спустя 3 минуты 13 секунд:
    Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in I:\minitender\php\u4ast.php on line 25

    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in I:\minitender\php\u4ast.php on line 28
    выдает такие ошибки. Значит где то не обозначен массив?
    В SQL если все прописывать обьединение то оно проходит успешно. остается вопрос вывода через пхп.
     
  8. Ke1eth

    Ke1eth Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    как-то невнимательно, где ON в JOIN?
     
  9. writer

    writer Активный пользователь

    С нами с:
    17 авг 2012
    Сообщения:
    131
    Симпатии:
    0
    брал с вики запрос. JOIN стоит в запросе. А про ОN буду читать искать...

    Добавлено спустя 15 минут 7 секунд:
    Код (Text):
    1. $query = "SELECT formzakaz FROM formazakaz INNER JOIN tender ON formzakaz.id=tender.forid";
    так?)))

    Добавлено спустя 41 минуту 4 секунды:
    Код (Text):
    1. $sql = "EXPLAIN SELECT * \n"
    2.     . "FROM\n"
    3.     . " formzakaz\n"
    4.     . " INNER JOIN \n"
    5.     . " tender \n"
    6.     . " ON formzakaz.id = tender.forid";
    вот при выполнении запроса через SQL.через php показывает ошибки(((
     
  10. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Код (PHP):
    1. <?php
    2. function td($td,$id=null) {
    3.     $id=($id)?' id="'.$id.'"':'';
    4.     return'<td'.$id.'>
    5.         '.$td.'
    6.     </td>';
    7. }
    8.  
    9. $sql=mysql_query("SELECT `fz`.*,`tr`.* FROM `formzakaz` as `fz` INNER JOIN `trender` as `tr` ON `tr`.id=`fz`.`forid`");
    10. while($array=mysql_fetch_assoc($sql)) {
    11.     $table.='<tr>
    12.                 '.td($array[''],'one').'
    13.                 '.td($array[''],'tho').'
    14.                 
    15.                 
    16.                 '.td($array[''],'id'.$array['forid']).'
    17.             </tr>';
    18. }
    19. ?>
    Вывод:
    Код (PHP):
    1. <table>
    2.     <?=$table?>
    3. </table>

    Сделал как пример...

    Разберетесь...
     
  11. writer

    writer Активный пользователь

    С нами с:
    17 авг 2012
    Сообщения:
    131
    Симпатии:
    0
    Спасибо.все понял но что такое `fz``tr` Это что такое?
     
  12. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    `formzakaz` as `fz`

    Это переименованные таблицы через as, взята первая и последняя (буквы), для своей же удобности.

    Также вы можете перечислять через " , ", при этом нужно будет убрать " * "

    Там где хотим не все сразу выводить, а перечислить свои (`fz`.* нужно будет убрать):

    SELECT `fz`.`id` as `fz_id`,`tr`.`id` as `tr_id` ...

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

    И выводить уже как:

    array['fz_id']
    array['tr_id']


    P.S. `tr`.id там где условие ON в запросе нужно тоже добавить " `` "
     
  13. writer

    writer Активный пользователь

    С нами с:
    17 авг 2012
    Сообщения:
    131
    Симпатии:
    0
    Все сделал но не могу понять что за ошибка
    Warning: mysql_fetch_assoc(): supplied resource is not a valid MySQL result resource in I:\minitender\php\u4ast.php on line 27
    к БД подключение верное.на всех страницах аналогично все прописано и подключается.
     
  14. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Код (PHP):
    1. $sql=mysql_query("SELECT `fz`.*,`tr`.* FROM `formzakaz` as `fz` INNER JOIN `trender` as `tr` ON `tr`.`id`=`fz`.`forid`")or exit(mysql_error().'<br>'.mysql_errno()); 
    Что скажет?
     
  15. writer

    writer Активный пользователь

    С нами с:
    17 авг 2012
    Сообщения:
    131
    Симпатии:
    0
    No database selected
    1046
    мне уже стыдно до нимогу,но я не понимаю что не так))))

    Добавлено спустя 11 минут 22 секунды:
    Код (Text):
    1. <?php
    2. $db_host="127.0.0.1";   // обычно не нужно изменять
    3. $db_user="root";    // имя пользователя БД
    4. $db_password="";    // пароль БД
    5. $db_name = "zakaz";  // имя БД
    6.  
    7.  
    8.  
    9.  
    10.  
    11. // соединение с БД
    12. $sql = mysql_connect($db_host, $db_user, $db_password) or die (mysql_error());
    13.  
    14. mysql_query("SET NAMES 'cp1251'");
    15. mysql_query("SET CHARACTER SET 'cp1251'");
    16.  
    17.  
    18.  
    19. function td($td,$id=null) {
    20.     $id=($id)?' id="'.$id.'"':'';
    21.     return'<td'.$id.'>
    22.         '.$td.'
    23.     </td>';
    24. }
    25.  
    26. $sql=mysql_query("SELECT `fz`.*,`tr`.* FROM formzakaz as `fz` INNER JOIN tender as `tr` ON `fz`.`id`=`tr`.`forid`")or exit(mysql_error().'<br>'.mysql_errno());
    27.  
    28. while($array=mysql_fetch_assoc($sql)) {
    29.     $table.='<tr>
    30.                 '.td($array['id'],'one').'
    31.                 '.td($array['forid'],'tho').'
    32.                
    33.                
    34.                 '.td($array['id'],'id'.$array['forid']).'
    35.             </tr>';
    36. }
    37. echo '<table>
    38.     <?=$table?>
    39. </table>';
    40.  
    41.  
    42. ?>
    таблицы formzakaz
    id|name...

    tender
    id|forid|name...
     
  16. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Видимо, что - то с подключением не то или базы нет =)

    Код (PHP):
    1. $connect=false;
    2. if(!$connect=mysql_connect('localhost','root','password')) {
    3.     exit(mysql_error().' <> '.mysql_errno());
    4. } else if(!mysql_select_db('dbase',$connect)) {
    5.     exit(mysql_error().' <> '.mysql_errno());
    6. } else {
    7.     mysql_set_charset('utf8',$connect);
    8. }  
    Код (PHP):
    1. function query($query) {
    2. global $connect;
    3.     if($connect && ''!=$query) {
    4.         return mysql_query($query,$connect);
    5.     }
    6. return false;
    7. } 
    Код (PHP):
    1. $sql=query("SELECT `fz`.*,`tr`.* FROM `formzakaz` as `fz` INNER JOIN `trender` as `tr` ON `fz`.`id`=`tr`.`forid`"); 
     
  17. writer

    writer Активный пользователь

    С нами с:
    17 авг 2012
    Сообщения:
    131
    Симпатии:
    0
    БД обе есть. я на половине страниц вижу их отображение. ввод данных проходит на ура и правильное отображение тоже.Если убрать код этот и прописать допустим цикл вывода из любой из БД то проходит.
    А такой вопрос...Вот то что я скинул чуть выше.код это скрипт. я его положил на кнопку и на ней прописал
    <a href="u4astniki.php?id=' . $sql_data['id'] . '">Участники</a>
    верно же?
     
  18. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Базы нет...
    Ну вот даже видно:

    Код (PHP):
    1. // соединение с БД
    2. $sql = mysql_connect($db_host, $db_user, $db_password) or die (mysql_error());
    3.  
    4. mysql_query("SET NAMES 'cp1251'"); 
    А самой бд нет...


    Поставьте, что я дал и не надо велик изобретать.
    Сделайте файл с функциями и подключайте когда нужно.
    А вообще лучше это делать 1 раз, а файлы подключать куда надо после соединений.
     
  19. writer

    writer Активный пользователь

    С нами с:
    17 авг 2012
    Сообщения:
    131
    Симпатии:
    0
    Notice: Undefined variable: table in I:\minitender\php\u4ast.php on line 27
    все теперь такая ошибка.
    видимо когда тестил подключение и стер строчку одну))сори что не поверил)))
     
  20. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    перед while циклом поставьте:

    Код (PHP):
    1. $table=''; 
    либо там где:

    Код (PHP):
    1. <?=isset($table)?$table:''?>
    То до цикла не надо будет ставить, а если вы до цикла поставите, то не надо делать isset
    так и оставить

    Код (PHP):
    1. <?=$table?>
    И это не ошибка, а нотис, как предупреждение. о том, что переменная не была определена ранее.
     
  21. writer

    writer Активный пользователь

    С нами с:
    17 авг 2012
    Сообщения:
    131
    Симпатии:
    0
    ну вот наконец пустое окно без ошибок...чтобы пустоту убрать надо выбирать какие то значения в этой части?
    Код (Text):
    1. "SELECT `fz`.*,`tr`.*
    Добавлено спустя 57 секунд:
    "SELECT `fz`.id,`fz`.name,`tr`.forid

    Добавлено спустя 5 минут 50 секунд:
    Код (Text):
    1.  
    2. <table>
    3.     <?=$table?>
    4. </table>
     
  22. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    У вас должно выводиться все колонки если так `fz`.*,`tr`.* написать.

    Почему белое пустое окно!?
     
  23. writer

    writer Активный пользователь

    С нами с:
    17 авг 2012
    Сообщения:
    131
    Симпатии:
    0
    Код (Text):
    1. <?php
    2. $db_host='127.0.0.1';// ваш адрес где находится, хостится ваша база данных
    3.     $db_login='root';// логин доступ к базе данных
    4.     $db_pass='';// пароль доступа к базе данных
    5.     $db_name='zakaz';// Имя базы данных с которой вы хотите работать, так как их может быть множество
    6.     $db = mysql_connect($db_host,$db_login,$db_pass);
    7.         if(!$db) echo 'Ошибка подключения'; // Нужно быть уверенным, что подключение удачно
    8.     mysql_select_db($db_name);
    9. mysql_query("SET NAMES 'cp1251'");
    10. mysql_query("SET CHARACTER SET 'cp1251'");
    11.  
    12.  
    13. function td($td,$id=null) {
    14.     $id=($id)?' id="'.$id.'"':'';
    15.     return'<td'.$id.'>
    16.         '.$td.'
    17.     </td>';
    18. }
    19.  
    20. $sql=mysql_query("SELECT `fz`.*,`tr`.* FROM formzakaz as `fz` INNER JOIN tender as `tr` ON `fz`.`id`=`tr`.`forid`")or exit(mysql_error().'<br>'.mysql_errno());
    21. $table='';
    22. echo '<table>';
    23. while($array=mysql_fetch_assoc($sql)) {
    24.     $table.='<tr style="color:red;">
    25.                 '.td($array['forid'],'one').'
    26.                 '.td($array['id'],'tho').'
    27.                
    28.                
    29.                 '.td($array['name'].'id'.$array['forid']).'</tr>';
    30.            
    31. }
    32. echo '
    33.     <?=$table?>
    34. </table>';
    35.  
    36.  
    37. ?>
    не знаю...
     
  24. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Жесть( Вы пишете код и не видите?
    Или не понимаете, что пишете?

    Код (PHP):
    1. mysql_select_db($db_name); 
    А где $db?

    Код (PHP):
    1. mysql_select_db($db_name,$db); 
    Ну вот зачем это:

    Код (PHP):
    1. mysql_query("SET NAMES 'cp1251'");
    2. mysql_query("SET CHARACTER SET 'cp1251'"); 
    Я что получается, просто так написал, чтобы вы не посмотрели?

    Код (PHP):
    1. mysql_set_charset('cp1251',$db); 
    Вы же не понятно куда отдаете подключения =)
    Там так, тут так пусть, а да сойдет =)
     
  25. writer

    writer Активный пользователь

    С нами с:
    17 авг 2012
    Сообщения:
    131
    Симпатии:
    0
    нигде же этого у меня нету и работает...поставил как показал опять белый экран...