Да, тяжело с тобой. Давай попробуем разобраться. Когда пользователь набирает в адресной строке браузера адрес (http://someserver.com/index.html), браузер запрашивает у сервера соответствующий документ (index.html), а сервер (Apache), найдя у себя этот документ, отдает браузеру. Если расширение запрашиваемого файл php, Apache отдает этот файл на выполнение PHP. PHP выполняет этот скрипт, а результат выполнения (сгенерированный html) отдает серверу, а тот, в свою очередь - клиенту (браузеру).
Как видишь, php-скрипт - это абсолютно независимая единица. Этому скрипту доступны только те переменные, которые были тобой определены внутри этого скрипта, плюс некоторое количество предопределенных переменных (например $_SERVER["DOCUMENT_ROOT"]). Немного другая ситуация, если скрипт - обработчик формы, т.е. имя файла, содержащего скрипт, указано в качестве значения атрибута action тега form:
<form name='myform' action='test.php' method='post'>
<input type="text" name="first" value="" />
<input type="text" name="second" value="" />
<input type="text" name="third" value="" />
<input type="submit" name="mysubmit" value="Отправить" />
</form>
В этом случае, после отправки формы, внутри скрипта test.php будут доступны следующие переменные: $_POST["first"], $_POST["second"], $_POST["third"], $_POST["mysubmit"]. Если пользователь ввел значения "первый", "второй", "третий", то
$_POST["first"] = "первый"
$_POST["second"] = "второй"
$_POST["third"] = "третий"
$_POST["mysubmit"] = "Отправить"
Но это только в том случае, если данные формы были отправлены. Если просто набрать в адресной строке браузера
http://someserver[dot]com/test.php переменные $_POST["first"], $_POST["second"], $_POST["third"], $_POST["mysubmit"] будут неопределены.
Теперь о том, как работает скрипт, который я приводил ранее:
PHP:
скопировать код в буфер обмена
<?PHP
$language = array( 1 => "JavaScript", 2 => "PHP", 3 => "Perl" );
if ( isset( $_POST["course"] ) ) {
echo "<h2>Вы выбрали курс:</h2>";
echo "<form name='myform' action='".$_SERVER["PHP_SELF"]."' method='POST'>";
echo "<select name='course' onChange='this.form.submit()'>";
foreach ( $language as $key => $value )
{
if ( $_POST["course"] == $key )
echo "<option value='".$key."' 'selected'>".$value."</option>";
else
echo "<option value='".$key."'>".$value."</option>";
}
echo "</select>";
echo "</form>";
$query = "SELECT name, surname FROM students WHERE course=".$_POST["course"];
echo "<p >Слушатели курса:</p>";
echo "<ul>";
{
echo "<li>".$student["name"]." ".$student["surname"]."</li>";
}
echo "</ul>";
}
else
{
echo "<h2>Доступные курсы:</h2>";
echo "<form name='myform' action='".$_SERVER["PHP_SELF"]."' method='POST'>";
echo "<select name='course' onChange='this.form.submit()'>";
echo "<option value='0'>Выберите:</option>";
foreach ( $language as $key => $value )
{
echo "<option value='".$key."'>".$value."</option>";
}
echo "</select>";
echo "</form>";
}
?>
Внутри скрипта мы определяем массив $language. Если пользователь еще не заполнил форму (проверка if), скрипт выводит в браузер форму:
Выбран первый элемент - по умолчанию. Здесь нет кнопки отправки - отправка данных осуществляется с помощью JavaScript. Как только пользователь выберет курс - onChange='this.form.submit()'. В данном случае форма и обработчик формы расположены в одном файле (но могут быть и в разных). Как только данные формы были отправлены, внутри скрипта test.php, который обрабатывает данные из этой формы, будет доступна переменная $_POST["course"]. Проверка (оператор if) устанавливает этот факт и скрипт выводит в браузер следующий код (запрашивая при этом данные из базы данных):