PHP没有使用给定的变量

时间:2016-10-27 15:50:21

标签: php html forms amazon-web-services aws-lambda

我的HTML表单:

<form action="lambda.php" method="post">
<label><input type="number" name="intfield" id="intfield"/></label>
<input type="submit" value="Go!"/>
</form>

PHP代码的一部分:

$hello = intval($_POST["intfield"]);

$client = LambdaClient::factory(array(
            'version' => "latest",
            'credentials' => array(
                'key' => 'blurred',
                'secret' => 'blurred'
            ),
            'region' => 'us-west-2'
        ));

$response = $client->invoke([
    'FunctionName' => 'helloworld2',
    'InvocationType' => 'RequestResponse',
    'Payload' => '{"key1":"$hello"}',
        ]);

echo($response['Payload']->__toString());
echo $hello;

基本上我想在HTML的形式中输入一个数字,然后将其输入PHP代码。 PHP文件应该将数字发送到Lambda(Amazon Web Services)中的函数。

我的Lambda函数和PHP很好。如果我在PHP中对数字进行硬编码就可以了:

'Payload' => '{"key1":"7"}',

但显然我想将它与变量一起使用。 PHP代码中的最后一个回显显示了正确的数字。你能在我的PHP代码中发现错误吗?谢谢!

2 个答案:

答案 0 :(得分:1)

由于字符串引号,变量$hello在代码中被视为字符串:

你可以测试:

$hello = intval(1); // initialize a variable.

比制作一个数组:

$response = [
'FunctionName' => 'helloworld2',
'InvocationType' => 'RequestResponse',
'Payload' => '{"key1":"$hello"}',
];

print_r($response);

<强>结果:

Array
(
    [FunctionName] => helloworld2
    [InvocationType] => RequestResponse
    [Payload] => {"key1":"$hello"}
)

上面提到的结果告诉你代码中的每一个都是错误的 现在,当我修复报价问题并使用json_encode()获得所需的输出时:

<?php
$hello = intval(1);
$response = [
'FunctionName' => 'helloworld2',
'InvocationType' => 'RequestResponse',
'Payload' => json_encode(array('key1'=>$hello)),
];
echo "<pre>";
print_r($response);
?>

它给了我正确的结果:

Array
(
    [FunctionName] => helloworld2
    [InvocationType] => RequestResponse
    [Payload] => {"key1":1}
)

答案 1 :(得分:0)

PHP中的单引号字符串不会扩展变量。因此,您将字符串'$hello'而不是$hello的值传递给服务。通过将is更改为"{\"key1\":\"{$hello}\"}",它将传递变量的值。

始终使用单引号来创建常量字符串。如果您需要"\n"等转义或"test: {$test}"等扩展,请使用双引号。

始终验证客户端传递的字符串,以免出现安全问题。