enctype ='multipart / form-data'的问题

时间:2011-06-15 15:33:01

标签: php html forms

我有下一个表格:

echo "<br><form action ='maketext.php' method='post' enctype='multipart/form-data'>
                <br>
                $table <br><br><br>
                <b>$subject</b> <br>
                Сообщение: <b>$message</b> <br>
                <input name='userfile[]' type='file' /><br />
                <input name='userfile[]' type='file' /><br />
                <input name='userfile[]' type='file' /><br />
                <input type ='submit' name ='Send' size = '10' value = 'Send'>
                <input type ='hidden' name ='subject' value=$subject>
                <input type ='hidden' name ='sms' value=$flagSms>
                <input type ='hidden' name ='email' value=$flagEmail>
                <input type ='hidden' name ='message' value=$message>
                </form>";

我没有文件问题,但我对$subject和其他变量的编码有问题。我认为这是因为enctype='multipart/form-data'。它真的通过一个表单传递变量和文件吗?

2 个答案:

答案 0 :(得分:2)

我认为你的主要问题是你的变量$ subject等没有放在

' '

试试这个

echo "<br><form action ='maketext.php' method='post' enctype='multipart/form-data'>
                <br>
                $table <br><br><br>
                <b>$subject</b> <br>
                Сообщение: <b>$message</b> <br>
                <input name='userfile[]' type='file' /><br />
                <input name='userfile[]' type='file' /><br />
                <input name='userfile[]' type='file' /><br />
                <input type ='submit' name ='Send' size = '10' value = 'Send'>
                <input type ='hidden' name ='subject' value='$subject'>
                <input type ='hidden' name ='sms' value='$flagSms'>
                <input type ='hidden' name ='email' value='$flagEmail'>
                <input type ='hidden' name ='message' value='$message'>
                </form>";

答案 1 :(得分:1)

您的输入周围没有引号。如果这些值中的任何一个包含空格或html元字符,则表单将“中断”。

e.g。

$subject = "hi there";

将产生

<input type='hidden' name='Subject' value=hi there />

提交此表单后,您最终会收到Send=hi,并且there将不会被传输,因为它在输入标记中被视为未知的HTML属性。

你需要这样的东西:

<?php ?>
<input type="hidden" name="Subject" value="<?php echo htmlspecialchars($send) " />

有两点需要注意:

  1. 我不是在回声中这样做的。虽然echo可以输出多行文本块,但它太麻烦了,而且浪费CPU资源来将该字符串解析为PHP代码然后输出它。相反,只需退出PHP模式并将其直接输出为原始html。

  2. 我通过htmlspecialchars()处理了$ send。这可以“逃避”任何特殊字符,这些字符可能会被视为HTML标记的一部分,而不是您传递的数据的一部分。