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