@Neolith
IT administrator

Как написать такую функцию PHP?

Добрый день! Не бейте больно, я с программированием на "ВЫ")
Имеется HTML форма авторизации. При вооде логина/пароля данные передаются внешнему веб сервису для проверки. Веб сервис возвращает значения 1 или 0 прямо в браузер (1-ок, 0-неверный пароль).
Требуется написать IF функцию, которая в случае возврата единицы делала POST на другую страницу и передавала в нём проверенный логин и пароль. С моим кодом авторизация происходит, в браузере выдаётся 1 или 0, но IF и дальнейший редирект не происходит. Подскажите что не так? Код:
<?php
session_start();
function file_get_contents_curl($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$txResult = curl_exec($ch);
}
if ($txResult == 1)
header("Location: http://server.com/preauth.php"); +добавить POST (username+pass)
//elseif ($txResult == 0)
//    echo "Wrong usename or password!";
?>

<!DOCTYPE html>
<html>
<head>
<title>pass validation</title>
<link rel="stylesheet" href="normalize.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<section class="loginform cf">
<form name="login" action="https://webservissavtorizacii.com/check.jsp" method="get" accept-charset="utf-8">
<ul>
<li>
<label for="username">User</label>
<input type="text" name="username" placeholder="yourname" required>
</li>
<li>
<label for="password">Password</label>
<input type="password" name="password" placeholder="password" required></li>
<li>
<input type="submit" value="Login">
</li>
</ul>
</form>
</section>
</body>
</html>
  • Вопрос задан
  • 443 просмотра
Пригласить эксперта
Ответы на вопрос 4
@kryvel
Системный администратор
потому что $txResult у Вас локальная переменная в функции file_get_contents_curl и она неопределена за пределами этой функции.
и вообще очень странно что Вы ее определяете там и потом не используете.
попробуйте вот так:

<?php
session_start();
$url = "https://webservissavtorizacii.com/check.jsp"

$options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
        'method'  => 'POST',
        'content' => http_build_query($_POST),
    ),
);
$context  = stream_context_create($options);
$txResult = file_get_contents($url, false, $context);

if ($txResult == 1)
   echo "Success!";
elseif ($txResult == 0)
    echo "Wrong usename or password!";
?>

<!DOCTYPE html>
<html>
. . .
<!-- Здесь http://server.com/preauth.php это ваш php скрипт который мы редактируем -->
<form name="login" action="http://server.com/preauth.php" method="post" accept-charset="utf-8">
. . .
</html>


вот еще можете посмотреть: stackoverflow.com/questions/5647461/how-do-i-send-...
Ответ написан
@krypt3r
<?php
session_start();
function file_get_contents_curl($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    return curl_exec($ch);
}
$txResult = file_get_contents_curl($url); // тут должна быть ваша ссылка на ваш внешний веб-сервис для проверки
if ($txResult == 1) {
    header("Location: http://server.com/preauth.php"); /* добавить POST (username+pass) */
    exit;
} elseif ($txResult == 0) {
    echo "Wrong usename or password!";
}
?>
Ответ написан
@Neolith Автор вопроса
IT administrator
Без изменений. Кидает на странице с единицей и всё. Такое чувство что CURL вообще не срабатывает, просто редиректит на веб сервис и там оставляет.
Может можно как-то заставить HTML форму постить в PHP, а дальше постить CURL-ом, без перехода на веб-сервисс, а дальше уже задавать IF?
Ответ написан
Stalker_RED
@Stalker_RED
Такое чувство что CURL вообще не срабатывает, просто редиректит на веб сервис и там оставляет.

А так и есть, вы объявили функцию, но не вызывает ее.
Еще и редирект header('location ... ') не отправляет POST данные, а просто "редиректит и там оставляет".

Может можно как-то заставить
Можно. Начать стоит с описания того, что вы хотите сделать, т.к. по предложенному вами коду можно только догадываться.
Еще круче было бы начать с чтения первых глав какого-нибудь учебника, но похоже, что вы ищете "короткий путь".

Еще было бы здорово, если бы вы нашли где у вас лог с ошибками, и посмотрели что там. Там как минимум о неопределенных переменных сообщения должны быть.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы