Запустить php на сервере из html
От: ChromY  
Дата: 31.10.10 13:11
Оценка:
Есть страничка, в ней Java-applet и кнопка.
По кнопке нужно из апплета считать строку
и записать в БД на сервере.
БД на сервере я создал.
Осталось

1. Сделать что-то с кнопкой

<form action = ??? >
<p><button>Сохранить данные</button>
</form>

2. Сделать php-файл.

Помогите с пунктом 1 ,пожалуйста
Я так понимаю, что нужно сделать java-script-сценарий,
который считает инфо из апплета
и пошлёт ее php-файлу на сервере ?
Страничка не должна измениться.
Re: Запустить php на сервере из html
От: MicSOFT  
Дата: 31.10.10 16:31
Оценка:
Здравствуйте, ChromY, Вы писали:

CY>Есть страничка, в ней Java-applet и кнопка.

CY>По кнопке нужно из апплета считать строку
CY>и записать в БД на сервере.
CY>БД на сервере я создал.
CY>Осталось

CY>1. Сделать что-то с кнопкой


CY><form action = ??? >

CY><p><button>Сохранить данные</button>
CY></form>

CY>2. Сделать php-файл.


CY>Помогите с пунктом 1 ,пожалуйста

CY>Я так понимаю, что нужно сделать java-script-сценарий,
CY>который считает инфо из апплета
CY>и пошлёт ее php-файлу на сервере ?
CY>Страничка не должна измениться.

jQuery в помощь:
<form action="/handler.php" method="post"> 
<button onclick="document.postData(this)">Сохранить данные</button>
</form>
<!--
  ...
/-->
<script language="JavaScript" type="text/javascript">
document.postData = function(button) {
  var value; 
  // Получить строку из апплета в переменную value
  // и проверить ее как-нибудь
  $.post( button.form.action, { value: value } );
};
</script>


Доки по jQuery на русском: здесь.

Примерный код PHP скрипта для обработки запросов
<?php
# Filename: handler.php
#-----------------------
if('POST' == $_SERVER['REQUEST_METHOD']
&& isset($_REQUEST['value'])) {
  $value = $_REQUEST['value'];
  if(!empty($value)) {
    //
    // Сохраняем value в БД
    //
  }
}?>
Re[2]: Запустить php на сервере из html
От: ChromY  
Дата: 31.10.10 17:46
Оценка:
Здравствуйте, MicSOFT, Вы писали:

Спасибо, MicSOFT.

Вот что я сделал:
(пустой скрипт)

<?php
if('POST' == $_SERVER['REQUEST_METHOD'] && isset($_REQUEST['value']))
{
$value = $_REQUEST['value'];
if(!empty($value))
{

}
}
?>

При нажатии на кнопку ошибки нет.
В брузере появляется пустая страничка ..../handler.php
И становится доступной кнопка "назад".
Я нажимаю на кнопку назад и возвращаюсь на страничку с апплетом.
Что делать ?
Re[3]: Запустить php на сервере из html
От: MicSOFT  
Дата: 31.10.10 19:06
Оценка:
Здравствуйте, ChromY, Вы писали:

CY>При нажатии на кнопку ошибки нет.

CY>В брузере появляется пустая страничка ..../handler.php
CY>И становится доступной кнопка "назад".
CY>Я нажимаю на кнопку назад и возвращаюсь на страничку с апплетом.
CY>Что делать ?

По хорошему, нужно правильно сделать HTML разметку:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Работа с формой</title>
</head><body>
<form action="/handler.php" method="post"><div>
<input type="button" onclick="document.postData(this)" value="Сохранить данные" />
</div></form>
<!--
  ...
/-->
<script type="text/javascript">
document.postData = function(button) {
  var value;
  // Получить строку из апплета в переменную value
  // и проверить ее как-нибудь
  $.post( button.form.action, { value: value } );
};
</script>
</body></html>
Здесь ничего и никуда не переадресовывается ...
Re[2]: Запустить php на сервере из html
От: ChromY  
Дата: 31.10.10 19:10
Оценка:
Вот что я сделал:

