2016-10-19 52 views
-3

我試圖尋找其他類似的帖子,但顯然,我做了一些錯誤的地方,沒有我注意到它,因爲我的PHP,HTML和JavaScript技術是非常過時的。最後我去年觸及了這些東西,所以我的許多故障檢測技能都很生疏。Javascript不能在PHP中運行

話雖這麼說,一段代碼,我試圖做的是結構化這樣

<?PHP //If?> 
JS //Script to check if input is empty and prevents submission 
HTML <!--Input Forms--> 
<?PHP //DB actions ?> 

據我所能做的,PHP的語法似乎是正確的(採用php格式化程序來檢查我的語法是否錯誤)。這裏的問題是JavaScript部分甚至沒有運行。如果運行,UI的其餘部分(登錄表單)將無緣無故地消失(當提供輸入時)。

以下是我正在使用的代碼。

 <?php 
     if(empty($_POST["username"]) && empty($_POST["password"])){ 
     ?> 
     <script type="text/javacsript"> 
     function checkField() 
        { 
      if((login-form.username.value == "") || (login-form.password.value == "")) 
         { 
          alert("Please fill in both Username and Password fields"); 
          return false; 
         } 
         else 
          return true; 
        } 
     </script> 

       <div class="panel-body"> 
        <form role="form" id="login-form" action="login.php" method="post" onsubmit="return checkField();"> 
         <fieldset> 
          <div class="form-group"> 
           <input class="form-control" placeholder="Username" id="username" type="text" autofocus> 
          </div> 
          <div class="form-group"> 
           <input class="form-control" placeholder="Password" id="password" type="password" value=""> 
          </div> 
          <!-- Change this to a button or input when using this as a form --> 
          <!--<a href="index.html" class="btn btn-lg btn-success btn-block">Login</a>--> 
      <div class="form-group"> 
       <button class="btn btn-lg btn-success btn-block" type="submit">Login</button> 
      </div> 
         </fieldset> 
        </form> 
       </div> 
     <?php 
     }else { 
      $message = "wrong answer"; 
      echo "1<script type='text/javascript'>alert('$message');</script>"; 
     } 
     ?> 

的JavaScript的onsubmit是這裏的主要關注點。當假定的真實條件被觸發時(甚至兩個輸入中的任何一個爲空或者兩個都爲空)它甚至不會運行。下面的輔助腳本,就是我在提供數據庫部分之前的最初測試。解決錯字用於校驗場使用的getElementById

編輯1

Alt鍵代碼()

 <script type="text/javacsript"> 
     function checkField() 
        { 
      if((document.getElementById("username").value == "") || (document.getElementById("password").value == "")) 
         { 
          alert("Please fill in both Username and Password fields"); 
          return false; 
         } 
         else 
          return true; 
        } 
     </script> 

編輯2

後,當兩個登錄名和密碼字段是不被觸發PHP部分空不運行。動作屬性可能有一隻手

<form role="form" id="login_form" action="" method="post" onsubmit="return checkField();"> 

上面的代碼是爲了測試action屬性是否是罪魁禍首。結果仍然是一樣的。該頁面將重新加載空字段。

最新代碼

 <?php 
     if(empty($_POST["username"]) && empty($_POST["password"])){ 
     ?> 
     <script type="text/javascript"> 
     function checkField() 
        { 
      if((document.getElementById("username").value == "") || (document.getElementById("password").value == "")) 
         { 
          alert("Please fill in both Username and Password fields"); 
          return false; 
         } 
         else 
          return true; 
        } 
     </script> 

       <div class="panel-body"> 
        <form role="form" id="login_form" action="" method="post" onsubmit="return checkField();"> 
         <fieldset> 
          <div class="form-group"> 
           <input class="form-control" placeholder="Username" id="username" type="text" autofocus> 
          </div> 
          <div class="form-group"> 
           <input class="form-control" placeholder="Password" id="password" type="password" value=""> 
          </div> 
          <!-- Change this to a button or input when using this as a form --> 
          <!--<a href="index.html" class="btn btn-lg btn-success btn-block">Login</a>--> 
      <div class="form-group"> 
       <button class="btn btn-lg btn-success btn-block" type="submit">Login</button> 
      </div> 
         </fieldset> 
        </form> 
       </div> 
     <?php 
     }else { 
      $conn = mysqli_connect("localhost","root","rootacc","test"); 
      if($conn) 
      { 
       echo "success"; 
       header("LOCATION:tables.html"); 
      } 
     } 
     ?> 

編輯3點

解決了所有的問題。對於新手問題抱歉,感謝所有參與者。下面是更正後的代碼

 <?php 
     if(empty($_POST["username"]) && empty($_POST["password"])){ 
     ?> 
     <script type="text/javascript"> 
     function checkField() 
        { 
      if((document.getElementById("username").value == "") || (document.getElementById("password").value == "")) 
         { 
          alert("Please fill in both Username and Password fields"); 
          return false; 
         } 
         else 
          return true; 
        } 
     </script> 

       <div class="panel-body"> 
        <form role="form" id="login_form" action="" method="post" onsubmit="return checkField();"> 
         <fieldset> 
          <div class="form-group"> 
           <input class="form-control" placeholder="Username" id="username" name="username" type="text" autofocus> 
          </div> 
          <div class="form-group"> 
           <input class="form-control" placeholder="Password" id="password" name="password" type="password" value=""> 
          </div> 
          <!-- Change this to a button or input when using this as a form --> 
          <!--<a href="index.html" class="btn btn-lg btn-success btn-block">Login</a>--> 
      <div class="form-group"> 
       <button class="btn btn-lg btn-success btn-block" type="submit">Login</button> 
      </div> 
         </fieldset> 
        </form> 
       </div> 
     <?php 
     }else { 
      $conn = mysqli_connect("localhost","root","rootacc","test"); 
      if($conn) 
      { 
       echo "success"; 
       header("LOCATION:tables.html"); 
      } 
     } 
     ?> 

問題1是由於我自己的編程草率(使用破折號,而不是其他樣式變量引用的),以及上的getElementById知識的缺乏
第2期是由於我自己的錯字沒有發現。
問題3是由於對id和名稱缺乏瞭解(似乎相同)

所有解決問題的建議都已實施。

+2

控制檯中的任何錯誤? –

+0

「javascript部分甚至沒有運行,如果它運行...」那麼它是什麼?它是否運行? –

+4

'login-form.username.value' - 這個語句_subtracts_'form.username.value' from'login',這不是你想要的。而且由於依靠瀏覽器自動創建引用具有ids的元素的全局變量是一個非常糟糕的做法,所以您希望使用'document.getElementById'來獲取對輸入字段的引用。 – CBroe

回答

0

未設置發佈參數,這可能是它不會進入ELSE條件的原因。

<div class="form-group"> 
    <input class="form-control" placeholder="Username" id="username" name="username" type="text" autofocus> 
</div> 
<div class="form-group"> 
    <input class="form-control" placeholder="Password" id="password" name="password" type="password" value=""> 
</div> 

使用「name」屬性來設置POST參數。