【问题标题】:Cannot echo HTML string in PHP using POSTed variable无法使用 POSTed 变量在 PHP 中回显 HTML 字符串
【发布时间】:2014-03-22 23:14:03
【问题描述】:

上下文:

使用 PHP 来回显 HTML。

问题:

除非我硬编码了 $n(即 $n = 2;),否则回显的 HTML 不会显示。

疑难解答:

-我已确认我正在通过 echo、var_dump、print_r 接收 POST 数据。

-我已经确认 for 循环的工作原理是用硬编码的数字代替 $n。

-我已经确定通过 POST 接收到的字符串是一个整数。

   <?php
   $n=intval($_POST["a"]);

    for($count=1;$count<=$n;$count++) 
    {
    echo '<li>foo ' . $count . ':<input type="text" name="bar' . $count . '" value="baz ' .  $count . '"></li>';
    };
    ?>

编辑:PHP 从 AJAX 获取 POST(见下文)

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
$(document).ready(function(){
  $("#formid").change(function(){
     $.ajax({
        url     : $(this).attr('action'),
            type    : $(this).attr('method'),
            data    : $(this).serialize(),
            success : function( response ) {
                        alert( response );
                      }
        });
    $("#div1").load("load.php");
  });
});
</script>

【问题讨论】:

  • 您是否通过var_dump($n) 来查看您在循环中实际使用的内容?另外,您的value 部分回声不正确。您将文字文本 baz . $count 填充到您的值字段中,而不是(比如说)baz5
  • 请参阅“故障排除”下的内容,我已经编辑了回声——我复制/粘贴不正确
  • 如果您发布数字 1,您将不会进入循环,因为 1
  • 好主意——一直使用数字 > 1 来避免这个问题
  • 我感觉这是一个 PEBKAC 类型的错误。

标签: php html


【解决方案1】:

编辑:根据your originally posted question

您在value="baz 之后缺少'

value="baz .  $count . '"></li>
          ^ // right there

完整的回声应该是:

echo '<li>foo ' . $count . ':<input type="text" name="bar' . $count . '" value="baz' .  $count . '"></li>';

这曾经困扰过我,我通常用来连接长字符串的方法是在每个句点之后,我按 Enter 并创建一个新行。

请记住,PHP 对空格不敏感,因此您可以随意分隔行。

【讨论】:

  • 我讨厌串联的原因 :) "&lt;li&gt;foo $count:&lt;input type='text' name='bar$count' value='baz$count'&gt;&lt;/li&gt;"
  • 对不起,我复制和粘贴不正确——在我的原始代码中,我有一个单引号。我已经编辑了我的代码块来反映。
  • 你应该在循环之前尝试 Marc 的建议和 var_dump($n)。
  • 我刚刚在 PHP shell 中运行了您更新的代码,运行良好...抱歉,我无法回答。
【解决方案2】:

目前还不清楚您的预期结果应该是什么,但使用后面的 (fixed) 代码,在 HTML 源代码中生成了以下内容:

<li>foo 1:<input type="text" name="bar1" value="baz1"></li>
<li>foo 2:<input type="text" name="bar2" value="baz2"></li>
<li>foo 3:<input type="text" name="bar3" value="baz3"></li>
<li>foo 4:<input type="text" name="bar4" value="baz4"></li>
<li>foo 5:<input type="text" name="bar5" value="baz5"></li>

PHP(使用5 作为数字)

旁注:为了清楚起见,我在代码末尾添加了 . "\n"

<?php

// $n=intval($_POST["a"]);

   $n=intval(5);

    for($count=1;$count<=$n;$count++) 
    {

echo '<li>foo ' . $count . ':<input type="text" name="bar' . $count . '" value="baz' .  $count . '"></li>' . "\n";

    };
?>

编辑

包含表格的成功测试:

<?php
if(isset($_POST['submit'])){

//   $n=intval(5);

   $n=intval($_POST["a"]);

    for($count=1;$count<=$n;$count++) 
    {
echo '<li>foo ' . $count . ':<input type="text" name="bar' . $count . '" value="baz' .  $count . '"></li>' . "\n";

    };

}

?>

<form method="post" action="">

Number: 
<input type="text" name="a">
<br>
<input type="submit" name="submit" value="Submit">
</form>

旁注:

只是为了测试这两种方法 - 一种有和一种没有 (intval),$n=$_POST["a"]; 也有效。

【讨论】:

  • 是的,我认为这与 POST 有关。如果您在帖子中注意到,我注意到硬编码有效,但使用 POST 无效。
  • 让我看看我能做什么。我会制作一个快速表格来测试它。 @user3435933
  • @Fred-ii- 你不需要表格。只需执行$_POST["a"] = "5"; 或任何您想要设置的内容。
  • 我认识 Mike,但我添加了一个完整的 PHP/HTML 表单供 OP 在我的编辑中进行测试。 @Mike,因为它可能来自表单;最有可能;-)
猜你喜欢
  • 2014-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多