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

Говорим обо всем, что не имеет отношения к основной тематике сайта и форума. Установлена авточистка (400 дней).

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

Сообщение Lix 01.02.2008 13:38

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

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

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

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

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

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


2. Создал файл index.php в папке adm, в котором собственно происходит подключение к базы данных и добавление строк в базу с информацией о страничках:

Код: Выделить всё
<?
function show_form(){
        // подключаем файл с настройками подключения к БД
        require '../inc/connect.php';
        //делаем запрос к БД, на данный момент на следующие две строчки не стоит обращать внимание, объясню их потом, посокльку на данном этапе они еще не используются.
        $result = mysql_query("SELECT * FROM pages WHERE id = '".$_GET['id']."';", $link);
        $row = mysql_fetch_array($result);
?>
<!-- далее идет обычный HTML -->
<form action="" method="post">
<table cellspacing="1" cellpadding="2" bgcolor="#1F2760">
<tr bgcolor="#B0ADC3">
  <td><p>Текст страницы</p></td>
</tr>
<tr bgcolor="#ffffff">
  <td>
      <textarea name="body" rows="20" cols="59" class="enter">
                <?// "<?=" тоже самое, что и "<? echo", т.е. вывод на экран, что выводим объясню позже ;-) ?>
                <?=stripslashes($row['body']);?>
      </textarea>
  </td>
</tr>
<tr>
  <td bgcolor="#1F2760" align="right">
      <input type="hidden" name="id" value="<?=$_GET['id'];?>">
      <input type="submit" value="отправить" name="edit">
  </td>
</tr>
</table>
</form>
<?php
} // функция show_form() закончилась

function complete(){
      // подключаем файл с настройками подключения - это мы уже знаем.
      require '../inc/connect.php';

      // делаем запрос к БД в котором пытаемся вытащить страничку с указаным id. На данный момент мы не сделали еще ни одной страницы, посему запрос вернет пустой ряд.
      $result = mysql_query("SELECT * FROM pages WHERE id = '".$_POST['id']."';", $link);

      // перекидываем данные из MySQL в пхпшный ассоциативный массив
      $row = mysql_fetch_array($result);

      // проверяем не пуст ли элемент массива id. Если пуст, значит вставляем наши данные в БД
      if(empty($row['id']))
            $query = "INSERT INTO pages (body) VALUES ('".mysql_real_escape_string($_POST['body'])."'
)";
      // а вот если не пуст, значит с этим id уже есть запись и в данном случае мы ее просто отредактируем
      else
            $query = "UPDATE pages SET
                                     body = '".mysql_real_escape_string($_POST['body'])."'
                     WHERE id = '".$_POST['id']."';";

      // непосредственно записываем наши данные в базу (до этого мы просто описывали, что надо сделать, а теперь делаем)
      mysql_query($query, $link);

      // ну и просто выводим крикливую надпись, что скрипт отработал
      echo '<h3>Данные обновлены</h3>';
}
function show_pages() {
        require '../inc/connect.php';
        echo '
<table cellspacing="1" cellpadding="2" bgcolor="#1F2760">
<tr bgcolor="#B0ADC3">
  <td>
     <a href="?id=new">Добавить страницу</a>
  </td>
</tr>
</table>';
        echo '
<table cellspacing="1" cellpadding="2" bgcolor="#1F2760">
<tr bgcolor="#B0ADC3">
  <td>
     <b>Номер страницы</b>
  </td>
</tr>';
        $result = mysql_query("SELECT * FROM pages ORDER BY id;", $link);
        while($row = mysql_fetch_array($result)){
               echo '
<tr bgcolor="#ffffff">
  <td>
     <a href="?id='.$row['id'].'">'.$row['id'].'</a>
  </td>
</tr>';
        }
        echo '
</table>';


// функция настолько простая, что мне даже и объяснять там нечего. Опять идет обычный html, в котором встречается запрос к БД, в котором мы просим вывести все наши записи отсортировав их по id. Соответственно, каждый полученный из базы id мы выводим ссылкой, чтобы в него можно было зайти. Короче,
if($_POST['edit'])
complete();
// если была нажата кнопочка "отправить", которая именуется edit - тогда вызываем функию complete()
if($_GET['id']) show_form();

// если мы нажали на ссылку в функции show_pages(), то значит мы передали в переменную $_GET['id'] тот самый id, который нас интересует. Поэтому в этом слчае вызываем форму редактирования нашей странички.
else show_pages(); // ну, а если мы не выбрали определенный id - запускаем нашу функцию выбора id.
?>


Так вот, при запуске index.php, денвер ругается, что переменая $_POST['edit'] и $_GET['id'] не определены. Я пробывал вручную определить в коде типа:

Код: Выделить всё
$_POST['edit'] = "";
$_GET['id'] = "";


или ссылку вида:
Код: Выделить всё
http://site_mysql.ru/adm/?id=&edit=


но в обоих случаях не получалась.

Как правильно написать вот этот кусок:
Код: Выделить всё
if($_POST['edit']) complete();
if($_GET['id']) show_form(); 
else show_pages();
????

ps: в атаче выкладываю структуру.

С уважением, Lix2008
Вложения
www.rar
(5.75 Кб) Скачиваний: 69
Lix
phpBB 1.0.0
 
Сообщения: 1
Зарегистрирован: 17.01.2008 16:25


Сообщение rxu 01.02.2008 18:04

Использовать функцию isset, например.
Код: Выделить всё
if(isset($_POST['edit'])
{
complete();
}
и так далее.
Изображение
Аватара пользователя
rxu
phpBB Guru
 
Сообщения: 4532
Зарегистрирован: 12.05.2006 17:16
Откуда: Красноярск


Вернуться в Флейм

Кто сейчас на конференции

Сейчас этот форум просматривают: rxu и гости: 0