html полностью:

<HTML>
<BODY bgcolor="#c0c0c0">
<CENTER>
<APPLET codebase="classes" code="Pas/Pas.class" width=900 height=600 name = app1></APPLET>
<form action="handler.php" method="post">
<button onclick="document.postData(this)">Сохранить данные</button>
</form>
<script language="JavaScript" type="text/javascript">
document.postData = function(button) {
var value;
// Получить строку из апплета в переменную value
// и проверить ее как-нибудь
value = app1.getSrcLayout();
alert(value);
$.post( button.form.action, { value: value } );
};
</script>
</CENTER>
</BODY>
</HTML>

php полностью:
<?php
print ("Привет, мир 1!");
print ( $_SERVER['REQUEST_METHOD'] );
print ( $_REQUEST['value'] );
if('POST' == $_SERVER['REQUEST_METHOD'] && isset($_REQUEST['value']))
{
$value = $_REQUEST['value'];
print ("Привет, мир 2!");
if(!empty($value))
{
print($value);
print ("Привет, мир 3!");
}
}
?>

Проверил в Опере, IE8 и FireFox

После нажатия на кнопку "Сохранить данные"
alert(value); — показывает то, что надо во всех браузерах.

В Опере появляется страничка ....handler.php
на ней Привет, мир 1!POST

В IE8 после alert ничего не происходит.

В FireFox появляется страничка ....handler.php
на ней Привет, мир 1!POST
(то же, что и в Опере);
Re[2]: Запустить php на сервере из html
От: ChromY  
Дата: 31.10.10 19:48
Оценка:
Здравствуйте, MicSOFT, Вы писали:
По хорошему, нужно правильно сделать HTML разметку:

Я сделал, как Вы советуете,
но результат тот же, и плюс
вместо русских букв на кнопке квадратики
и заголовок главного окна — тоже
квадратики вместо русских букв.
Re[3]: Запустить php на сервере из html
От: MicSOFT  
Дата: 31.10.10 20:06
Оценка:
Здравствуйте, ChromY, Вы писали:

CY>Я сделал, как Вы советуете,

CY>но результат тот же

Это м.б. следствием того, о чем написано ниже.
А вообще то надо бы еще заинклудить саму библиотеку jQuery:
<script src="jquery-1.3.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
document.postData = function(button) {
  //
  // У меня апплета нет, поэтому использую куклу
  //
  function dummy() {
    return 'Это строка из Java-апплета';
  }
  var value = dummy();
  if(value) $.post(button.form.action, { value: value });
};
</script>

CY>вместо русских букв на кнопке квадратики
CY>и заголовок главного окна — тоже
CY>квадратики вместо русских букв.

Внимательно смотрите:
<meta http-equiv="content-type" content="text/html; charset=utf-8" />

У меня в примере кодировка символов UFT-8, поэтому файл HTML должен быть сохранен именно в этой кодировке.
Если у вас CP-1251 или Cyrillic Windows, то нужно прописать:
<meta http-equiv="content-type" content="text/html; charset=windows-1251" />
Re[4]: Запустить php на сервере из html
От: ChromY  
Дата: 31.10.10 21:04
Оценка:
Здравствуйте, MicSOFT,

Сделал так:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<meta http-equiv="content-type" content="text/html; charset=windows-1251" />
<title>Работа с формой</title>
<BODY bgcolor="#c0c0c0">
<CENTER>
<APPLET codebase="classes" code="Pas/Pas.class" width=900 height=600 name = app1></APPLET>

<form action="handler.php" method="post">
<button onclick="document.postData(this)">Сохранить данные</button>
</form>

<script src="jquery-1.3.2.min.js" type="text/javascript"></script>
<script language="JavaScript" type="text/javascript">
document.postData = function(button) {
var value;
// Получить строку из апплета в переменную value
// и проверить ее как-нибудь
value = app1.getSrcLayout();
alert(value);
$.post( button.form.action, { value: value } );
};
</script>
</CENTER>
</BODY>
</HTML>

