【问题标题】:Variables inside of strings return 1字符串内的变量返回 1
【发布时间】:2015-11-01 17:59:37
【问题描述】:

我正在制作一个测试页面,其中有一个带有 post 方法的表单和一个目标页面。主要目标是将提交的值输出到名为 UserInfo.txt 的文件中。

这行得通,但是当我查看文件时,我放在输出到文件中的字符串中的所有变量都是1s。

我的代码是:

$fname = $_POST['fname'];
$lname = $_POST['lname'];
$age = $_POST['age'];
$email = $_POST['email'];
$emailb = $_POST['emailb'];

$UserInfo = <<<EOT
[NAME] = $fname, $lname
[AGE] = $age
[EMAIL] = $email
EOT;
file_put_contents("UserInfo.txt", $UserInfo, FILE_APPEND);

文件输出为:

[NAME] = 1, 1
[AGE] = 1
[EMAIL] = 1

HTML 表单:

<form action="7_dest.php" method="POST">
    <p>First name:<input type="text" name="fname" step=0> </p>
    <p>Last name:<input type="text" name="lname" step=0> </p>
    <p>Age:<input type="number" name="age"> </p>
    <p>E-mail:<input type="email" name="email" step=0> </p>
    <p>Confirm E-mail:<input type="email" name="emailb" step=0> </p>
    <p><input type="submit"> </p>
</form>

【问题讨论】:

  • 我们能看到 HTML 表单吗?
  • 表单的HTML表单?
  • 是的,HTML &lt;form&gt;,所以我们可以看到输入名称和类型等。
  • print_f($_POST); 将揭示罪魁祸首。正如其他人已经在他们的 cmets 中建议的那样,您的表单可能编码错误。
  • 这可能有点远,但您的step 属性有可能导致浏览器将该字段解释为number 类型。

标签: php heredoc


【解决方案1】:

经过一些研究和简单测试,我找到了罪魁祸首。
在变量分配位和heredoc语法之间有一个if语句。
由于if 语句使用局部变量范围并且值是在全局变量范围中分配的,因此变量没有在if 语句中分配。
结果,变量未分配,因此无法使用。
我通过复制分配位并将其粘贴到if statement 中来修复它。

现在的代码如下所示:

<?php
$fname = $_POST['fname'];
$lname = $_POST['lname'];
$age = $_POST['age'];
$email = $_POST['email'];
$emailb = $_POST['emailb'];
if (){ //I had a lot of tests here, removed them for the sake of a nice page
    $fname = $_POST['fname'];
    $lname = $_POST['lname'];
    $age = $_POST['age'];
    $email = $_POST['email'];
    $emailb = $_POST['emailb'];
$UserInfo = <<<EOT
[NAME] = $fname, $lname
[AGE] = $age
[EMAIL] = $email
EOT;
file_put_contents("UserInfo.txt", $UserInfo, FILE_APPEND);
} else {
    echo "Something went wrong";
} ?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 2013-04-12
    • 1970-01-01
    • 2017-11-17
    • 1970-01-01
    相关资源
    最近更新 更多