2016-03-23 23 views
-3

私のウェブサイト(http://hokuco.com/test/)にフォームがあります。それはPHPでフォルダを作成しますが、以来、私はPHPが動作していないjavascriptをインストールして以来。 javascriptは、PHPが作成するフォルダにリダイレクトされます。皮肉なことに、私がjavascriptの仕事をする前に、PHPが動作します。jsフォームでPHPが動作しない


次のようになり2つのバリアの間の領域に焦点を当て:

<!--===========--> 

の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> 
 
\t </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> 
 
\t   </div> 
 
</div> 
 
<h1>&nbsp;</h1> 
 
<h1>&nbsp;</h1> 
 
<p>make shocking panoramas in minutes, no account needed</p> 
 
<br/> 
 
<br/> 
 
<br/> 
 
<br/> 
 
<p>special thanks to:</p> 
 
\t \t <div id="info"><a href="http://threejs.org" target="_blank">three.js css3d</a> - panorama.</div> 
 

 
\t <h5>a hokuco company</h5> 
 
</div>


+1

[mcve]を作成する方法を確認してください – j08691

+0

あなたが投稿した大きなスクリプトのために、おそらくあなたがダウン投票をした理由が考えられます。コードスニペットを簡単にするために無関係なコードを除外してみてくださいあなたがそれをしてしまうと、間違って問題を発見するかもしれないことを覚えておいてください。 – dsdsdsdsd

+0

'onsubmit'関数が' false'を返すと、フォームが送信されるのを防ぐので、 '$ _POST ['foldername'] 'が設定されていません。 – Barmar

答えて

0

送信ボタンを押したときにユーザーをリダイレクトしています。これは、フォームを送信する代わりに発生します。

フォームを送信したい場合は、作業が完了するまで待ってから、ユーザーを新しい場所にリダイレクトします.AJAXを使用してフォームを送信し、完了後にユーザーをリダイレクトするコールバックを使用できます。これを参照してください:submit the form using ajax

また、送信するページフォームでPHPリダイレクトを使用して、そこでユーザーを送信することもできます。 (この参照:Regular expression for folders)を使用すると、フォルダ名のユーザー入力を清掃していないので、これは、非常に初歩的かつ危険である

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); 
} 

:このページでは、のようなものを使用することができ、フォームや提出対象でもあるので、ただし、次のステップに進むためには、その概念を理解するのに役立ちます。

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でリダイレクトロジックの実装を検討することをお勧めします。

関連する問題