handler.php:

<?php
print ("Привет, мир 1!");
print ( $_SERVER['REQUEST_METHOD'] );
print ( $_REQUEST['value'] );
if('POST' == $_SERVER['REQUEST_METHOD'] && isset($_REQUEST['value']))
{
$value = $_REQUEST['value'];
print ("Привет, мир 2!");
if(!empty($value))
{
print($value);
print ("Привет, мир 3!");
}
}
?>


Теперь и в Опере и в IE8 и в FireFox
реакция одинаковая:
После alert появляется страница .... /handler.php
с одной строчкой:
Привет, мир 1!POST


Значит $_REQUEST['value'] — пустая строка.
Во всех браузерах теперь кодировка правильная.
Re[5]: Запустить php на сервере из html
От: MicSOFT  
Дата: 31.10.10 21:50
Оценка:
Здравствуйте, ChromY, Вы писали:

CY>Здравствуйте, MicSOFT,


CY>Сделал так:


Теперь про ошибки:
1. Нет закрытия тега HEAD (это не особо важно, но нужно)
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1251" />
  <title>Работа с формой</title>
</head>
<BODY bgcolor="#c0c0c0">
2. В форме есть кнопка (тег button), которая по умолчанию имеет type="submit".
Это значит, если по ней щелк, то она сделает form.submit(form.method, form.action) в target = self, что у вас и происходит: открывается handler.php.
Надо кнопке задать тип button, чтобы она не сабмитела:
<button onclick="document.postData(this)" type="button">Сохранить данные</button>
или запретить действие submit ч/з JavaScript:
<button onclick="return document.postData(this)">Сохранить данные</button>
...
<script language="JavaScript" type="text/javascript">
document.postData = function(button) {
  ...
  return false;
};
</script>
Re[5]: Запустить php на сервере из html
От: MicSOFT  
Дата: 31.10.10 22:32
Оценка:
Здравствуйте, ChromY, Вы писали:

CY>Значит $_REQUEST['value'] — пустая строка.


Для отладки на стороне сервера можно использоать такой код:
<?php
# Filename: handler.php
#-----------------------
if('POST' == $_SERVER['REQUEST_METHOD']
&& isset($_REQUEST['value'])) {
  $value = $_REQUEST['value'];
  if(!empty($value))
    file_put_contents('handler.txt', 'event = ' . date('Y-m-d H:i:s') . PHP_EOL
                                   . 'value = ' . $value);
} ?>
И посматривать, что скидывается в файл handler.txt в том же каталоге, что и handler.php
Re[6]: Запустить php на сервере из html
От: ChromY  
Дата: 01.11.10 16:13
Оценка:
MicSOFT, спасибо.
Исправил html (type="button")
Теперь страница handler.php не появляется.
Т.е. то, что надо.
Дальше я хочу убедиться, а вызывается ли handler.php.

Использовал file_put_contents, но handler.txt не появился.
Возможно такое, что на моем хостинге эта функция запрещена ?

Сделал так:
handler.php полностью:

<?php

$link = mysql_connect("localhost", "mylogin", "mypwd");

mysql_select_db("mylogin_rslts", $link);
mysql_query( "INSERT into layouts (layout, history) values ('layout1', 'history1')" );
mysql_close($link);

if('POST' == $_SERVER['REQUEST_METHOD'] && isset($_REQUEST['value']))
{
$value = $_REQUEST['value'];
if(!empty($value))
{
}
}
?>

С базой данных никаких изменений не происходит.
Запись не добавляется.
И еще вопрос:
Есть 2 пароля:
1-й для хостинга
2-й для БД
Какой пароль требует mysql_connect ?
Re[6]: Запустить php на сервере из html
От: ChromY  
Дата: 01.11.10 18:19
Оценка:
Вот еще что я сделал.
У меня есть простенький http-сервер
(из MSDN samples)
Там можно худо-бедно проследить, что происходит.

