试图制作一个“;另存为“;使用php';s”;file_put_contents”;和javascript&quo


Trying to make a "save as" form using php's "file_put_contents" and javascript... "Filename cannot be empty"

我正在尝试使用javascript和php创建一个"另存为"功能。在我使用的html中:

<textarea id="filename" cols="20" rows="1"></textarea>    
<li class ="add" onclick="js:saveas()" >save</li>

然后使用内联javascript,我这样做可以获得文件名和动态生成的dom:

<script>
function saveas() {
   $.post('write.php', { name : $('#filename').val() });
   $.post('write.php', { dom : $('html').html() });
    }
 </script>

然后在"write.php"中…

<?php
$name = urldecode($_POST['name']);
$dom = urldecode($_POST['dom']);
file_put_contents($name, $dom);
?>

但控制台上写着:

[30-Aug-2012 15:45:22] PHP Notice:  Undefined index: dom in /Users/J/Documents/test7/test7/write.php on line 3
[30-Aug-2012 15:45:22] PHP Notice:  Undefined index: name in /Users/J/Documents/test7/test7/write.php on line 2
[30-Aug-2012 15:45:22] PHP Warning:  file_put_contents() [<a href='function.file-put-contents'>function.file-put-contents</a>]: Filename cannot be empty in /Users/J/Documents/test7/test7/write.php on line 4

它创建了具有正确名称的文件,但它是空的,零字节。但是,如果我硬编码文件名,如下所示:

file_put_contents('foo.html', $dom);

一切都按它应该的方式进行,尽管我仍然收到通知。你知道我做错了什么吗?

除了安全问题(您正在做的是而不是安全),您正在向write.php发送两个不同的POST

您想在一个请求中发送两个值:

$.post('write.php', {
    name : $('#filename').val(),
    dom : $('html').html()
});

我有没有提到,你所做的是而不是安全?

为什么要进行2个$.post调用?您需要在一个调用中发送两个变量。

$.post('write.php', {
    name : $('#filename').val(),
    dom : $('html').html()
});