我的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代码中发现错误吗?谢谢!
答案 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}"
等扩展,请使用双引号。
始终验证客户端传递的字符串,以免出现安全问题。