我正在使用this code让用户输入名称来创建文件夹。我修改了代码以尝试通过jQuery发送表单数据,并通过jQuery从PHP接收成功/失败消息。
但是,当我输入文件夹的名称时,没有任何反应。没有创建文件夹也没有显示任何错误。 Firebug也没有显示任何错误。
这是我现在的代码:
create.php:
<html>
<head><title>Make Directory</title></head>
<body>
<div id="albumform">
<form id="album_form" method="post" action="createAlbum.php" enctype="multipart/form-data">
<p id="message" style="display:none;">
<?php echo (isset($success)?"<h3>$success</h3>":""); ?>
<?php echo (isset($error)?'<span style="color:red;">' . $error . '</span>':''); ?>
</p>
<input type="text" id="create_album" name="create_album" value="" />
<input type="button" onclick="return checkForm('album_form');" id="btn_album" name="btn_album" value="Create" />
</form>
</div>
</body>
</html>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
<script type="text/javascript">
/* $("#btn_album").click(function() { */
function checkForm(form) {
//create post data
var postData = {
"create_album" : $("#create_album").val()
};
//make the call
$.ajax({
type: "POST",
url: "createAlbum.php",
data: postData, //send it along with your call
success: function(response){
$('#message').fadeIn();
}
});
/* }); */
}
</script>
createAlbum.php:
<?php
/**********************
File: createDir.php
Author: Frost
Website: http://www.slunked.com
***********************/
// set our absolute path to the directories will be created in:
$path = $_SERVER['DOCUMENT_ROOT'] . '/web/photos/images/';
if (isset($_POST['btn_album'])) {
// Grab our form Data
$dirName = isset($_POST['create_album'])?$_POST['create_album']:false;
// first validate the value:
if ($dirName !== false && preg_match('~([^A-Z0-9]+)~i', $dirName, $matches) === 0) {
// We have a valid directory:
if (!is_dir($path . $dirName)) {
// We are good to create this directory:
if (mkdir($path . $dirName, 0775)) {
$success = "Your directory has been created succesfully!<br /><br />";
}else {
$error = "Unable to create dir {$dirName}.";
}
}else {
$error = "Directory {$dirName} already exists.";
}
}else {
// Invalid data, htmlenttie them incase < > were used.
$dirName = htmlentities($dirName);
$error = "You have invalid values in {$dirName}.";
}
}
?>
答案 0 :(得分:1)
ajax请求有一个默默失败的坏习惯。 您应该使用jQuery post并利用.success(),. complete()和.error()函数来跟踪您的代码。 还可以使用console.log()来检查参数是否是corectly发送的。我会自己尝试代码来查看问题。
答案 1 :(得分:1)
由于$ .ajax请求的性质,不会发送$ _POST ['btn_album']。所以你的php文件到了
if (isset($_POST['btn_album'])) {
并返回false。
您还需要回显$ error以获得回复。
答案 2 :(得分:1)
您的代码至少存在两个单独的问题:
在php文件中,检查是否设置了$_POST['btn_album']
。此字段不会发送,因为它不是您的ajax请求的一部分(您只发送"create_album" : $("#create_album").val()
)。因此,永远不会执行创建文件夹的代码。
另一个问题是部分
<?php echo (isset($success)?"<h3>$success</h3>":""); ?>
<?php echo (isset($error)?'<span style="color:red;">' . $error . '</span>':''); ?>
在您的回复消息中。在页面加载时评估此代码,而不是在ajax请求期间,因此php变量$ success和$ error将始终未定义。您必须将这些响应消息作为对实际请求的响应返回,然后使用javascript来显示它们。