PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 5
daewoosh Отправлено: 30 Марта, 2014 - 17:09:14 • Тема: Вывод данных из бд в таблицу с возможностью редактирования • Форум: Напишите за меня, пожалуйста

Ответов: 0
Просмотров: 42
Здравствуйте. У меня имеется следующее задание:
Необходимо создать страницу, выводящую список пользователей в виде таблицы
- колонки: id, имя, возраст, город

Реализовать возможность редактирования данных пользователя в данной таблице со следующим функционалом:
- при клике на имя или возраст вместо текста появляется поле ввода с текстом внутри, после чего можно начинать редактировать. При нажатии Enter или увода фокуса из поля ввода, происходит сохранение данных через вызов Ajax. Поле ввода пропадает и снова остается текст.
- при клике на город, вместо текста появляется выпадающий список городов, выбранным значением является город пользователя. можно выбрать любой другой город или первую запись в списке (Город не указан), нажать Enter и значение изменится, процесс редактирования завершится

Дополнительные условия:
- Данные о пользователях хранятся в таблице users, о городах в таблице cities,таблицы связаны между собой по полю city_id
- Реализовать класс User. Передавая к конструктор в качестве параметра id пользователя, мы должны на выходе получить объект пользователя с заполненными данными.
- В классе User должна быть реализована статичная функция GetAllUsers, которая извлекает всех пользователей из таблицы. Страница со списком пользователей формируется на основе этих данных. Функция должна минимизировать количество обращений к базе данных. Не должно быть количество запросов равное количеству пользователей.
- Изменение данных происходит через объект

Я уже в принципе все сделал, кроме обновления записи в БД с помощью AJAX. Не могу разобраться, как найти к какому пользователю принадлежит ячейка чтобы обновить соответствующую запись. Так же хотелось бы узнать замечания по своему коду. Как не стоило делать? Что нужно поменять?

