0

我正在尝试使用 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);

尽管我仍然收到通知,但一切都按应有的方式进行。关于我做错了什么的任何想法?

4

2 回答 2

2

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

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

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

我有没有提到,你正在做的事情不安全

于 2012-08-30T20:10:06.470 回答
1

你为什么打2个$.post电话?您需要在一次调用中发送两个变量。

$.post('write.php', {
    name : $('#filename').val(),
    dom : $('html').html()
});
于 2012-08-30T20:10:07.113 回答