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

Форум MySQL

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

 

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

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

тема: Создание таблицы по SQL-запросу.
 
 автор: Швейк   (21.02.2005 в 14:23)
 
 

Добрый день!
Возникла интересная проблема - пока не вижу даже алгоритма как её решить.
Очень надеюсь, что Вы мне поможите.
Итак, исходные данные:
Таблица, содержащая информация о персонале. Имеются поля filed1, filed2, filed3 и т.д.
Простым запросом типа
SELECT field2, field5, filed8 FROM table
можно вывести только нужные поля.
В PHP реализация довольно проста


$output = "";
  $query=SELECT field2, field5, filed8 FROM table;
  $result = mysql_query($query, $dbConn); // посылаем запрос к базе данных

  $output .= "<table border=1>\n";
  // получаем название столбцов
  // получаем название полей
  $output .= "<tr>\n"; 
  while ($field = mysql_fetch_field($result)){
    $output .= "<th>$field->name</th>\n";
  } // end while
  $output .= "</tr>\n\n";

  //get row data as an associative array
  while ($row = mysql_fetch_assoc($result)){
    $output .= "<tr>\n";
    //look at each field
    foreach ($row as $col=>$val){
      $output .= "  <td>$val</td>\n";
    } // end foreach
    $output .= "</tr>\n\n";
  }// end while

  $output .= "</table>\n";


Здесь у меня SQL-запрос выводится в виде красивой HTML-таблицы. Пока все ясно и понятно. А вот теперь - вопрос
Информация в таблице выводиться как обычный текст. А как сдеалть, что бы, например значения колонки field2 выводились как ссылки? Кликнув на которую открывалась новая страница с подробной информацией о этом человеке?
Вот, все бьюсь, никак не могу реализовать задуманное.

С уважением,
Бравый Солдат.

   
 
 автор: Valeri   (21.02.2005 в 15:02)   письмо автору
 
   для: Швейк   (21.02.2005 в 14:23)
 

ну ты и накрутил, аж смотреть страшно.
а ссылка делается просто, к примеру тебе надо что-бы она была во втором столбце

<td><a href="user.php?user=$field5">$field5</a></td>

тоесть пишешь на какой файл тебе надо перейти и с какими параметрами, если надо то можно добвить target

   
 
 автор: Швейк   (21.02.2005 в 21:48)
 
   для: Valeri   (21.02.2005 в 15:02)
 

Брр...
Пока что-то туго соображаю, но идею усек.
Только куда этот линк вставлять?
Извини, торможу страшно - весь день за компом.

С уважением,
Бравый Солдат.

   
 
 автор: Швейк   (21.02.2005 в 21:57)
 
   для: Valeri   (21.02.2005 в 15:02)
 

Ага, что-то проясняется.
Однако, допустим, я смогу значения второго столбца (например, filed5) вывести не как простой текст, а как ссылку.
Так как в базе данных может быть и 2 000 записей, то делать каждый линк на свою страницу нецелесообразно (да и редактировать базу потом зашьешся). Логично сделать линк со всех элементов на одну-единственную страницу, на которой будет размещена функция, выводящая на экран полную информацию о данной персоне. Правильно?
А вот теперь вопрос - а как эта функция узнает, на какой именно линк я нажал? Если бы это была форма, а не ссылка, тогда проще - передал скрытым полем userID и дело в шляпе. Но пользователю проще на фамилию нажать, чем на кпопку рядом с фамилией, такая у них психика...
А как подобный алгоритм воспроизвести с ссылкой?

Извините, если запутанно.

С уважением,
Бравый Солдат.

   
 
 автор: cheops   (21.02.2005 в 22:40)   письмо автору
 
   для: Швейк   (21.02.2005 в 21:57)
 

Данная страница узнает это по переданому параметру user, значение которого будет равно $field5
<td><a href="user.php?user=$field5">$field5</a></td>

Т.е. на странице user.php можно вывести
<?php
  
echo "Это личные данные ".$_GET['user']; // $_GET['user'] содержит $field5
?>

Обычно для этих целей в таблицу вводят первичный ключ и именно его и передают в качестве параметра (он уникален, в отличие от имён).

   
 
 автор: Швейк   (24.02.2005 в 12:31)
 
   для: cheops   (21.02.2005 в 22:40)
 

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



