2012-05-30 1 views
0

Я пишу то, что, как я думал, будет простым скриптом, но я застрял.PHP GET Строка с взорванными и если утверждения

Сценарий заключается в том, что я хочу создать 2 строки из запроса GET.

например: domain.com/script.php?Client=A12345

В script.php он должен захватить "Клиент" и создать 2 переменные. Один из них - это бренд $ и ему нужно захватить A или B из URL. Другое - это $ id, который должен захватить 12345 из URL.

Теперь, после того, как у него есть эти 2 переменные $ бренда и $ Id он должен иметь, если заявление для перенаправления на основе бренда как ниже

if ($brand=="A") { 
header('Location: http://a.com'); 
} 
if ($brand=="B") { 
header('Location: http://b.com'); 

В конце каждого URL я хочу apend $ id, хотя я не уверен, как это сделать.

Так, например, я бы доступ скрипт на domain.com/script?Client=A1234 и он должен перенаправить меня a.com/12345

Спасибо заранее!

+0

Простой конкатенации строк? ''Местоположение: http: //a.com /'.$ id' – clentfort

+2

Где вы купили эти доменные имена:' a.com' и 'b.com'? – flowfree

+0

@bsdnoobz Они вымышленные и только, например, :) –

ответ

0

Вы можете легко сделать,

$value = $_GET['Client']; 

$brand = substr($value, 0, 1); 

$rest = substr($value, 1, strlen($brand)-1); 

теперь у вас есть первый символ в $ строке бренда, и вы можете сделать, если заявление и перенаправить, как вы хотите ...

0

Вы имеете в виду, как это ?

Примечание:
это будет работать только в том случае, если бренд всего 1 символ. Если это не так, пожалуйста, дайте лучшие примеры.

<?php 

$client = $_GET['Client']; 
$brand = strtolower(substr($client, 0, 1)); 
$id = substr($client, 1); 

if ($brand == 'a') 
{ 
    header("Location: http://a.com/$id"); 
} 
elseif ($brand == 'b') 
{ 
    header("Location: http://b.com/$id"); 
} 
?> 
1
$fullCode = $_REQUEST['Client']; 
if(strpos($fullCode, 'A') !== false) { 
    $exp = explode('A',$fullcode); 
    header('Location: http://a.com/' . $exp[1]); 
} 
else if(strpos($fullCode, 'B') !== false) { 
    $exp = explode('B',$fullcode); 
    header('Location: http://b.com/' . $exp[1]); 
} 
else { 
    die('No letter occurence'); 
} 
+0

Это похоже на то, что у меня было, но с той же проблемой, что он не добавляет идентификатор в конец URL-адреса –

+1

Ahhh, кажется, у нас обоих была такая же проблема, полный код должен быть fullCode в $ exp = explode ('A', $ fullcode); –

+0

Вы определяете $ fullCode, а затем используете $ fullcode в обоих версиях explode. PHP чувствителен к регистру. –

0

Попробуйте использовать:

preg_match("/([A-Z])(\d*)/",$_GET['Client'],$matches); 

$matches[1] будет содержать букву и $matches[2] будет содержать ваш идентификатор.

Затем вы можете использовать:

if ($matches[1]=="A") 
{ 
    header('Location: http://a.com/{$matches[2]}'); 
} 
if ($matches[1]=="B") 
{ 
    header('Location: http://b.com/{$matches[2]}'); 
} 
0

предложить вы можете также попробовать

$requested = $_GET["Client"]; 
$domain = trim(preg_replace('/[^a-zA-Z]/',' ', $requested)); // replace non-alphabets with space 
$brand = trim(preg_replace('/[a-zA-Z]/',' ', $requested)); // replace non-numerics with space 
$redirect_url = 'http://' . $domain . '/' . $brand; 
header('Location:' . $redirect_url); 

но было бы лучше, если бы вы могли получить доменное имя и бренд, как два отдельных параметров и дезинфицировать их индивидуально, прежде чем перенаправлять их, чтобы предотвратить накладные расходы извлечения их из одного параметра.

Примечание: это выражение может быть бесполезным, когда само имя домена имеет численные значения, а также потому, что Клиент получил достаточную проверку и санитарию в действительности.

0
$brand = strtolower($_GET['Client'][0]); 
$id = substr($_GET['Client'], 1); 

header("Location: http://{$brand}.com/{$id}"); 
0

Если для какой-либо цели вы хотите использовать взрыв, тогда вам нужно иметь разделитель. Давайте возьмем '_' в качестве разделителя, поэтому ваш пример будет примерно таким: domain.com/script.php?Клиент = A_12345

$yourstring = explode("_",$_GET["Client"]); 

echo $yourstring[0]; 
//will output A 
echo $yourstring[1]; 
//will output 12345 

//your simple controller could be something like this 
switch($yourstring[0]){ 
case: 'A': 
    header('Location: http://a.com?id='.$yourstring[1]); 
    exit(); 
    break; 

case: 'B': 
    header('Location: http://b.com?id='.$yourstring[1]); 
    exit(); 
    break; 

default: 
//etc 
}