Потеря значения $ var при использовании массива

Я пытаюсь создать URL-адрес, как:

https://theserver/career/pathway?path=3&edu=4&cert=

Главной проблемой здесь является $message вар теряет значения $pathval , $edval, $certval при заполнении в массив аля $data (как показано ниже)

При использовании вашего последнего блока кода

else if ($action == "send") {
//added
#pathway var
var_dump($_SESSION);
$pathval = $_SESSION['pathid'];
$edval = $_SESSION['edid'];
$certval = $_SESSION['certid'];

var_dump($pathval);
var_dump($edval);
var_dump($certval);

$data = array(
"path"=>$pathval,
"edu"=>$edval,
"cert"=>$certval
);

var_dump($data);$server_prefix = 'https://';
$server_address = $_SERVER['SERVER_ADDR'];

#$fullurl = $server_prefix.$server_address."/career/pathway?ed=".$edval;

// Send the email
$name = isset($_POST["name"]) ? $_POST["name"] : "";
$email = isset($_POST["email"]) ? $_POST["email"] : "";
$subject = isset($_POST["subject"]) ? $_POST["subject"] : $subject;
$message = $server_prefix.$server_address.'/career/pathway?'.http_build_query($data);
var_dump($message);
// $message = $pathval;
var_dump($message);

$cc = isset($_POST["cc"]) ? $_POST["cc"] : "";
$token = isset($_POST["token"]) ? $_POST["token"] : "";

// make sure the token matches
if ($token === smcf_token($to)) {
smcf_send($name, $email, $subject, $message, $cc);
echo "Your message was successfully sent.";
// echo $name . "\n";
// echo $email . "\n";
// echo $subject . "\n";
}
else {
echo "Unfortunately, your message could not be verified.";
}
}

Это выводит (это выводит здорово!):

array(3) { ["pathid"]=> string(1) "3" ["edid"]=> string(1) "4" ["certid"]=> string(0) "" } string(1) "3" string(1) "4" string(0) "" array(3) { ["path"]=> string(1) "3" ["edu"]=> string(1) "4" ["cert"]=> string(0) "" } string(56) "https://theserver/career/pathway?path=3&edu=4&cert=" string(56) "https://theserver/career/pathway?path=3&edu=4&cert=" Your message was successfully sen

Вывод электронной почты: Message: https://theserver/career/pathway?path=edu=cert

0

Решение

Извините, я пока не могу комментировать.

Но, как сказал @ Джеремия Уинсли:

http://php.net/manual/en/function.http-build-query.php

$pathval = 3;
$edval = 4;
$certval = '';
$server_prefix = 'https://';
$server_address = 'website.com';
$data = array('path'=>$pathval,
'edu'=>$edval,
'cert'=>$certval);

echo $server_prefix.$server_address.'/career/pathway?'.http_build_query($data) . "\n";
echo $server_prefix.$server_address.'/career/pathway?'.http_build_query($data, '', '&');

выход:

https://website.com/career/pathway?path=3&edu=4&cert=
https://website.com/career/pathway?path=3&edu=4&cert=

это то, что вы просили?

Ваш вопрос phph код должен быть таким:

if ($action == "send") {
// VALUES EXIST HERE
var_dump($_SESSION);
$pathval = $_SESSION['pathid'];
$edval = $_SESSION['edid'];
$certval = $_SESSION['certid'];
var_dump($pathval);
var_dump($edval);
var_dump($certval);

// << LOSING THE VALUES HERE >>
$data = array(
"path"=>$pathval,
"edu"=>$edval,
"cert"=>$certval
);
var_dump($data);
// This DOES NOT work, and outputs: `path=edu=cert`
$message = http_build_query($data);
var_dump($message);
// This DOES work and outputs: `3`
$message = $pathval;
var_dump($message);
exit;
}

так что теперь со всем этим эхом и вашим php кодом все понятно !!!
просто будь внимателен!

Ваш код должен быть:

else if ($action == "send") {
//added

$pathval = $_SESSION['pathid'];
$edval = $_SESSION['edid'];
$certval = $_SESSION['certid'];

var_dump($pathval);
var_dump($edval);
var_dump($certval);

$data = array(
"path"=>$pathval,
"edu"=>$edval,
"cert"=>$certval
);

var_dump($data);

$server_prefix = 'https://';
$server_address = $_SERVER['SERVER_ADDR'];

// Send the email
$name = isset($_POST["name"]) ? $_POST["name"] : "";
$email = isset($_POST["email"]) ? $_POST["email"] : "";
$subject = isset($_POST["subject"]) ? $_POST["subject"] : $subject;
$message = $server_prefix.$server_address.'/career/pathway?'.http_build_query($data);
var_dump($message);

$cc = isset($_POST["cc"]) ? $_POST["cc"] : "";
$token = isset($_POST["token"]) ? $_POST["token"] : "";

// make sure the token matches
if ($token === smcf_token($to)) {
smcf_send($name, $email, $subject, $message, $cc);
echo "Your message was successfully sent.";
}
else {
echo "Unfortunately, your message could not be verified.";
}
}

и если это работает — вы можете удалить остальные строки var_dump

0

Другие решения

Других решений пока нет …