php в нем не работает,
но если type="button" отсутствует, то вот что пишет браузер:

Удалённый сервер не имеет необходимой функциональности (код ошибки: 501)
Вы попытались получить доступ к адресу http://localhost/handler.php, который сейчас недоступен.
Это нормальная реакция.

Если type="button" присутствует, то сервер запрос не получает.
Re[6]: Запустить php на сервере из html
От: ChromY  
Дата: 01.11.10 19:38
Оценка:
Короче, вот этот код:
$.post(button.form.action, { value: value });
ничего никуда не посылает.
Re[7]: Запустить php на сервере из html
От: MicSOFT  
Дата: 01.11.10 19:44
Оценка:
CY>Короче, вот этот код:
CY>$.post(button.form.action, { value: value });
CY>ничего никуда не посылает.

А файл jquery-1.3.2.min.js где лежит?
Re[7]: Запустить php на сервере из html
От: MicSOFT  
Дата: 01.11.10 19:55
Оценка:
CY>Использовал file_put_contents, но handler.txt не появился.
CY>Возможно такое, что на моем хостинге эта функция запрещена ?

Там просто м.б. нет прав для создания и записи файлов для юзера apache (php скрипт запускает процесс apache).
1. Исправить handler.php
<?php
...
file_put_contents('debug/handler.txt', ...
...
?>
2. В папке, где лежит handler.php, сделать папку debug
3. На папку debug установить права доступа = 777

И усе будет хокей
Re[7]: Запустить php на сервере из html
От: MicSOFT  
Дата: 01.11.10 20:08
Оценка:
CY>Удалённый сервер не имеет необходимой функциональности (код ошибки: 501)
CY>Вы попытались получить доступ к адресу http://localhost/handler.php, который сейчас недоступен.
CY>Это нормальная реакция.

Тут тоже все понятно. Web-сервер получет запрос на обработку файла handler.php,
но он не знает, как обрабатывать ресурсы *.php (AddType application/x-httpd-php .php).
У Web-сервера же нет модуля расширения для обработки PHP сриптов (LoadModule php5_module WebServer/PHP/php5apache2)
Re[8]: Запустить php на сервере из html
От: ChromY  
Дата: 01.11.10 20:13
Оценка:
Здравствуйте, MicSOFT, Вы писали:

MSO>А файл jquery-1.3.2.min.js где лежит?


Вот этого я не знаю.
Не знаю где лежит, где должен и где его взять.
Re[7]: Запустить php на сервере из html
От: MicSOFT  
Дата: 01.11.10 20:14
Оценка:
CY>Есть 2 пароля:
CY> 1-й для хостинга
CY> 2-й для БД
CY>Какой пароль требует mysql_connect ?

1-й для хостинга:
Это для FTP доступа и для Admin или C-Panel

2-й для БД:
Вот этот надо сувать в mysql_connect($server, $username, $password);
Тут по хорошему и логин д.б. другой (не такой, как для 1-го пароля).
Re[8]: Запустить php на сервере из html
От: ChromY  
Дата: 01.11.10 20:19
Оценка:
Здравствуйте, MicSOFT, Вы писали:

MSO>А файл jquery-1.3.2.min.js где лежит?


На моем компьютере этого файла нет.
Re[9]: Запустить php на сервере из html
От: MicSOFT  
Дата: 01.11.10 20:22
Оценка:
Здравствуйте, ChromY, Вы писали:

CY>Здравствуйте, MicSOFT, Вы писали:


MSO>>А файл jquery-1.3.2.min.js где лежит?


CY>Вот этого я не знаю.

CY>Не знаю где лежит, где должен и где его взять.

Дык, его надо скачать с оф. сайта jQuery.com.
Правда, щас они предлагают jquery-1.4.3.min.js (время не стоит на месте).
Если так, то надо исправить HTML страничку с Java-апплетом:
...
<script src="jquery-1.4.3.min.js" type="text/javascript"></script>
...
Сам файл jquery-1.4.3.min.js должен лежать рядом с HTML (в той же папке).
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.