function all_apllTable($all_apll_query){
  // по заданному запросу выводит список персонала
  //в виде HTML таблицы
  global $dbConn;
  $output = "";
  $all_apll_query = <<<HERE
     SELECT
              applicants.applID AS 'Порядковый номер',
              applicants.lname AS ' Фамилия',
              applicants.fname AS ' Имя',
              vacancy.description AS ' Претендуемая вакансия',
              bsphere.description AS ' Бизнес-сфера',
              applicants.phone AS 'Телефон'
     FROM     applicants,  vacancy, bsphere
     WHERE    applicants.vacancyID = vacancy.vacancyID
     AND      applicants.bsphereID = bsphere.bsphereID
     ORDER BY applicants.lname

HERE;

$result = mysql_query($all_apll_query, $dbConn);

  $output .= "<table border=1>\n";
  // получаем название столбцов
  $output .= "<tr>\n";
  while ($field = mysql_fetch_field($result))
  {
     $output .= "<th>$field->name</th>\n";
  } 
  $output .= "</tr>\n\n";

  // получаем данные из таблицы как ассоц. массив
  while ($row = mysql_fetch_assoc($result))
  {
    $output .= "<tr>\n";
    //look at each field
    foreach ($row as $col=>$val){
      if ($col=='Фамилия')
      {
        $output .= "<td><a href=user_info.php?variable=$val>$val</a></td>\n";
      } 
      else
      {
        $output .= "  <td>$val</td>\n";
      } 
    } 
    $output .= "</tr>\n\n";
  }

  $output .= "</table>\n";
  return $output;



Как бы вот такая функция. Довольно простая, но ни как не могу передать в гиперссылке значение поля User ID (уникальный первичный ключ).
В данной ситуации в строке

$output .= "<td><a href=user_info.php?variable=$val>$val</a></td>\n";

формируется ссылка на файл user_info.php и в этой ссылке передается переменная variable, которй присваивается значение текущей фамилии, список которых перебирает цикл.

Вопрос
А как передать значение первичного ключа? Каокй командной объяснить, что надо передать не фамилию, а Uder ID данной строки?

С уважением,
Бравый Солдат.

   
 
 автор: Valeri   (24.02.2005 в 14:34)   письмо автору
 
   для: Швейк   (24.02.2005 в 12:31)
 

по идеи вроде должно так, у тебя $col присвоено значение фамилии, присвой ей значение Uder ID и должно передаться тогда Uder ID

   
 
 автор: cheops   (24.02.2005 в 19:31)   письмо автору
 
   для: Швейк   (24.02.2005 в 12:31)
 

Хм... стоит наверное точно так же писать, только подставить параметры первичного ключа
<?php
  
if ($col=='Порядковый номер'
  { 
    
$output .= "<td><a href=user_info.php?id=$val>$val</a></td>\n"
  }
?>

   
 
 автор: Valeri   (21.02.2005 в 22:50)   письмо автору
 
   для: Швейк   (21.02.2005 в 21:57)
 

честно говоря я не особо понимаю что ты хочешь, но я делаю вообще- то все это таким образом (я не думаю что у тебя таблица на 1000 столбцов)

<?
echo "<table>";
$res=mysql_query("select * from table");
while (
$row mysql_fetch_array($res) ) 
  {
$field1=$row["$field1"];
$field5=$row["$field5"];
$field8=$row["$field8"];
// ну и все те параметры которые тебе надо
echo "<tr><td>$field1</td>
<td>
$field5</td>
// в этом столбце будет ссылка
<td><a href="
user.php?name=$field8">$field8</a></td></tr>";
  }
echo 
"</table>";


вроде правильно написал.
в user.php ты уже пишиш скрипт вывода данных по пользователю в котором запрос к БД будет осуществлятся по параметру name=$field8, если у тебя к примеру зпрос будет осуществлятся по одному параметру, а в графе под ссылкой другой (например ссылка на фамилие, а запрос идет по ID, то вместо $field8 подставляешь то что тебе надо, к примеру $field6).
ясно ?

   
 
 автор: Швейк   (22.02.2005 в 00:41)
 
   для: Швейк   (21.02.2005 в 21:57)
 

Уважаемые cheops и Valeri!
Огромное Вам спасибо за помощь, похоже это именно то, что мне надо.
Единственный пока вопрос касается строки
<td><a href="user.php?name=$field8">$field8</a></td></tr>";
Как я понял именно здесь значение поля field8 "превращается" из простого текста в гиперссылку.
А скажите пожалуйста, как правильно "прочитать" вот этот элемент строки:
<a href="user.php?name=$field8">, вернее даже этот:
"user.php?name=$field8"? Просто не хочу заниматься слепым копированием строчек, хочу разбрать всю подноготную.

Еще раз огромное спасибо за оказанное содействие.
С уважением,
Бравый Солдат.

   
 
 автор: Valeri   (22.02.2005 в 01:57)   письмо автору
 
   для: Швейк   (22.02.2005 в 00:41)
 

a href - это стандартная тэг хтмл обозначающая ссылку, </a> закрытие тэга
user.php - это страница куда переходит пользователь, у тебя она может называться как угодно
после ? идут передаваемые параметры
name - еременная передаваемая на страницу user.php ее значение = перемкнной $field8, у тебя все это может быть названо по твоему вкусу.
если тебе надо передать еще переменыые то они прописываются по очереди через &, тоесть строка ссылки будет выглядить так

<a href="user.php?name=$field8&uin=$field5&mail=$field2">Петров</a>

в ней передаются еще две переменные uin и mail, которым соответственно присвоены значения переменных $field5 и $field2
Переменных может быть сколько угодно, единственное, не помню сколько, есть ограничение на длинну ссылки сколько то знаков.

   
 
 автор: cheops   (22.02.2005 в 02:03)   письмо автору
 
   для: Швейк   (22.02.2005 в 00:41)
 

user.php - это имя файла
? - сообщает, что файлу передаются параметры,
name - это имя параметра
$field8 - принимаемое параметром name значение

Возможно вам будет интересно почитать темы, по следующим ссылкам, где параметры в строке запроса обсуждаются более подробно
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=495
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1249
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1474
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=298

   
 
 автор: Швейк   (22.02.2005 в 10:39)
 
   для: cheops   (22.02.2005 в 02:03)
 

Большое спасибо!
Вы мне очень помогли и все стало на свои места.

С уважением,
Бравый Солдат.

   
 
 автор: Швейк   (28.02.2005 в 12:52)
 
   для: Швейк   (21.02.2005 в 14:23)
 

Все решилось!
Я планировал сделать универсальную функцию, которая выводила бы "оригинальные" названия столбцов таблицы, необходимую информацию и гиперссылки.
Но проще оказалось шапку делать вручную, потерял в универсальности, но выиграл в работоспособности :)
Valeri, большое спасибо за идею использовать функцию
mysql_fetch_array вместо mysql_fetch_assoc - они похоже, но твоя оказалась более гибкой!

Cheops, Вам огрмное спасибо за структуру гиперссылки - все теперь предельно ясно.
Что бы не разводить флуд результат выводить сюда не буду, но если ком потребуется - всегда пожалуйста.

Тема может считаться закрытой.

Большое спасибо и с уважением,
Бравый Солдат.

   
 
 автор: Швейк.   (28.02.2005 в 21:56)
 
   для: Швейк   (21.02.2005 в 14:23)
 

Уф, как-то рано я начинаю победу праздновать...
Одно с места сдвинул, другое навалилось...
В принципе, это могла быть вполне еовая тема, но решил здесь, пока свежо придание....
В общем, теперь проблема в следующем:
на первой странице создается HTML-таблица с перечнем списка персонала.
Имя и фамилия подсвечиваются ссылкой на другую страницу (где планируется привести полную информацию о конкретном человеке). Создание ссылки и переход с первой страницы на другую с передачей переменных в ссылке я освоил.
Но вот теперь - проблема.
Дело в том, что все функции я храню в отдельном файле - так удобнее. Новую функцию, которая выведет на экран полную информацию о конретном человеке собираюсь хранить там же.
А вот как мне передать в эту библиотеку функций значения переменных и гиперссылки? (По сути дела надо толко user ID передать)
Можно, конечно, новую функцию писать не в библиотке, а в странице, которая "знает" значение переменной $user_ID, но хочется по правилам играть...
Не подскажите, как реализовать задуманное?

С уважением,
Бравый Солдат.

   
 
 автор: cheops   (28.02.2005 в 22:38)   письмо автору
 
   для: Швейк.   (28.02.2005 в 21:56)
 

Если честно, то не очень понятно, что требуется :( Может примерчик?

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

   
 
 автор: Valeri   (01.03.2005 в 02:39)   письмо автору
 
   для: cheops   (28.02.2005 в 22:38)
 

насколько я понял (если правильно) то проблема в том, что на странице есть функция которая уже производит действие с iduser, так же нужна функция которая будет производить с теми же параметрами но другое действие. Если так то ответ такой - делается несколько функций со своими названиями и каждая вызывается по мере необходимости, то есть код будет выглядить примерно так

<?
function user_auth($iduser)
   {
// производим нужные действия
 
; }

function 
user_info($iduser)
   {
// производим нужные действия
 
; }

function 
user_mail($iduser)
   {
// производим нужные действия
 
; }

switch(
$fun_name)
   {
case 
"user_info":
user_info($iduser);
break;

case 
"user_mail":
user_mail($iduser);
break;

default:
user_auth($iduser)
break;
  }
?>


все эти функции расположены к примеру еа странице 1.php, значит ссылка будет выглядить так

<a href="1.php?fun_name=user_mail&iduser=$(какой-то)">Письма</a>

для вызова функции user_info с той же переменной отличие будет только в этом fun_name=user_info
если ссылка будет без указания fun_name, то по умолчанию вызовется функция user_auth

Не знаю про то я ответил или нет.

   
 
 автор: Швейк   (01.03.2005 в 09:50)
 
   для: Швейк.   (28.02.2005 в 21:56)
 

Ребята, по совету cheops'a я создам новую тему посвященную этому вопросу. Назову её Глобальная переменная.

С уважением,
Бравый Солдат.

   
Rambler's Top100
вверх

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