За последние 24 часа нас посетили 16220 программистов и 1555 роботов. Сейчас ищут 811 программистов ...

Расчет "на лету" и вывод в echo

Тема в разделе "PHP для новичков", создана пользователем 1Touch2Heaven, 12 фев 2009.

  1. 1Touch2Heaven

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

    С нами с:
    11 янв 2009
    Сообщения:
    70
    Симпатии:
    0
    Адрес:
    Калининград
    Собственно ситуация такова. Вычисляю возраст лица и потом пытаюсь его вывести.
    PHP:
    1.  
    2. <?php
    3. $hostname = "localhost";
    4. $username = "root";
    5. $password = "";
    6. $dbName = "personal";
    7.  
    8. $value1 = $_POST['search_name'];
    9.  
    10. mysql_connect($hostname, $username, $password) or die ("Не могу создать соединение");
    11.  
    12.  
    13. $query = "SELECT id,sname,fname,tname,date_birth,current_date, (YEAR(CURRENT_DATE)-YEAR(date_birth))-(RIGHT(CURRENT_DATE,5)<RIGHT(date_birth,5)) as Age FROM promo where sname='$value1'";
    14.  
    15. $res = mysql_query($query) or die(mysql_error());
    16.  
    17.  
    18. $row = mysql_num_rows($res);
    19.  
    20. echo ("
    21. <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
    22. <html xmlns=\"http://www.w3.org/1999/xhtml\">
    23.  
    24. <head>
    25.  
    26.    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\" />
    27.  
    28.    <title>Результат поиска</title>
    29.  
    30. <style type=\"text/css\">
    31. body { font: 12px Georgia; color: #666666; }
    32. h3 { font-size: 16px; text-align: center; }
    33. table { width: 700px; border-collapse: collapse; margin: 0px auto; background: #E6E6E6; }
    34. td { padding: 3px; text-align: center; vertical-align: middle; }
    35. .buttons { width: auto; border: double 1px #666666; background: #D6D6D6; }
    36. </style>
    37.  
    38. </head>
    39.  
    40. <body>
    41.  
    42. <h3>Результат поиска</h3>
    43.  
    44. <table border=\"1\" cellpadding=\"0\" cellspacing=\"0\">
    45. <tr style=\"border: solid 1px #000\">
    46.  <td><b>#</b></td>
    47.  <td align=\"center\"><b>Фамилия</b></td>
    48.  <td align=\"center\"><b>Имя</b></td>
    49.  <td align=\"center\"><b>Отчество</b></td>
    50.  <td align=\"center\"><b>Возраст</b></td>
    51.  </tr>
    52. ");
    53.  
    54. while ($row = mysql_fetch_array($res)) {
    55.     echo "<tr>\n";
    56.     echo "<td>".$row['id']."</td>\n";
    57.     echo "<td>".$row['sname']."</td>\n";
    58.     echo "<td>".$row['fname']."</td>\n";
    59.     echo "<td>".$row['tname']."</td>\n";
    60.     echo "<td>".$row['age']."</td></td>";
    61.     /* Генерируем ссылку для просмотра анкеты */
    62.     echo "<td><a name=\"print\" href=\"view_anket.php?print=".$row["id"]."\">Просмотреть</a></td>\n";
    63.     /* Генерируем ссылку для удаления анкеты */
    64.     echo "<td><a name=\"del\" href=\"del_data.php?del=".$row["id"]."\">Удалить</a></td>\n";
    65.  
    66.     echo "</tr>\n";
    67. }
    68.  
    69. echo ("</table>\n");
    70.  
    71.  
    72. echo ("<div style=\"text-align: center; margin-top: 10px;\"><a href=\"index.php\">Вернуться назад</a></div>");
    73.  
    74. ?>
    75.  
    сам запрос
    PHP:
    1. $query = "SELECT id,sname,fname,tname,date_birth,current_date, (YEAR(CURRENT_DATE)-YEAR(date_birth))-(RIGHT(CURRENT_DATE,5)<RIGHT(date_birth,5)) as Age FROM promo where sname='$value1'";
    отрабатывает просто отлично. Выводит отдельный столбец с возрастом. Это если вне скрипта его выполнить напрямки к таблице.
    но упорно не хочет выводить возраст здесь:
    PHP:
    1.  while ($row = mysql_fetch_array($res)) {
    2.     echo "<tr>\n";
    3.     echo "<td>".$row['id']."</td>\n";
    4.     echo "<td>".$row['sname']."</td>\n";
    5.     echo "<td>".$row['fname']."</td>\n";
    6.     echo "<td>".$row['tname']."</td>\n";
    7.     echo "<td>".$row['age']."</td></td>";
    8.  
    в чем моя ошибка, подскажите пожалуйста...
    заранее спасибо.

    P.S. надеюсь не достал ещё вопросами)
     
  2. Greg1978

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

    С нами с:
    18 окт 2008
    Сообщения:
    484
    Симпатии:
    0
    Адрес:
    class SenjorUser{}
    Создайте обработки ошибок по запросам из БД.А ещё лучше через исключения try catch.
    Сделайте проверку ввода пользователя приведите к нормальному типу(trim(), и ....)
     
  3. 1Touch2Heaven

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

    С нами с:
    11 янв 2009
    Сообщения:
    70
    Симпатии:
    0
    Адрес:
    Калининград
    простите, а как бы вы это объяснили идиоту?)))
     
  4. Greg1978

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

    С нами с:
    18 окт 2008
    Сообщения:
    484
    Симпатии:
    0
    Адрес:
    class SenjorUser{}
    в начале скрипта поставьте error_reporting(E_ALL);
     
  5. Frozen

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

    С нами с:
    20 окт 2008
    Сообщения:
    540
    Симпатии:
    0
    Адрес:
    Москва
     
  6. Frozen

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

    С нами с:
    20 окт 2008
    Сообщения:
    540
    Симпатии:
    0
    Адрес:
    Москва
    а кто за тебя $value1 проверять будет?
     
  7. Greg1978

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

    С нами с:
    18 окт 2008
    Сообщения:
    484
    Симпатии:
    0
    Адрес:
    class SenjorUser{}
    PHP:
    1.  
    2. <?
    3. if(!is_resource($res)) {
    4.     print "Такого имени не существует или ввод был некорректен!";
    5.     exit;
    6. }
    7. ?>
    8.  
     
  8. 1Touch2Heaven

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

    С нами с:
    11 янв 2009
    Сообщения:
    70
    Симпатии:
    0
    Адрес:
    Калининград
    $value1 нормально приходит. Ведь все заполняется, кроме age.
     
  9. 1Touch2Heaven

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

    С нами с:
    11 янв 2009
    Сообщения:
    70
    Симпатии:
    0
    Адрес:
    Калининград
    Notice: Undefined variable: Age in Z:\home\test1.ru\www\2\search_name.php on line 16
    Notice: Undefined index: age in Z:\home\test1.ru\www\2\search_name.php on line 65
     
  10. akrinel

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

    С нами с:
    26 янв 2009
    Сообщения:
    955
    Симпатии:
    1
    Адрес:
    Spb
    А что нам показывает print_r($row)?
     
  11. 1Touch2Heaven

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

    С нами с:
    11 янв 2009
    Сообщения:
    70
    Симпатии:
    0
    Адрес:
    Калининград
    показывает 1
     
  12. 1Touch2Heaven

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

    С нами с:
    11 янв 2009
    Сообщения:
    70
    Симпатии:
    0
    Адрес:
    Калининград
    немного помудрил.. толку ноль((( зато теперь ошибка только одна:
    Notice: Undefined index: age in Z:\home\test1.ru\www\2\search_name.php on line 65

    что ему нужно? я так понял что он жалуется на то, мол ему не определили age. а как её определить, если я рассчитываю её "по ходу движения"?
     
  13. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
     
  14. 1Touch2Heaven

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

    С нами с:
    11 янв 2009
    Сообщения:
    70
    Симпатии:
    0
    Адрес:
    Калининград
    ясно)))) ааааа))))))

    Слушайте, а почему он к регистру в этом случае чувствителен? где об этом можно почитать в грамотном изложении?
     
  15. alexeurodnepr

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

    С нами с:
    18 июл 2008
    Сообщения:
    244
    Симпатии:
    0
    что это
    $row = mysql_num_rows($res);
    $row = mysql_fetch_array($res)

    исправь...
    кроме этого проверяй var_damp($row) он вообще вытягивает чет...

    ЗЫ читал одну книгу, где писали, что не желательные имена переменных идут после первых запросов к бд...

    $query = "...";
    потом
    $query1 = "...";
    и поехало... вошло в привычку и на все переменные те
    $query1659878 = "..."; потом епрст)))

    $row14221
    $result55321
    and so on...
     
  16. 1Touch2Heaven

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

    С нами с:
    11 янв 2009
    Сообщения:
    70
    Симпатии:
    0
    Адрес:
    Калининград
    блин... я очень даже за, что меня тут поправляют и говорят, как лучше сделать....
    но чтож у меня за такой нафиг учебник гуановский?! Просто 90% того, что нужно исправлять (что писали уважаемые участники Конфы) взято именно из него.. А вот то что я сам своими мозгами пишу - всё норм...
    Вывод: видимо дело все-таки НЕ в прокладке между креслом и клавиатурой))))))
     
  17. 1Touch2Heaven

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

    С нами с:
    11 янв 2009
    Сообщения:
    70
    Симпатии:
    0
    Адрес:
    Калининград
    кстати, извиняюсь что оффтопом, вне темы.....
    Есть у php средства, с помощью которых можно сделать бэкап инфы из базы?
     
  18. alexeurodnepr

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

    С нами с:
    18 июл 2008
    Сообщения:
    244
    Симпатии:
    0
    уже все работает? и что за учебник, автор и название?
     
  19. akrinel

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

    С нами с:
    26 янв 2009
    Сообщения:
    955
    Симпатии:
    1
    Адрес:
    Spb
    1Touch2Heaven а зачем для этого PHP? Есть mysqladmin тулза.

    ну или

    [sql]BACKUP TABLE tbl_name [, tbl_name] ... TO '/path/to/backup/directory'
    [/sql]
     
  20. 1Touch2Heaven

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

    С нами с:
    11 янв 2009
    Сообщения:
    70
    Симпатии:
    0
    Адрес:
    Калининград
    да, все нормально начало бегать... стоило изменить только с заглавной на маленькую.... никогда бы не подумал что так чувствителен будет к реестру....

    учебник Семенова "Программирование на PHP"..... жесть....
    какой учебник посоветуете купить? а то я в книжный супермаркет заехал, а там целая полка их(((
     
  21. 1Touch2Heaven

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

    С нами с:
    11 янв 2009
    Сообщения:
    70
    Симпатии:
    0
    Адрес:
    Калининград
    в том месте куда все это отправится такой сисЬадмин, что его страшно до тулзы пускать.... а так я баттон навастрячу и все оки...