За последние 24 часа нас посетили 62932 программиста и 1743 робота. Сейчас ищут 893 программиста ...

Неизвестная переменая в php (типа $_GET или $_POST)

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

  1. Loni

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

    С нами с:
    1 фев 2008
    Сообщения:
    1
    Симпатии:
    0
    Привет всем. Подскажите пожалуйста, как можно устнановить, чтобы проверка проводилась, если введено значение в переменую $_GET['id'] или $_POST['edit']?

    Я относительно недавно стал изучать php5 c этого сайта. (Хотел бы еще попросить: Вы не могли бы порекомендовать какую-нибудь книжку по php5, где доходчиво учат php5? Дело в том, что учебник с этого сайта написан с ошибками, мне приходилось многие исходники вручную корректировать, используя доп. информацию из интернета. Другой пошаговой книги по php5 я не нашел). Так вот. Тем не менее удалось разработать более или менее работающию на файлах php сайт с админкой, в которой можно удалять, добавлять разделы

    Теперь хотелось бы научиться создовать сайты на php, работающие с MySQL.
    Я нашел сайт, где понятно для меня объясняется, как создавать сайт с админкой, который работает с MySQL. Вот только исходники с сайта работает с ошибками. Моих знаний не хватило, чтобы отладить страничку на 3 уроке. Вы не могли бы помочь?

    Вот описание структуры и проблемы:

    Структура:
    1. Я создал вирт. сайт на денвере и назвал его site_mysql.ru
    2. Создал файл connect.php в папке inc, в котором храняться имя базы, логин и пароль:

    Код (Text):
    1. <?php /*этой строкой говорим, что пхп код начался.
    2. В дальнейшем будем писать проще: "<?", т.к.
    3. наш хостинг позволяет делать урощенную запись.*/
    4. $link = mysql_connect('site_mysql.ru', 'dbuser', 'password') or die("Не могу соединиться");
    5. mysql_select_db('dbname', $link);
    6. // а в последней строке мы укажем, что пхп код закончился
    7. ?>
    2. Создал файл index.php в папке adm, в котором собственно происходит подключение к базы данных и добавление строк в базу с информацией о страничках:

    Код (Text):
    1. <?
    2. function show_form(){
    3.         // подключаем файл с настройками подключения к БД
    4.         require '../inc/connect.php';
    5.         //делаем запрос к БД, на данный момент на следующие две строчки не стоит обращать внимание, объясню их потом, посокльку на данном этапе они еще не используются.
    6.         $result = mysql_query("SELECT * FROM pages WHERE id = '".$_GET['id']."';", $link);
    7.         $row = mysql_fetch_array($result);
    8. ?>
    9. <!-- далее идет обычный HTML -->
    10. <form action="" method="post">
    11. <table cellspacing="1" cellpadding="2" bgcolor="#1F2760">
    12. <tr bgcolor="#B0ADC3">
    13.   <td><p>Текст страницы</p></td>
    14. </tr>
    15. <tr bgcolor="#ffffff">
    16.   <td>
    17.       <textarea name="body" rows="20" cols="59" class="enter">
    18.                 <?// "<?=" тоже самое, что и "<? echo", т.е. вывод на экран, что выводим объясню позже ;-) ?>
    19.                 <?=stripslashes($row['body']);?>
    20.       </textarea>
    21.   </td>
    22. </tr>
    23. <tr>
    24.   <td bgcolor="#1F2760" align="right">
    25.       <input type="hidden" name="id" value="<?=$_GET['id'];?>">
    26.       <input type="submit" value="отправить" name="edit">
    27.   </td>
    28. </tr>
    29. </table>
    30. </form>
    31. <?php
    32. } // функция show_form() закончилась
    33.  
    34. function complete(){
    35.       // подключаем файл с настройками подключения - это мы уже знаем.
    36.       require '../inc/connect.php';
    37.  
    38.       // делаем запрос к БД в котором пытаемся вытащить страничку с указаным id. На данный момент мы не сделали еще ни одной страницы, посему запрос вернет пустой ряд.
    39.       $result = mysql_query("SELECT * FROM pages WHERE id = '".$_POST['id']."';", $link);
    40.  
    41.       // перекидываем данные из MySQL в пхпшный ассоциативный массив
    42.       $row = mysql_fetch_array($result);
    43.  
    44.       // проверяем не пуст ли элемент массива id. Если пуст, значит вставляем наши данные в БД
    45.       if(empty($row['id']))
    46.             $query = "INSERT INTO pages (body) VALUES ('".mysql_real_escape_string($_POST['body'])."'
    47. )";
    48.       // а вот если не пуст, значит с этим id уже есть запись и в данном случае мы ее просто отредактируем
    49.       else
    50.             $query = "UPDATE pages SET
    51.                                      body = '".mysql_real_escape_string($_POST['body'])."'
    52.                      WHERE id = '".$_POST['id']."';";
    53.  
    54.       // непосредственно записываем наши данные в базу (до этого мы просто описывали, что надо сделать, а теперь делаем)
    55.       mysql_query($query, $link);
    56.  
    57.       // ну и просто выводим крикливую надпись, что скрипт отработал
    58.       echo '<h3>Данные обновлены</h3>';
    59. }
    60. function show_pages() {
    61.         require '../inc/connect.php';
    62.         echo '
    63. <table cellspacing="1" cellpadding="2" bgcolor="#1F2760">
    64. <tr bgcolor="#B0ADC3">
    65.   <td>
    66.      <a href="?id=new">Добавить страницу</a>
    67.   </td>
    68. </tr>
    69. </table>';
    70.         echo '
    71. <table cellspacing="1" cellpadding="2" bgcolor="#1F2760">
    72. <tr bgcolor="#B0ADC3">
    73.   <td>
    74.      <b>Номер страницы</b>
    75.   </td>
    76. </tr>';
    77.         $result = mysql_query("SELECT * FROM pages ORDER BY id;", $link);
    78.         while($row = mysql_fetch_array($result)){
    79.                echo '
    80. <tr bgcolor="#ffffff">
    81.   <td>
    82.      <a href="?id='.$row['id'].'">'.$row['id'].'</a>
    83.   </td>
    84. </tr>';
    85.         }
    86.         echo '
    87. </table>';
    88.  
    89. }  
    90. // функция настолько простая, что мне даже и объяснять там нечего. Опять идет обычный html, в котором встречается запрос к БД, в котором мы просим вывести все наши записи отсортировав их по id. Соответственно, каждый полученный из базы id мы выводим ссылкой, чтобы в него можно было зайти. Короче,
    91. if($_POST['edit'])
    92. complete();
    93.  // если была нажата кнопочка "отправить", которая именуется edit - тогда вызываем функию complete()
    94. if($_GET['id']) show_form();
    95.  
    96. // если мы нажали на ссылку в функции show_pages(), то значит мы передали в переменную $_GET['id'] тот самый id, который нас интересует. Поэтому в этом слчае вызываем форму редактирования нашей странички.
    97. else show_pages(); // ну, а если мы не выбрали определенный id - запускаем нашу функцию выбора id.
    98. ?>
    Так вот, при запуске index.php, денвер ругается, что переменая $_POST['edit'] и $_GET['id'] не определены. Я пробывал вручную определить в коде типа:

    Код (Text):
    1. $_POST['edit'] = "";
    2. $_GET['id'] = "";
    или ссылку вида:
    Код (Text):
    1. http://site_mysql.ru/adm/?id=&edit=
    но в обоих случаях не получалась.

    Как правильно написать вот этот кусок:
    Код (Text):
    1. if($_POST['edit']) complete();
    2. if($_GET['id']) show_form();  
    3. else show_pages();
    ????

    ps: архив с структурой

    С уважением, Loni
     
  2. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Код (Text):
    1. if(isset($_POST['edit'])) complete();
    и т.д.
     
  3. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    empty(),isset()

    PHP:
    1. <?php
    2. if(isset($_POST['edit']) && !empty($_POST['edit']))
    3.     complete();
    4. if(isset($_GET['edit']) && !empty($_GET['edit']))
    5.     show_form();
    6. else
    7.     show_pages();
    8. ?>
     
  4. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Я учился по книге "Профессиональное программирование на php 5" издательства Вильямс, авторы Олищук, Чаплыгин.
     
  5. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    http://php.ru/forum/viewtopic.php?t=4537
     
  6. antonn

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

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    а я ниче не читал и нигде не учился %)
     
  7. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    а будешь флудить, ещё ничего и не напишешь :)