2011-04-13 3 views
0

J'ai une page qui reçoit des données transmises à partir d'un formulaire. Il ne redirige pas correctement avec toutes les variables passées. Je pense que c'est parce qu'il y a des espaces dans les données transmises de sorte que l'URL se brise sur l'espace. J'ai essayé de faire un urlencode mais je ne pouvais pas le faire fonctionner correctement. Je pense que j'ai besoin d'urlencode les variables ont été passées avec des espaces en eux mais j'ai besoin de votre aide.HTTP redirection GET ne fonctionne pas

Voici le code:

<? 
$aff = $_GET['aff'] ; 
$click_id = $_GET['click_id'] ; 
$email = $_GET['from']; 
$fname = $_GET['name_(awf_first)']; 
$lname = $_GET['name_(awf_last)']; 
$zipcode = $_GET['custom_zipcode']; 
$address = $_GET['custom_address']; 
$phone = $_GET['custom_phone_no']; 
$state = $_GET['custom_state']; 
$city = $_GET['custom_city']; 
$subid = $_GET['meta_adtracking'] ; 
$cblink = $_GET['cblink']; 
$keyword = $_GET['keyword'] ; 
$keyword = eregi_replace('[^a-z0-9 ]', '2', $keyword); 
?> 
<META HTTP-EQUIV="refresh" CONTENT=0;URL="http://mywebsite.com/page/?pID=sample&email=<?print $email?>&fname=<?print $fname?>&lname=<?print $lname?>&addr=<?print $address?>&city=<?print $city?>&state=<?print $state?>&zip=<?print $zipcode?>&hphone=<?print $phone?>&mphone=<?print $phone?>&country=US&pubSubID=<?print $subid?>&destURL=http://mywebsite.com/page/testpage.php?pubSubID=[pubSubID]&email=[email]"> 
<html> 
<body> 
</body></html> 
+0

s'il vous plaît étiquette toujours des questions avec le langage de programmation que vous utilisez, ou une étiquette plus spécifique, pour éviter de perdre du temps précieux des gens –

+0

S'il vous plaît ajouter le code en ligne non comme image externe .. – plaes

+0

i suis désolé à ce sujet, je ne sais pas comment ajouter le code en ligne – artur

Répondre

0

Vous devez URL-encode toutes les valeurs. En particulier l'URL que vous transmettez en tant que valeur du paramètre destURL. Vous pouvez convertir l'URL juste une fois (par exemple, essayez this online tool), car il semble être statique dans votre code:

...&destURL= http%3a%2f%2fmywebsite.com%2fpage%2ftestpage.php%3fpubSubID%3d%5bpubSubID%5d%26email%3d%5bemail%5d 
+0

La redirection se produit après la l'utilisateur soumet le formulaire ses espaces dans les données soumises qui provoquent une rupture dans l'URL et ainsi toutes les données ne sont pas transmises. Je sais que j'ai besoin d'url encoder toutes les variables GET mais je ne peux pas le faire correctement – artur

+0

De votre question initiale, je ne pensais pas que c'était PHP. Donc, quelqu'un d'autre doit répondre comment encoder l'URL en PHP ...: p – alienhard

1

utilisation http_build_query

$data = array('foo'=>'bar', 
       'baz'=>'boom', 
       'cow'=>'milk', 
       'php'=>'hypertext processor'); 

echo http_build_query($data) . "\n"; 
echo http_build_query($data, '', '&amp;'); 

?> 
The above example will output: 
foo=bar&baz=boom&cow=milk&php=hypertext+processor 
foo=bar&amp;baz=boom&amp;cow=milk&amp;php=hypertext+processor 

pour votre cas

$get_data=$_GET; 
echo http_build_query($get_data) . "\n"; 
echo http_build_query($get_data, '', '&amp;'); 
+0

pourquoi downvoted ?? s'il vous plaît expliquer – diEcho

+0

quelqu'un d'autre a fait cela. – artur

+0

mais tous ceux qui downvoted, s'il vous plaît aussi expliquer .. il est difficile de trouver notre erreur par nous-mêmes. – diEcho

1

Il y a des problèmes qui doivent être adressés ici:

  1. Accéder aux index de tableaux dont l'existence n'est pas vérifiée: PHP renvoie une erreur si vous essayez de lire une variable qui n'existe pas. Vous devez utiliser isset ou array_key_exists (dans le cas d'un tableau) avant de lire cette variable, par exemple:

    if (isset($_GET['aff'])) { 
        $aff = $_GET['aff']; 
    } else { 
        $aff = null; 
    } 
    

    Vous pouvez également utiliser la conditional operator ?: pour une variante de cette plus courte:

    $aff = isset($_GET['aff']) ? $_GET['aff'] : null; 
    
  2. Vous avez besoin pour utiliser le codage approprié sur les valeurs de paramètres d'URL: utilisez urlencode pour coder la valeur selon application/x-www-form-urnelcoded content type ou rawurlencode pour le percent-encoding simple ou - comme vous construisez la requête entière - http_build_query:

    $query = array(
        'pID' => 'sample', 
        'email' => isset($_GET['from']) ? $_GET['from'] : null, 
        'fname' => isset($_GET['name_(awf_first)']) ? $_GET['name_(awf_first)'] : null, 
        'lname' => isset($_GET['name_(awf_last)']) ? $_GET['name_(awf_last)'] : null, 
        'addr' => isset($_GET['custom_address']) ? $_GET['custom_address'] : null, 
        'city' => isset($_GET['custom_city']) ? $_GET['custom_city'] : null, 
        'state' => isset($_GET['custom_state']) ? $_GET['custom_state'] : null, 
        'zip' => isset($_GET['custom_zipcode']) ? $_GET['custom_zipcode'] : null, 
        'hphone' => isset($_GET['custom_phone_no']) ? $_GET['custom_phone_no'] : null, 
        'mphone' => isset($_GET['custom_phone_no']) ? $_GET['custom_phone_no'] : null, 
        'country' => 'US', 
        'pubSubID' => isset($_GET['meta_adtracking']) ? $_GET['meta_adtracking'] : null, 
        'destURL' => 'http://mywebsite.com/page/testpage.php?pubSubID=[pubSubID]&email=[email]' 
    ); 
    $query = http_build_query($query); 
    
  3. Vous devez utiliser un codage approprié sur la valeur d'attribut HTML; utiliser htmlspecialchars:

    <META HTTP-EQUIV="refresh" CONTENT="<?php echo htmlspecialchars('0;URL=http://mywebsite.com/page/?'.$query); ?>"> 
    
+0

+1, Grande réponse. –

+0

pouvez-vous me montrer un échantillon complet de la façon dont la page doit être éditée pour ressembler avec le code fourni – artur

+0

@artur: Vous pouvez prendre le second et dernier fragment de code pour obtenir le résultat souhaité. – Gumbo