За последние 24 часа нас посетили 16603 программиста и 1650 роботов. Сейчас ищут 2024 программиста ...

Работа с двумя таблицами

Тема в разделе "PHP и базы данных", создана пользователем XAOC_303, 5 сен 2008.

  1. XAOC_303

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

    С нами с:
    5 сен 2008
    Сообщения:
    6
    Симпатии:
    0
    Здравствуйте. Есть две таблицы "users" с полями "id_user, surname, name, patronymic, и ещё много полей" и "base_phone" с полями "id_user, inv, int, ForAll, ext, port". Есть список и текстовые поля для второй таблицы "base_phone".
    Заполняем список первой таблицей "users". по двойному щелчку пользователь из списка вносится в текстовое поле "id пользователь".
    Задача. Нужно чтобы пошла проверка по второй таблице "base_phone" и заполнила остальные поля.
    Вопрос. КАК? Я уже и так и эдак. не получается.
    Заранее благодарен.
    Вот код:
    Код (Text):
    1.  
    2.  
    3. <html>
    4. <head>
    5. <title>Phone Edit</title>
    6. <meta http-equiv="content-type\" content=\"text/html; charset=windows-1251\">
    7. <meta http-equiv=\"content-language\" content=\"ru\">
    8.  
    9. <META http-equiv="Content-Type" content="text/html; charset=windows-1251">
    10.  
    11. <SCRIPT>
    12. var whichinfos
    13. var x,y
    14.  
    15. function showinfos(thisinfos)
    16.  {
    17.    if (document.all)
    18.     {
    19.       whichinfos=eval("document.all."+thisinfos+".style")
    20.       whichinfos.visibility="visible"
    21.       followmouse()
    22.     }
    23.  
    24.    if (document.layers)
    25.     {
    26.      whichinfos=eval("document."+thisinfos)
    27.      whichinfos.visibility="visible"
    28.      followmouse()
    29.     }
    30.  }
    31.  
    32. function followmouse()
    33.  {
    34.    if (document.all)
    35.     {
    36.      whichinfos.posLeft=x+20
    37.      whichinfos.posTop=y-100
    38.      var timer=setTimeout("followmouse()",200)
    39.     }
    40.   if (document.layers)
    41.     {
    42.      whichinfos.left=10
    43.      whichinfos.top=10
    44.      var timer=setTimeout("followmouse()",200)
    45.     }
    46.  }
    47.  
    48. function hideinfos()
    49.  {
    50.   if (document.all || document.layers)
    51.    {
    52.     whichinfos.visibility="hidden"
    53.    }
    54.  }
    55.  
    56. function handlerMM(e)
    57.  {
    58.   x = (document.layers) ? e.pageX : document.body.scrollLeft+event.clientX
    59.   y = (document.layers) ? e.pageY : document.body.scrollTop+event.clientY
    60.  }
    61.  
    62. if (document.layers)
    63.  {
    64.   document.captureEvents(Event.MOUSEMOVE);
    65.  }
    66.  
    67. if (document.all || document.layers)
    68.  {
    69.   document.onmousemove = handlerMM;
    70.  }
    71. </SCRIPT>
    72.  
    73. <SCRIPT>
    74. var thistitle
    75. function createmetatags()
    76.  {
    77.   allnewcode=""
    78.   thistitle3=document.forma1.user_phone.value
    79.   if (thistitle!="")
    80.    {
    81.      allnewcode+=thistitle3
    82.    }
    83.   document.forma1.user_id_1.value=allnewcode
    84.  }
    85. </SCRIPT>
    86.  
    87. <SCRIPT>
    88. var name123
    89. function poisk_usera()
    90.  {
    91.  
    92.    createmetatags();
    93.   name123=document.forma1.user_id_1.value;
    94.    document.forma1.inv_1.value=document.forma1.user_id_1.value;
    95.    
    96. <?  
    97. //print "user_id_1 = $user_id_1<BR>";
    98.  
    99.  
    100. $db1=mysql_connect('host', 'user', 'pass');
    101. mysql_data_seek($db1, 0);
    102. mysql_select_db('corp');
    103. // or die ("невозможно выбрать базу");
    104. $query1="select * from base_phone where (id_user LIKE '$user_id_1')";
    105.  
    106. mysql_query ("set character_set_client='cp1251'");
    107. mysql_query ("set character_set_results='cp1251'");
    108. mysql_query ("set collation_connection='cp1251_general_ci'");
    109.  
    110. //print $query."<BR>";
    111.  
    112. $result1=mysql_query($query1);
    113. $num_results1=mysql_num_rows($result1);
    114.  
    115. for ($i=0;$i<$num_results1;$i++)
    116. {
    117. $row1=mysql_fetch_array($result1);
    118. alert ($row1['id_user']);
    119. }
    120.  
    121. ?>
    122.  
    123.  
    124. alert ("Java = "+document.forma1.user_id_1.value+"\nPHP = <? print $user_id_1; ?>\nЗапрос = <? print $query1; ?>")
    125.  
    126.  
    127.  
    128.   this.form.user_id_1.focus();
    129.   this.form.user_id_1.select();
    130.  
    131.  }
    132. </SCRIPT>
    133.  
    134. </head>
    135.  
    136. <!-- Комментарии -->
    137.  
    138. <BODY bgcolor="#E7E7E7" background="http://gifka.gif" >
    139.  
    140. <table width="100%" border="0" cellspacing="0" cellpadding="5" align="center">
    141.  
    142. <tr valign="top">
    143.  <td width="130"> <?php require_once("ind_left.php"); ?> </td>
    144.  <td>
    145.  
    146. <?php require_once("access.php"); ?>
    147. <?php require_once("error_php.php"); ?>
    148.  
    149. <?php
    150.  
    151. $db=mysql_connect('host', 'user', 'pasw');
    152. mysql_select_db('corp') or die ("невозможно выбрать базу");
    153. $query="select * from users ORDER BY surname";
    154.  
    155. mysql_query ("set character_set_client='cp1251'");
    156. mysql_query ("set character_set_results='cp1251'");
    157. mysql_query ("set collation_connection='cp1251_general_ci'");
    158.  
    159. $result=mysql_query($query);
    160. $num_results=mysql_num_rows($result);
    161.  
    162. print "<table width=100% align=center cellspacing=1 bgcolor=#3300FF>";
    163. print "<font color=#898989>";
    164. print "<form name=forma1 action='bd_phone_edit.php' method=post>";
    165.  
    166. print "<tr><td align=center bgcolor=#dddddd width=150>id пользователя</td>";
    167. print "<td align=center bgcolor=#dddddd width=50><input type=text name='user_id_1' size=10></td>";
    168. print "<td align=center bgcolor=#dddddd width=50><input name=qweasd1 type=submit value='<- Добавить'></td>";
    169. print "<td align=center bgcolor=#dddddd rowspan=7>";
    170. print "<select type='text' name='user_phone' size=10 onchange='user_id_1.innerText=this.options[this.selectedIndex].value;' ondblclick=poisk_usera()>";
    171. //print "<select type='text' name='user_phone' size=10>";
    172. for ($i=0;$i<$num_results;$i++)
    173. {
    174. $row=mysql_fetch_array($result);
    175. echo '<option value='.$row['id_user'].'>'.$row['surname'].' '.$row['name'].' '.$row['patronymic'];
    176. }
    177.  
    178. print "</td></tr>";
    179. print"<tr><td align=center bgcolor=#dddddd>id телефона</td>";
    180. print"<td align=center bgcolor=#dddddd><input type=text name=inv_1 size=10></td>";
    181. print"<td align=center bgcolor=#dddddd width=50 rowspan=6></td></tr>";
    182. print"<tr><td align=center bgcolor=#dddddd>Внутренний</td>";
    183. print"<td align=center bgcolor=#dddddd><input type=text name=int_1 size=10></td></tr>";
    184. print"<tr><td align=center bgcolor=#dddddd>Для всех</td>";
    185. print"<td align=center bgcolor=#dddddd><input type=text name=ForAll_1 size=10></td></tr>";
    186. print"<tr><td align=center bgcolor=#dddddd>Внешний</td>";
    187. print"<td align=center bgcolor=#dddddd><input type=text name=ext_1 size=10></td></tr>";
    188. print"<tr><td align=center bgcolor=#dddddd>Розетка</td>";
    189. print"<td align=center bgcolor=#dddddd><input type=text name=port_1 size=10></td></tr>";
    190. print"<tr><td align=center bgcolor=#dddddd></td>";
    191. print"<td align=center bgcolor=#dddddd><input name=qweasd type=button value='Сохранить'></td></tr>";
    192. //print"<td align=center bgcolor=#dddddd><input name=qweasd type=submit value='Сохранить'></td></tr>";
    193.  
    194. print"</select></form>";
    195. print"</font></table>";
    196.  
    197. print "$forma1";
    198.  
    199. echo mysql_result($result,2); // outputs third employee's name
    200. print "<BR>";
    201. echo mysql_num_rows($result);
    202.  
    203. mysql_close($db);
    204. mysql_free_result($result);
    205. ?>
    206.  
    207. </td>
    208. </tr>
    209. </table>
    210.  
    211. </body>
    212. </html>
     
  2. decoder

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

    С нами с:
    11 фев 2006
    Сообщения:
    469
    Симпатии:
    0
    Для начала определимся, что база у тебя одна, а в ней две таблицы.
    Такую выборку можно сделать с помощью объединения.
    Об этом читай в мануале по mysql (JOIN) или тут же в форуме есть много похожих вопросов.
     
  3. XAOC_303

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

    С нами с:
    5 сен 2008
    Сообщения:
    6
    Симпатии:
    0
    Пасиб. С таблицами определился :)
    Один запрос разве подойдёт? Ведь я сначала заполняю список первой таблицей, потом делаю действия (двойной клик) и только после этого мне нужна вторая таблица.
     
  4. decoder

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

    С нами с:
    11 фев 2006
    Сообщения:
    469
    Симпатии:
    0
    php - язык, который позволят создавать серверные приложения, то есть тебе надо либо сразу все данные получить, а потом с помощью JS манипулировать ими, либо перезагружать страницу, либо гибрид этого - AJAX.
    Можешь, конечно, разбить на два запроса.
    После первого запроса собрать все id_user в массив, а потом сделать второй запрос, где будет

    PHP:
    1.  
    2. $sql = 'SELECT id_user, inv, int, ForAll, ext, port FROM base_phone WHERE id_user IN ('.implode(',' $id_user_array).')';
    3.  
     
  5. XAOC_303

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

    С нами с:
    5 сен 2008
    Сообщения:
    6
    Симпатии:
    0
    I. Вариант
    Вот на этом и застопорился так сказать - или в массив загонять или обновлять страницу. В массив загонять не хочу. А то потом не разберусь. Просто php, java, mysql занялся пару недель назад. Делаю всё набегами. А усовершенствовать код потом можно. Меня другое интересует - переменная $user_id_1.
    По двойному клику в списке вызывается poisk_usera где,
    1. из списка берётся id пользователя и копирует в текстовое поле "id пользователь" (имя user_id_1). затем
    2. через php вызывается другая таблица. Но...
    я даже alert с проверкой сделал, но понять не могу
    методом java id даёт, а через php, вызовом того же $user_id_1 - нет. и запрос соответственно не проходит.

    выдаёт например:
    java = 20
    php =
    запрос = select * from base_phone where (id_user LIKE '')

    II. Вариант
    Если перезагружать страницу, то из текстовых полей исчезают данные. Как это исправить тоже не знаю.
     
  6. decoder

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

    С нами с:
    11 фев 2006
    Сообщения:
    469
    Симпатии:
    0
    Итак :) Дубль 2.
    JavaScript (это не Java!) выполняется на клиентской стороне (то есть в браузере), PHP - выполняется на сервере.
    То есть просиходит так: браузером запрашиваем страницу, сервер там что-то типа делает и исполняется PHP-код, сервер нам отдает странцу. После того, как пхп выполнил свою работу больше он уже не будет "работать". Дальше страница попала в браузер и тут будет исполняться JS. Взаимодействовать JS-код и PHP напрямую не могу, только если посредством т.н. AJAXa.
    То есть без AJAXа данные из php можно "передать" в ЯваСкрипт-код, но не обрано. Это значит, что в php просто нет этой переменной $user_id_1

    Для перезагрузки без потери данных, их можно или сохранить в куках, или передать через GET/POST.

    P.S. Если честно код твой не смотрел даже, так как там слишком много лишнего. Единственное, что успел заметить, что

    Код (Text):
    1. <meta http-equiv="content-type\" content=\"text/html; charset=windows-1251\">
    повторяется.
     
  7. XAOC_303

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

    С нами с:
    5 сен 2008
    Сообщения:
    6
    Симпатии:
    0
    ))) спасибо за объяснение
    Тогда вот так
    Заполяем редактируемое поле user_id_1 значением 20.
    Принты все выводятся, редактируемое поле user_id_1 заполнено, а остальные редактируемые поля -нет.
    Всмысле почему заполняется только одно редактируемое поле, а не все?

    Пишет:
    Запрос =select * from base_phone where (id_user LIKE '20')
    -----------------------------------------
    Вывод из переменных 0
    id_user 20
    inv 6235
    int 706
    ForAll 1
    ext 11-11-11
    port 106-02
    -----------------------------------------
    Вывод из массива 0
    id_user 20
    inv 6235
    int 706
    ForAll 1
    ext 11-11-11
    port 106-02

    id пользователя 20
    id телефона
    Внутренний
    Для всех
    Внешний
    Розетка

    Вот код:
    Код (Text):
    1.  
    2. <?php
    3.  
    4. global $user_id_1, $inv_1, $int_1, $ForAll_1, $ext_1, $port_1;
    5.  
    6. // Начало - Поиск в таблице base_phone
    7.  
    8. $db1=mysql_connect('host', 'user', 'pass');
    9. mysql_select_db('corp');
    10. $query1="select * from base_phone where (id_user LIKE '$user_id_1')";
    11.  
    12. mysql_query ("set character_set_client='cp1251'");
    13. mysql_query ("set character_set_results='cp1251'");
    14. mysql_query ("set collation_connection='cp1251_general_ci'");
    15.  
    16. $result1=mysql_query($query1);
    17. $num_results1=mysql_num_rows($result1);
    18.  
    19. for ($i=0;$i<$num_results1;$i++)
    20. {
    21. $row1=mysql_fetch_array($result1);
    22. $user_id_1= $row1['id_user'];
    23. $inv_1= $row1['inv'];
    24. $int_1= $row1['int'];
    25. $ForAll_1= $row1['ForAll'];
    26. $ext_1= $row1['ext'];
    27. $port_1= $row1['port'];
    28.  
    29. print "Запрос =".$query1."<BR>";
    30.  
    31. print "-----------------------------------------<BR>";
    32. print "Вывод из переменных ".$i."<BR>";
    33. print "id_user ".$user_id_1."<BR>";
    34. print "inv     ".$inv_1."<BR>";
    35. print "int     ".$int_1."<BR>";
    36. print "ForAll  ".$ForAll_1."<BR>";
    37. print "ext     ".$ext_1."<BR>";
    38. print "port    ".$port_1."<BR>";
    39.  
    40. print "-----------------------------------------<BR>";
    41. print "Вывод из массива ".$i."<BR>";
    42. print "id_user ".$row1['id_user']."<BR>";
    43. print "inv     ".$row1['inv']."<BR>";
    44. print "int     ".$row1['int']."<BR>";
    45. print "ForAll  ".$row1['ForAll']."<BR>";
    46. print "ext     ".$row1['ext']."<BR>";
    47. print "port    ".$row1['port']."<BR>";
    48.  
    49. }
    50.  
    51. // Конец - Поиск в таблице base_phone
    52.  
    53.  
    54. // Вставить данные из переменных
    55.  
    56. print "<BR>";
    57. print "<form name=forma1 action='bd_phone_edit.php' method=post>";
    58. print"id пользователя <input type=text name=user_id_1 size=10 value={$_POST['user_id_1']}>";
    59.  
    60. print"<input name=qweasd1 type=submit value='Проверка'>";
    61.  
    62. print "<BR>";
    63. print"id телефона     <input type=text name=inv_1     size=10 value={$_POST['inv_1']}>";
    64. print "<BR>";
    65. print"Внутренний      <input type=text name=int_1     size=10 value={$_POST['int_1']}>";
    66. print "<BR>";
    67. print"Для всех        <input type=text name=ForAll_1  size=10 value={$_POST['ForAll_1']}>";
    68. print "<BR>";
    69. print"Внешний         <input type=text name=ext_1     size=10 value={$_POST['ext_1']}>";
    70. print "<BR>";
    71. print"Розетка         <input type=text name=port_1    size=10 value={$_POST['port_1']}>";
    72. print "<BR>";
    73. print"<input name=qweasd type=button value='Сохранить'></form>";
    74.  
    75. ?>
     
  8. decoder

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

    С нами с:
    11 фев 2006
    Сообщения:
    469
    Симпатии:
    0
    Гм :)

    А как ты его заполнил? Вообще результат предыдущей выборки надо было в массив скинуть.
    Например, все ид пользователей сохранить в $userids, а как с ними дальше поступать, я вроде еще в первом посте своем писал...

    Не используй в данном случае LIKE, пиши id_user='$user_id_1'

    обычно для обработки результата выборки используют цикл while ()

    PHP:
    1. while ($row = mysql_fetch_assoc($result))
    2.   echo '<pre>'; print_r($row); echo '</pre>';
    3. }
     
  9. XAOC_303

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

    С нами с:
    5 сен 2008
    Сообщения:
    6
    Симпатии:
    0
    Всё вроде.
    Сделал для эксперимента отдельный файл. Предполагается что пользователь уже выбрал user_id из списка и значение записалось в id_user_1. Жмакаем "Проверка" и вуаля... со всякими проверками.

    PHP:
    1.  
    2. <?  
    3. $db1=mysql_connect('host', 'user', 'pass'); // or die ("невозможно подключиться");
    4. mysql_select_db('corp') or die ("невозможно выбрать таблицу");
    5. $query1="select * from base_phone where id_user=$user_id_1";
    6.  
    7. $result1=mysql_query($query1);
    8. $num_results1=mysql_num_rows($result1);
    9.  
    10. if ($num_results1==0)
    11.   {
    12.    $inv_1=    "";
    13.    $int_1=    "";
    14.    $ForAll_1= "";
    15.    $ext_1=    "";
    16.    $port_1=   "";
    17.   }
    18.  else
    19.   {
    20.    for ($i=0;$i<$num_results1;$i++)
    21.     {
    22.      $row1=mysql_fetch_array($result1);
    23.      $user_id_1= $row1['id_user'];
    24.      $inv_1=     $row1['inv'];
    25.      $int_1=     $row1['int'];
    26.      $ForAll_1=  $row1['ForAll'];
    27.      $ext_1=     $row1['ext'];
    28.      $port_1=    $row1['port'];
    29.     }
    30.   }
    31.  
    32.  
    33. print "Запрос =".$query1."<BR>";
    34.  
    35. print "-----------------------------------------<BR>";
    36. print "Вывод из переменных ".$i."<BR>";
    37. print "id_user ".$user_id_1."<BR>";
    38. print "inv     ".$inv_1."<BR>";
    39. print "int     ".$int_1."<BR>";
    40. print "ForAll  ".$ForAll_1."<BR>";
    41. print "ext     ".$ext_1."<BR>";
    42. print "port    ".$port_1."<BR>";
    43.  
    44. print "-----------------------------------------<BR>";
    45. print "Вывод из массива ".$i."<BR>";
    46. print "id_user ".$row1['id_user']."<BR>";
    47. print "inv     ".$row1['inv']."<BR>";
    48. print "int     ".$row1['int']."<BR>";
    49. print "ForAll  ".$row1['ForAll']."<BR>";
    50. print "ext     ".$row1['ext']."<BR>";
    51. print "port    ".$row1['port']."<BR>";
    52.  
    53. print "<BR>";
    54. print "<form name=forma1 action='bd_phone_edit_4.php' method=post>";
    55. print "id пользователя <input type=text name=user_id_1 size=10 value='$user_id_1'>";
    56.  
    57. print "<input name=qweasd1 type=submit value='Проверка'>";
    58.  
    59. print "<BR>";
    60. print "id телефона     <input type=text name=inv_1     size=10 value='$inv_1'>";
    61. print "<BR>";
    62. print "Внутренний      <input type=text name=int_1     size=10 value='$int_1'>";
    63. print "<BR>";
    64. print "Для всех        <input type=text name=ForAll_1  size=10 value='$ForAll_1'>";
    65. print "<BR>";
    66. print "Внешний         <input type=text name=ext_1     size=10 value='$ext_1'>";
    67. print "<BR>";
    68. print "Розетка         <input type=text name=port_1    size=10 value='$port_1'>";
    69. print "<BR>";
    70. print "<input name=qweasd type=button value='Сохранить'></form>";
    71.  
    72. echo '<pre>'; print_r ($row1); echo '</pre>';
    73. ?>
    74.  
    Сбасибо, что так сказать "Направил"... :)
     
  10. decoder

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

    С нами с:
    11 фев 2006
    Сообщения:
    469
    Симпатии:
    0
    XAOC_303
    Советую тебе почитать http://phpfaq.ru/, так как твой скрипт в реальных условиях использовать нельзя ни в коем случае.
     
  11. XAOC_303

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

    С нами с:
    5 сен 2008
    Сообщения:
    6
    Симпатии:
    0
    пасиб
    а если так?

    bd_ph_1.php
    PHP:
    1.  
    2. $db=mysql_connect('host', 'user1', 'pass');
    3. mysql_select_db('corp') or die ("невозможно выбрать базу");
    4.  
    5. include "post_1.php";
    6. $done1=val1(array($surname_1, $int_ph_1, $ext_ph_1));
    7. if ($done1!="сцуко")
    8.   {
    9.    $query="SELECT * FROM base_phone, users WHERE (base_phone.id_user=users.id_user";
    10.    if ($surname_1<>'')    { $query.=" && users.surname LIKE '"    .$surname_1."%'";}
    11.    if ($int_ph_1<>'')     { $query.=" && base_phone.int_ph LIKE '".$int_ph_1."%'";}
    12.    if ($ext_ph_1<>'')     { $query.=" && base_phone.ext_ph LIKE '".$ext_ph_1."%'";}
    13.    $query.=")";
    14.   }
    15.  else
    16.   {
    17.    $query.="SELECT * FROM base_phone, users WHERE (base_phone.id_user=users.id_user)";
    18.   }
    19.  
    20. $result=mysql_query($query);
    21. ...
    22.  

    post_1.php
    PHP:
    1.  
    2.  function val1 ($array2)
    3.  {
    4.   $vowels = array("~", "`", "!", "@", "\\", "#", "№", "$", ";", "^", ":", "?", "*", "(", ")", "_", "=", "+", "|", "/", "{", "}", "[", "]", "'", "<", ">", ".", "&", ",");  
    5.   $done1="";
    6.   for ($i1=0;$i1<count($array2);$i1++)
    7.    {
    8.      $array2[$i1]= str_replace($vowels, "сцуко", $array2[$i1]);
    9.      
    10.      if ($done1!="сцуко")
    11.         {
    12.           if (substr_count($array2[$i1], "сцуко")>0) {$done1="сцуко";} else {$done1= "намана";}
    13.         }  
    14.    }
    15.   return $done1;
    16.  }
    17.  
    [/code]