我的网站上有一个表单(http://hokuco.com/test/)。它用php创建了一个文件夹,但自从我安装了一个javascript后,我的php无效。 javascript重定向到php创建的文件夹。具有讽刺意味的是,在我使javascript工作之前,php工作。
专注于两个障碍之间的区域:
<!--===========-->
的index.php:
<?php
function recurse_copy($src,$dst) {
$dir = opendir($src);
@mkdir($dst);
while(false !== ( $file = readdir($dir)) ) {
if (( $file != '.' ) && ( $file != '..' )) {
if ( is_dir($src . '/' . $file) ) {
recurse_copy($src . '/' . $file,$dst . '/' . $file);
}
else {
copy($src . '/' . $file,$dst . '/' . $file);
}
}
}
closedir($dir);
}
$src = "./xe7";
$dst = $_POST['foldername'];
recurse_copy($src,$dst);
?>
<link rel="stylesheet" type="text/css" href="style.css" />
<div>
<body onload="timer=setTimeout('removeControls();',3)">
<h1>Drawblog</h1>
<div class="FAQ" style ="box-shadow: 1px 1px 3px rgba(0,0,0,0);">
<a href="#hide1" class="hide" id="hide1">Controls</a>
<a href="#show1" class="show" id="show1">-</a>
<div class="list" style ="box-shadow: 1px 1px 3px rgba(0,0,0,0);">
<!--===========-->
<form method="post" id ="form" action ="index.php">
<input type="text" name="foldername" id ="togl">
<input type="submit" name="submit" value="Create panorama">
<script type="text/javascript">
window.onload = function () {
document.getElementById("form").onsubmit = function () {
var folder = document.getElementById("togl").value;
window.location.href ="http://hokuco.com/test/" + folder + "/toggle.php";
return false;
}
}
</script>
</form>
<!--===========-->
<h3>Or,</h3>
<h2>Login with an access code(the account you just typed into the box above, or a code someone shared with you)</h2>
<input type="text" id="field" />
<button id="submit">Go</button>
<link rel="stylesheet" type="text/css" href="style.css" />
<script type="text/javascript">
document.getElementById("submit").addEventListener("click", function(){
var folder = document.getElementById("field").value;
var url = "http://hokuco.com/test/" + folder + "/index.html";
window.location.href = url;
});
</script>
</div>
</div>
<h1> </h1>
<h1> </h1>
<p>make shocking panoramas in minutes, no account needed</p>
<br/>
<br/>
<br/>
<br/>
<p>special thanks to:</p>
<div id="info"><a href="http://threejs.org" target="_blank">three.js css3d</a> - panorama.</div>
<h5>a hokuco company</h5>
</div>
&#13;
答案 0 :(得分:0)
<form method="post" id ="form" action ="index.php">
<input type="text" name="foldername" id ="togl">
<input type="submit" name="submit" value="Create panorama">
</form>
好的。在添加JS代码之前,当用户按下提交按钮时,您的表单曾经提交到index.php
。
但是,现在您已为此表单的onsubmit
事件添加了处理程序。
<script type="text/javascript">
window.onload = function () {
document.getElementById("form").onsubmit = function () {
var folder = document.getElementById("togl").value;
window.location.href ="http://hokuco.com/test/" + folder + "/toggle.php";
return false;
}
}
</script>
请注意,您的处理程序返回false
,因此会抑制表单提交的默认行为。实际上,它需要返回false
才能执行重定向。
但是,既然您已经介绍了自己的onsubmit
处理程序,那么您需要提供自己的自定义JavaScript代码来提交表单。使用jQuery的一种方法就是这样:
<script type="text/javascript">
window.onload = function () {
document.getElementById("form").onsubmit = function () {
// Submit form to index.php
$.post('index.php', $('#form').serialize(), function() {
// Perform redirection, once submission succeeds
var folder = document.getElementById("togl").value;
window.location.href ="http://hokuco.com/test/" + folder + "/toggle.php";
});
return false;
}
}
</script>
您可能还想考虑完全删除JS处理程序,而是在PHP中实现重定向逻辑。
答案 1 :(得分:0)
按下提交按钮时,您正在重定向用户。发生这种情况而不是提交表格。
如果您想提交表单,请等待它完成工作,然后将用户重定向到新位置,您可以使用AJAX提交表单,并在完成后重定向用户。请参阅:submit the form using ajax
或者你可以在提交的页面形式中使用php重定向,并将用户发送到那里。由于此页面既是表单,也是提交目标,您可以使用以下内容:
if (isset($_POST['foldername'])) {
$dst = $_POST['foldername'];
recurse_copy($src, $dst);
$destURL = "http://hokuco.com/test/".$dst."/toggle.php";
header('Location: '.$destURL);
die('redirecting, please wait. Alternatively use this url: '.$destURL);
}
这是非常基本和危险的,因为您没有清除文件夹名称的用户输入(请参阅:Regular expression for folders),但它可能有助于您理解该概念,以便进入下一步