Проблем с (int) при GET

C++ JAVA
Post Reply
Pro_Lamer4e
Нов
Нов
Posts: 188
Joined: Mon Oct 26, 2009 5:10 am

Проблем с (int) при GET

Post by Pro_Lamer4e » Mon Sep 03, 2018 12:05 pm

здравейте колеги, имам проблем с (int) при гет стойностите, когато сложа (int) не ми позволява да се направа собственик на даденият сървър
линка изглежда по този начин
[php]process.php?task=owner&ip=1111.1111.111.111&port=27015[/php]
опитах даже с htaccess да го промена на
/process/owner/ip:port , но и това не се получи

[php]RewriteRule ^process/owner/(.*)$ process.php?task=owner&server_ip=$1&server_port=$1[/php]

[php]headcs("");
if (isset($_GET['task']) && $_GET['task'] == "owner") {

$ip=$_GET['ip']; // тук като сложа (int) и не минава
$port =$_GET['port']; // тук като сложа (int) и не минава
$vreme = time();

$info = mysql_fetch_array(mysql_query("SELECT * FROM servers WHERE server_ip='$ip' AND server_port='$port'"));



if($user['id'] == ""){
echo "ne ste lognat";
header("location:/index.php");
die();
}

if($info['ip'] && $info['port'] == ""){
echo "eror";
header("location:/all_servers.php");
die();
}

$server_id = $info['server_id'];
$game = $info['server_game'];

require_once('include/q.php');


if($info['server_name'] == "claim"){
mysql_query("UPDATE servers SET owner='$user[username]',owner_id='$user[id]' WHERE server_id='$server_id'");
echo "$site_lang[serverclaimsuc]";
} else {
echo"$site_lang[serverclaim]";

}

}
footcs("right");?>[/php]

User avatar
teroristd
Много Редовен
Много Редовен
Posts: 1769
Joined: Thu Feb 18, 2010 11:50 am
Answers: 83

Post by teroristd » Mon Sep 03, 2018 1:20 pm

Защото int() прехвърля стойностите в цяло число.

[php]
$var = '1a';
echo (int) $var; // връща 1
$var2 = 'a2';
echo (int) $var2; // връща 0
[/php]

raiden
Гуру
Гуру
Posts: 2182
Joined: Fri Dec 08, 2006 8:13 am
Answers: 190
Location: Варна

Re: Проблем с (int) при GET

Post by raiden » Mon Sep 03, 2018 5:26 pm

А като не сложиш int и мине какво има в променливите?
IP адресът не е тип int. Попринцип може да се обърне, но по-добре го матчвай с регекс. Освен това Rewrite rule-а ти подава целия стринг ip:port и към двата параметъра.

Опитай с този rule:

Code: Select all

RewriteRule ^process/owner/((?:(?:[12]?\d?\d\.){3}[12]?\d?\d))/(\d+)$ process.php?task=owner&server_ip=$1&server_port=$2
Не е перфектен, ще пусне адреси като 00.00.0.01, 299.267.00.00, но формата винаги ще ти е коректен

Pro_Lamer4e
Нов
Нов
Posts: 188
Joined: Mon Oct 26, 2009 5:10 am

Post by Pro_Lamer4e » Tue Sep 04, 2018 6:25 am

така пак не стана, иначе по IP и port търся даденият сървър после от него вада името и ид-то му , и според тях обратно въвеждам данни базата за собственик на сървъра,

Code: Select all

  $ip = preg_replace("/[^0-9.]+/", "", $_GET['ip']);
  $port = preg_replace("/[^0-9.]+/", "", $_GET['port']);
така уж е добре, до колкото съм запознат

raiden
Гуру
Гуру
Posts: 2182
Joined: Fri Dec 08, 2006 8:13 am
Answers: 190
Location: Варна

Post by raiden » Tue Sep 04, 2018 10:39 pm

Да, това което си дал ще маха всичко освен числа и точки, в порта даже можеш да махнеш и точките
А Rule-а е за process/owner/ip/port сигурно за това не е станало
Ако все пак искаш да ползваш process/owner/ip:port с твоето филтриране в кода можеш да го опростиш

Code: Select all

RewriteRule ^process/owner/([^:]+):(.+)$ process.php?task=owner&server_ip=$1&server_port=$2

Pro_Lamer4e
Нов
Нов
Posts: 188
Joined: Mon Oct 26, 2009 5:10 am

Post by Pro_Lamer4e » Wed Sep 12, 2018 8:44 am

Благодаря, всичко работи вече

Post Reply