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

Pro_Lamer4e

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

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

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");?>
 
Защото int() прехвърля стойностите в цяло число.

PHP:
$var = '1a';
echo (int) $var;     // връща 1
$var2 = 'a2';
echo (int) $var2;  // връща 0
 
А като не сложиш int и мине какво има в променливите?
IP адресът не е тип int. Попринцип може да се обърне, но по-добре го матчвай с регекс. Освен това Rewrite rule-а ти подава целия стринг ip:port и към двата параметъра.

Опитай с този rule:
Код:
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, но формата винаги ще ти е коректен
 
така пак не стана, иначе по IP и port търся даденият сървър после от него вада името и ид-то му , и според тях обратно въвеждам данни базата за собственик на сървъра,
Код:
  $ip = preg_replace("/[^0-9.]+/", "", $_GET['ip']);
  $port = preg_replace("/[^0-9.]+/", "", $_GET['port']);
така уж е добре, до колкото съм запознат
 
Да, това което си дал ще маха всичко освен числа и точки, в порта даже можеш да махнеш и точките
А Rule-а е за process/owner/ip/port сигурно за това не е станало
Ако все пак искаш да ползваш process/owner/ip:port с твоето филтриране в кода можеш да го опростиш
Код:
RewriteRule ^process/owner/([^:]+):(.+)$ process.php?task=owner&server_ip=$1&server_port=$2
 

Горе