urlencode - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > Полезное / Common > Программирование / Programming > PHP

PHP Форум как для начинающих программистов на PHP так и для профессионалов этого дела. Если нужно создать скрипт, функцию и т.д, но не знаете как, спросите у нас и мы вам подскажем. Здесь вы найдете примеры скриптов которые вы сможете использовать на сайтах своих серверов (онлайн, регистрация, семь печатей, топ игроков). Так же много книг и статей.

Ответ
Опции темы
Непрочитано 23.09.2015, 17:36   #1
Аватар для desolator
Пользователь

Автор темы (Топик Стартер) urlencode

Всем привет.
Есть у одного хостинга свое api - прикрутил и вроде бы всё ок но(!)
Когда сервер отправляет отчет об ошибке (например из-за того что адрес с таким именем уже существует я получаю вот такое сообщение "{"status":"error","message":"\u041f\u043e\u0447\u 0442\..."
\u041f\u043e\u0447\u0442\... - это urlencoded-текст в кодировке UTF-8.
Специально воспроизвожу ошибку


В доках у провайдера на это API написано:
API DOC:
Свернуть ↑Развернуть ↓

То есть, насколько я понимаю, нужно сначала http://php.ru/manual/function.json-decode.html, потом уже взять конкретный элемент массива с ответом и применить к нему http://php.net/manual/en/function.urldecode.php
Мой запрос
PHP код:
<?php
$fields 
= array(
    
'auth_login' => "moi_login",
    
'auth_token' => "moi_token",
   
    
'class' => "hosting_mailbox",
    
'method' => "create",
   
    
'account' => "moi_acc"
    
'mailbox' => $_POST['mailbox'],
    
'password' => $_POST['password'],
);

$fields_string ""
foreach(
$fields as $key => $value) {
     
$fields_string .= $key.'='.urlencode($value).'&';
}

rtrim($fields_string'&');
 
$ch curl_init();
curl_setopt($chCURLOPT_URL"https://HOSTING/api.php");
curl_setopt($chCURLOPT_RETURNTRANSFER1);
curl_setopt($chCURLOPT_POSTcount($fields));
curl_setopt($chCURLOPT_POSTFIELDS$fields_string);
$response curl_exec($ch);
curl_close($ch);
echo 
"Ответ на Ваш запрос: ".$response;
?>
Проблема заключается в том, что я очень хреново знаю php и js. urldecode на пару с json-decode для меня слишком сложно.
Помогите дописать
Изображения
Тип файла: jpg one.jpg (9.9 Кб, 107 просмотров)
Тип файла: jpg dva.jpg (7.5 Кб, 104 просмотров)

Последний раз редактировалось desolator; 23.09.2015 в 19:01.
desolator вне форума Ответить с цитированием
Непрочитано 24.09.2015, 10:05   #2
Аватар для desolator
Пользователь

Автор темы (Топик Стартер) Re: urlencode

Вот так работает.
PHP код:
$json_string 'https://HOSTING/api.php';
$jsondata file_get_contents($json_string);
$response json_decode($response,true);
echo 
"<pre>";
print_r($response); 
В моем случае это просто целый JSON. После json_decode никакого urldecode делать уже не нужно.

Последний раз редактировалось desolator; 24.09.2015 в 10:35.
desolator вне форума Ответить с цитированием
Непрочитано 24.09.2015, 10:17   #3
Пользователь

По умолчанию Re: urlencode

Если вы про ответ, то не надо никаких urldecode делать.

Цитата:
\u041f\u043e\u0447\u0442\... - это urlencoded-текст в кодировке UTF-8.
с чего вы взяли?
Hett вне форума Ответить с цитированием
Непрочитано 24.09.2015, 10:35   #4
Аватар для desolator
Пользователь

Автор темы (Топик Стартер) Re: urlencode

Цитата:
Сообщение от Hett Посмотреть сообщение
Если вы про ответ, то не надо никаких urldecode делать.


с чего вы взяли?
Та что-то мне так санчала показалось. Потом понял что это просто json
desolator вне форума Ответить с цитированием
Непрочитано 24.09.2015, 10:44   #5
Пользователь

По умолчанию Re: urlencode

Кстати делать
Код:
foreach($fields as $key => $value) {
     $fields_string .= $key.'='.urlencode($value).'&';
}
нет необходимости, можно просто передать массив key=>value как есть (энкодить ничего не нужно).
С пхп 5.3 по крайней мере точно
Hett вне форума Ответить с цитированием
Непрочитано 24.09.2015, 16:42   #6
Аватар для desolator
Пользователь

Автор темы (Топик Стартер) Re: urlencode

Появился еще один вопрос.
После ввода данных в форму и нажатия сабмит вроде бы всё ок. Ответы от сервера API приходят нормально (либо error либо success).
pehepe:
Свернуть ↑Развернуть ↓

Т.е. меня перенаправляет с http://192.168.0.117/new/ на http://192.168.0.117/new/mail.php

Теперь хочу седлать так, что бы при нажатии "submit" проверялось значение
PHP код:
print_r($response); 
сейчас оно выводится на экран в браузере(см. IMG), а мне надо проверить его средствами php и при условии success перенаправлять например на /new/skype.html, а при error очищать поля в форме и выводить popup на странице формы с ошибкой от
PHP код:
print_r($response); 
.
Пытался сделать так:
PHP код:
if ($response == "хз как опредялять success в $response") {$redirect_url "/new/skype.html";}
else {
$redirect_url "/new";}

 
header('HTTP/1.1 200 OK');
header('Location: http://'.$_SERVER['HTTP_HOST'].$redirect_url);
exit(); 
Думал парсить страницу... но по-моему это п*ц плохо(
Не знаю как выйти из ситуации. Может кто-то что-то подскажет
desolator вне форума Ответить с цитированием
Непрочитано 24.09.2015, 18:53   #7
Аватар для epmak
aka Lexa

По умолчанию Re: urlencode

PHP код:
if($response["status"] == "error")
{
header('Location: http://'.$_SERVER['HTTP_HOST'].'/errorpage.php';
die();
}
else if(
$response["status"] == "success")
{
header('Location: http://'.$_SERVER['HTTP_HOST'].'/successpage.php';
die();

если я верно понял
__________________
Блог
epmak вне форума Ответить с цитированием
Непрочитано 25.09.2015, 09:33   #8
Аватар для desolator
Пользователь

Автор темы (Топик Стартер) Re: urlencode

Попытался вот так:
variant1:
Свернуть ↑Развернуть ↓

Получаю просто белый экран

Попытался ещё вот так:
variant 2:
Свернуть ↑Развернуть ↓

Получаю экран с ошибкой.
Что в первом, что во втором вариантах никакого редиректа не происходит(
desolator вне форума Ответить с цитированием
Непрочитано 25.09.2015, 09:37   #9
Аватар для epmak
aka Lexa

По умолчанию Re: urlencode

проще все
убрать
PHP код:

echo "<pre>";
print_r($response); 
а дальше написать
PHP код:
if ($response['status'] == 'error') {
//вместо  redirect_url  какое-то действие
$redirect_url "/new/skype.html";
} else {
//вместо  redirect_url  какое-то действие
$redirect_url "/new";

так как последний вариант и не факт что будет работать.

еще бы по-хорошему, при дебаге не плохо в начале скрипта ставить
PHP код:
error_reporting(E_ALL); 
и обращаю внимание: в данном случае лучше все же ставить не ===, а ==
__________________
Блог
epmak вне форума Ответить с цитированием
Непрочитано 25.09.2015, 10:00   #10
Аватар для desolator
Пользователь

Автор темы (Топик Стартер) Re: urlencode

Включл вывод ошибок
забахал вот так:
PHP код:
if ($response['status'] == 'error') {
//вместо  redirect_url  какое-то действие
echo "error";
} else {
//вместо  redirect_url  какое-то действие
echo "success";

Отображается правильно error когда действительно ответ приходит error.
success -тоже верно выводится. Но когда пишу вместо echo - redirect_url при таких же условиях, вижу просто белый экран(
desolator вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 12:40. Часовой пояс GMT +3.

Вверх