Код главной страницы
PHP:
скопировать код в буфер обмена
  1.  
  2. <html>
  3.   <head>
  4.     <title>AJAX</title>
  5.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  6.         <script type="text/javascript" src="redact.js"></script>
  7.         <script type="text/javascript">
  8.        
  9.  
  10. </script>
  11.         </script>
  12.   </head>
  13.   <body>
  14.   <CENTER>
  15.     <?PHP
  16.         header( 'Content-Type: text/html; charset=utf-8' );
  17.         require_once('users.class.php');
  18.       users::getAllUsers();
  19. echo '<table border="1">';
  20.         echo '<thead>';
  21.         echo '<tr>';
  22.         echo '<th>Id</th>';
  23.         echo '<th>Фамилия</th>';
  24.         echo '<th>Возраст</th>';
  25.         echo '<th>Город</th>';
  26.         echo '</tr>';
  27.         echo '</thead>';
  28.         echo '<tbody>';
  29.  while($data = mysql_fetch_array($qr_result)){
  30.                 echo '<tr>';
  31.                 echo '<td>' . $data['users_id'] . '</td>';
  32.                 echo '<td onclick="script_(this)"  width=100 height=30>' . $data['users_name'] . '</td>';
  33.                 echo '<td onclick="script_(this)" width=70 height=30>' . $data['users_age'] . '</td>';
  34.                 echo '<td onclick="script2_(this)" width=150 height=30>' . $data['city'] .  '</td>';
  35.                 echo '</tr>';
  36.         }      
  37.     echo '</tbody>';
  38.         echo '</table>';
  39.         ?>  
  40. <FORM NAME='FORM1' accept-charset="UTF-8">
  41.  
  42. Имя:
  43. <br>
  44. <INPUT type = "text" name = "users_name" align="center">
  45. <br>
  46. Возраст:
  47. <br>
  48. <INPUT type = "text" name = "users_age"><br>
  49. Город: <br>
  50. <?PHP
  51.  
  52. $i=0;
  53.  $connect_to_db = mysql_connect('localhost', 'root', '')
  54.                 or die("Could not connect: " . mysql_error());
  55.                 mysql_query("SET NAMES UTF8") or die(mysql_error());
  56.         mysql_query("SET CHARACTER SET UTF8") or die(mysql_error());
  57.                 mysql_select_db('users', $connect_to_db)
  58.                 or die("Could not select DB: " . mysql_error());
  59.                 $qr_result1 = mysql_query("SELECT city
  60.        FROM cities")
  61.                 or die(mysql_error());
  62. while($data1 = mysql_fetch_array($qr_result1))
  63. {
  64. global $make;
  65.   $make[$i]=$data1[0];  
  66.     $i++;
  67. }
  68. mysql_close($connect_to_db);
  69.   echo '<SELECT id="mySelect" name="mySelect">';
  70.   for ($k=0;$k<$i;$k++)
  71.   echo '<OPTION VALUE=" ' .$make[$k].'">' .$make[$k].' </option>';
  72.   echo '</SELECT>';
  73. ?>
  74. <br>
  75.  
  76. </CENTER>
  77. </FORM>
  78.         </body>
  79. </html>
  80.  


Файл Users.class.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. // Класс для работы с базой данных
  4. class users
  5. {
  6. //***************************************************************
  7. function __construct($id)
  8. {
  9.   $db_host = 'localhost';
  10.     $db_name = 'users';
  11.     $db_username = 'root';
  12.     $db_password = '';
  13.     $db_table_to_show = 'users';  
  14.     $connect_to_db = mysql_connect($db_host, $db_username, $db_password)
  15.                 or die("Could not connect: " . mysql_error());
  16.                 mysql_query("SET NAMES UTF8") or die(mysql_error());
  17.         mysql_query("SET CHARACTER SET UTF8") or die(mysql_error());
  18.  
  19.    
  20.     mysql_select_db($db_name, $connect_to_db)
  21.                 or die("Could not select DB: " . mysql_error());
  22.  
  23.    
  24.     $qr_result = mysql_query("select * from users where users_id='$id'")
  25.                 or die(mysql_error());    
  26.     global $data1;
  27.         $data1 = mysql_fetch_array($qr_result);
  28.                  
  29.     return $data1;
  30.     mysql_close($connect_to_db);
  31. }
  32.  
  33.  
  34. //***************************************************************
  35. static function getAllUsers(){ // Выбор данных об автомобиле
  36. header( 'Content-Type: text/html; charset=utf-8' );
  37.    
  38.     $db_host = 'localhost';
  39.     $db_name = 'users';
  40.     $db_username = 'root';
  41.     $db_password = '';
  42.     $db_table_to_show = 'users';  
  43.     $connect_to_db = mysql_connect($db_host, $db_username, $db_password)
  44.                 or die("Could not connect: " . mysql_error());
  45.                 mysql_query("SET NAMES UTF8") or die(mysql_error());
  46.         mysql_query("SET CHARACTER SET UTF8") or die(mysql_error());
  47.  
  48.    
  49.     mysql_select_db($db_name, $connect_to_db)
  50.                 or die("Could not select DB: " . mysql_error());
  51.  
  52.     global $qr_result;
  53.     $qr_result = mysql_query("SELECT *
  54.        FROM users
  55.        JOIN cities
  56.        WHERE cities.city_id = users.city ")
  57.                 or die(mysql_error()); 
  58.    
  59.         //$data = mysql_fetch_array($qr_result);
  60.         return $qr_result;     
  61.  
  62.    mysql_close($connect_to_db);
  63.  
  64. }
  65. }
  66. ?>
  67.  


И файл redact.js, в котором функции обработки ячейки по щелчку.
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. function script_(whf)
  3. {
  4.   if (whf.firstChild.nodeType==3)
  5.     {
  6.           name=whf.innerHTML;
  7.           whf.innerHTML='<input width=100% onblur="Killer(this)" name="my"></input>'
  8.           whf.firstChild.value=name;
  9.           my.focus();
  10.         }
  11. }
  12.  
  13.   function script2_(whf)
  14. {
  15.   if (whf.firstChild.nodeType==3)
  16.         {
  17.           name=whf.innerHTML;
  18.           whf.innerHTML=                '<select onblur="Killer(this)" name="menu" id="menu" size="1">'+
  19.                   '</select>'  
  20.                 var objSel = document.getElementById("menu");
  21.                 var obj = document.getElementById("mySelect");
  22. var i=0;
  23.                 //Создаем новый объект Option и заносим его в коллекцию options
  24.                 for (i;i<obj.options.length;i++)
  25.                 {
  26.                   var t = obj.options[i].text;
  27.                   var v = obj.options[i].value;
  28.                   objSel.options[i] = new Option(t, t);
  29.                  }
  30.           whf.firstChild.value=name;
  31.           menu.focus();
  32.         }
  33. }
  34.  
  35. function Killer(whf)
  36. {
  37.   name = whf.value;
  38.   if (name=='') name='0';
  39.   whf.parentNode.innerHTML= name;
  40.   whf.onblur = null;
  41. }
  42.  


Спасибо за ранее
daewoosh Отправлено: 27 Марта, 2014 - 23:33:30 • Тема: Обновление БД при помощи AJAX • Форум: Напишите за меня, пожалуйста

Ответов: 1
Просмотров: 35
Здравствуйте!
У меня есть в бд таблица Users с полями id, name, age, city. Города связаны с пользователями из таблицы cities по полю city_id. Реализован класс Users, в котором есть статический метод для выборки всех пользователей. Далее все эти пользователи выводятся в виде таблице. При клике на имя или возраст появляется в ячейке поле ввода, в котором можно изменять значения. При щелчке на город появляется выпадающий список с городами. Это я реализовал с помощью javascript. При покидании фокуса необходимо при помощи AJAX обновлять соответствующую запись в бд.

Вопрос, собственно, в том, чтобы узнать какого пользователя обновлять. Как узнать в какой ячейке я нахожусь и какое id у этого пользователя?
daewoosh Отправлено: 26 Марта, 2014 - 19:36:52 • Тема: обращение к ячейкам таблицы • Форум: Напишите за меня, пожалуйста

Ответов: 1
Просмотров: 48
Доброго времени суток. В общем задание у меня такое: Необходимо создать страницу, выводящую список пользователей в виде таблицы
- колонки: id, имя, возраст, город.
-При клике на имя или возраст вместо текста появляется поле ввода с текстом внутри, после чего можно начинать редактировать. При нажатии Enter или увода фокуса из поля ввода, происходит сохранение данных через вызов Ajax. Поле ввода пропадает и снова остается текст.
- при клике на город, вместо текста появляется выпадающий список городов, выбранным значением является город пользователя. можно выбрать любой другой город или первую запись в списке (Город не указан), нажать Enter и значение изменится, процесс редактирования завершится
- Реализовать класс User. В классе User должна быть реализована статичная функция GetAllUsers, которая извлекает всех пользователей из таблицы. Страница со списком пользователей формируется на основе этих данных.

Класс и функцию я реализовал. В результате на экран выводится таблица с данными. Класс написан в файле users.class.php. Функция getAllUsers() вызывается из файла 1.php.

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

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. class users
  5. {
  6. //***************************************************************
  7. static function getAllUsers(){
  8. header( 'Content-Type: text/html; charset=utf-8' );
  9.    
  10.     $db_host = 'localhost';
  11.     $db_name = 'users';
  12.     $db_username = 'root';
  13.     $db_password = '';
  14.     $db_table_to_show = 'users';  
  15.     $connect_to_db = mysql_connect($db_host, $db_username, $db_password)
  16.                 or die("Could not connect: " . mysql_error());
  17.                 mysql_query("SET NAMES UTF8") or die(mysql_error());
  18.         mysql_query("SET CHARACTER SET UTF8") or die(mysql_error());
  19.  
  20.    
  21.     mysql_select_db($db_name, $connect_to_db)
  22.                 or die("Could not select DB: " . mysql_error());
  23.  
  24.    
  25.     $qr_result = mysql_query("select * from " . $db_table_to_show)
  26.                 or die(mysql_error());
  27.  
  28.    
  29.     echo '<table border="1">';
  30.         echo '<thead>';
  31.         echo '<tr>';
  32.         echo '<th>Id</th>';
  33.         echo '<th>Фамилия</th>';
  34.         echo '<th>Возраст</th>';
  35.         echo '<th>Город</th>';
  36.         echo '</tr>';
  37.         echo '</thead>';
  38.         echo '<tbody>';
  39.        
  40.    
  41.         while($data = mysql_fetch_array($qr_result)){
  42.                 echo '<tr>';
  43.                 echo '<td>' . $data['users_id'] . '</td>';
  44.                 echo '<td>' . $data['users_name'] . '</td>';
  45.                 echo '<td>' . $data['users_age'] . '</td>';
  46.                 echo '<td>' . $data['city'] . '</td>';
  47.                 echo '</tr>';
  48.         }
  49.        
  50.     echo '</tbody>';
  51.         echo '</table>';
  52.  
  53.  
  54.    mysql_close($connect_to_db);
  55. }
  56. }
  57. ?>
  58.  
daewoosh Отправлено: 26 Марта, 2014 - 13:16:50 • Тема: Реализация класса User и статичной функции в нем • Форум: Объектно-ориентированное программирование

Ответов: 4
Просмотров: 1276
T1grOK пишет:
Крайне неудачная реализация. А если мне потребуется создать 10 экземпляров User, тогда у меня будет 10 подключений к БД.


Ну а если закрывать подключение в конце конструктора? или проверку делать на наличие подключения? или вообще подключать в другом месте? попробовал сам реализовать статическую функцию GetAllUsers. Вроде работает все, но хотелось бы узнать удачна ли такая реализация, и , если нет, то почему?

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4.  
  5. class users
  6. {
  7. static function getAllUsers(){
  8. header( 'Content-Type: text/html; charset=utf-8' );
  9.    
  10.     $db_host = 'localhost';
  11.     $db_name = 'users';
  12.     $db_username = 'root';
  13.     $db_password = '';
  14.     $db_table_to_show = 'users';
  15.  
  16.    
  17.     $connect_to_db = mysql_connect($db_host, $db_username, $db_password)
  18.                 or die("Could not connect: " . mysql_error());
  19.                 mysql_query("SET NAMES UTF8") or die(mysql_error());
  20.         mysql_query("SET CHARACTER SET UTF8") or die(mysql_error());
  21.  
  22.    
  23.     mysql_select_db($db_name, $connect_to_db)
  24.                 or die("Could not select DB: " . mysql_error());
  25.  
  26.    
  27.     $qr_result = mysql_query("select * from " . $db_table_to_show)
  28.                 or die(mysql_error());
  29.  
  30.    
  31.     echo '<table border="1">';
  32.         echo '<thead>';
  33.         echo '<tr>';
  34.         echo '<th>Id</th>';
  35.         echo '<th>Фамилия</th>';
  36.         echo '<th>Возраст</th>';
  37.         echo '<th>Город</th>';
  38.         echo '</tr>';
  39.         echo '</thead>';
  40.         echo '<tbody>';
  41.        
  42.    
  43.         while($data = mysql_fetch_array($qr_result)){
  44.                 echo '<tr>';
  45.                 echo '<td>' . $data['users_id'] . '</td>';
  46.                 echo '<td>' . $data['users_name'] . '</td>';
  47.                 echo '<td>' . $data['users_age'] . '</td>';
  48.                 echo '<td>' . $data['city'] . '</td>';
  49.                 echo '</tr>';
  50.         }
  51.        
  52.     echo '</tbody>';
  53.         echo '</table>';
  54.  
  55.  
  56.     mysql_close($connect_to_db);
  57.  
  58. }
  59. }
  60. ?>
  61.  


Здесь пока что без конструктора. Рационально ли такое создание таблицы?Возможно ли будет в дальнейшем реализовать редактирование такой таблицы?
daewoosh Отправлено: 26 Марта, 2014 - 08:37:56 • Тема: Реализация класса User и статичной функции в нем • Форум: Объектно-ориентированное программирование

Ответов: 4
Просмотров: 1276
Доброго времени суток.
У меня есть таблица Users (id, name, age, city). Данные о городах хранятся в таблице cities,таблицы связаны между собой по полю city_id. Мне необходимо создать страницу, выводящую список пользователей в виде таблицы. Но проблема в том, что нужно реализовать класс User. Передавая в конструктор в качестве параметра id пользователя, мы должны на выходе получить объект пользователя с заполненными данными.
Это я делаю следующим образом:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. class User {
  4. public $id;
  5. public $username;
  6. public $age;
  7. public $city;
  8.  
  9. protected $mysqli;
  10.  
  11. function __construct($id){
  12. $this->mysqli = new mysqli('localhost', 'root', '','users');
  13. $query = "SELECT * FROM users where id = '$id'";
  14.  
  15. if ($result = $this->mysqli->query($query)){
  16. // Выбор данных из ответа сервераMySQL
  17. $arr = $result->fetch_array(MYSQLI_ASSOC);
  18. // Удаляем результирующую выборку
  19. $result->close();
  20. // Вывод ответа клиенту
  21. return $arr;
  22. }
  23. else return "данных нет";
  24. }
  25. // Деструктор закрывает соединение с базой
  26. function __destruct()
  27. {
  28. $this->mysqli->close();
  29. }
  30. }
  31. ?>


Взято это из книги Бенкен "AJAX программирование для интернета" и переделано мною. Правильно ли я реализовал конструктор?

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

Должен ли я реализовать вывод полученных данных прямо в этой же функции или рисовать таблицу и заполнять ее нужно отдельно?

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB