2016-10-06 7 views
0

新しいページにリダイレクトできますが、アラートは呼び出せません。リダイレクトとJavascriptを使用したアラート表示

送信ボタンのclickイベントでは、JavaScriptのアラートメッセージが表示され、一部のデータが更新されたページにリダイレクトする必要があります。

データの更新とリダイレクトが機能しています。アラートメッセージが表示されていません。

私はSQLインジェクションの問題があることを知っています。私は警報が働いた後にそれに取り組むでしょう。

<!DOCTYPE html> 

<?php 

ob_start(); 
?> 

<html> 
<head> 
    <title>Multiple Update and Delete Data</title> 
    <?php include "header.php"; ?> 
</head> 

<body bgcolor="#DCE3E7"> 

<script type="text/javascript"> 
    function confirm() { 
     if (window.confirm('Are you sure you want to update these properties?')) 
     { 
      window.alert("Successfully update."); 
      document.location.href ='list_sale_update.php'; 
      return true; 
     } 
     else 
     { 
      alert("Error editing list. Please contact system administrator."); 
      return false; 
     } 

    } 
</script> 

    <center><h1><font size="5" face="verdana" >Listing Modification</font></h1></center> 


    <?php 
    $conn = oci_connect("username","password","database") 
    or die("Couldn't logon."); 

      if (empty($_POST["check"])) 
      { 
       $query = "SELECT P.PTY_ID, P.PTY_UNITNUM, P.PTY_STREET,P.PTY_POSTCODE, P.PTY_SUBURB, P.PTY_CITY, T.P_TYPE_NAME, 
         L.LIST_PRICE, L.SALE_PRICE, 
         C.SELLER_FNAME, C.SELLER_LNAME, 
         L.AVAILABILITY 
       FROM PROPERTY_TYPE T, PROPERTY P, CUSTOMER C, LISTINGS L 
       WHERE P.P_TYPE_ID = T.P_TYPE_ID(+) 
       AND L.SELLER_ID = C.SELLER_ID(+) 
       AND P.PTY_ID = L.PTY_ID(+) 
       ORDER BY P.PTY_ID"; 

       $stmt = oci_parse($conn,$query); 
       oci_execute($stmt); 
       ?> 

       <form method="post" 
         action="list_avai_update.php"> 
        <table border="2" cellpadding="5" align="center"> 
         <tr> 
          <th><b> Property ID</th> 
          <th><b> Address</th> 
          <th><b> Property Type</th> 
          <th><b> Seller Name</th> 
          <th><b> Available?</th> 
          <th><b> Listing Price</th> 
          <th><b> Sale Price</th> 
          <th><b> Checkbox</th> 
         </tr> 


         <?php 
         while ($row = oci_fetch_array($stmt)) { 
          ?> 
          <tr> 

           <td><?php echo oci_result($stmt, "PTY_ID"); ?></td> 

           <td><?php echo oci_result($stmt, "PTY_UNITNUM"), " ", oci_result($stmt, "PTY_STREET"), 
            ", ", oci_result($stmt, "PTY_SUBURB"), ", ", oci_result($stmt, "PTY_CITY"), 
            ", ", oci_result($stmt, "PTY_POSTCODE"); ?></td> 

           <td><?php echo oci_result($stmt, "P_TYPE_NAME"); ?></td> 
           <td><?php echo oci_result($stmt, "SELLER_FNAME"), " ", oci_result($stmt, "SELLER_LNAME"); ?></td> 

           <td> 
            Yes<input type="radio" name = "<?php echo oci_result($stmt, "PTY_ID"); ?>" 
               value="1"<?php echo (oci_result($stmt, "AVAILABILITY") == '1') ? 'checked' : '' ?>><br> 
            No <input type="radio" name = "<?php echo oci_result($stmt, "PTY_ID"); ?>" 
               value="0"<?php echo (oci_result($stmt, "AVAILABILITY") == '0') ? 'checked' : '' ?>> 
           </td> 

           <td><?php echo oci_result($stmt, "LIST_PRICE"); ?></td> 
           <td><?php echo oci_result($stmt, "SALE_PRICE"); ?></td> 

           <td align="center"> 
            <input type="checkbox" name="check[]" 
              value="<?php echo oci_result($stmt, "PTY_ID"); ?>"> 
           </td> 

          </tr> 
          <?php 
         } 
         ?> 
        </table> 
       <br><br> 

        <center> 
         <td><input type="submit" style="height:50px; width:200px" value="Confirm Update" 
            onclick="return(confirm());"></td>     &nbsp;&nbsp; &nbsp; 
         <input type="button" style="height:50px; width:200px" value="Return" 
            OnClick="window.location='listing_multi.php'"> 
        </center> 

       </form> 
       <?php 
       oci_free_statement($stmt); 
      } 
      else 
      { 
       foreach ($_POST["check"] as $pty_id) 
       { 
        $query = "UPDATE LISTINGS 
         set AVAILABILITY = " . $_POST[$pty_id] . " 
         WHERE PTY_ID ='" . $pty_id . "'"; 
        $stmt = oci_parse($conn, $query); 
        oci_execute($stmt); 
        header("location: list_avai_update.php"); 


       } 

      } 

    oci_close($conn); 
    ?> 

<br><br> 
<?php 

$filename=$_SERVER["SCRIPT_FILENAME"]; 

?> 
<a href="displaysource.php?filename=<?php echo $filename;?>" target="_blank"><img src="images/client.png "/> </a> 


</body> 
</html> 
+0

あなたが話しているこの問題は何ですか? – vlaz

+0

['oci_bind_by_name'](http://php.net/manual/en/function.oci-bind-by-name.php):" _ PHP変数 'variable'をOracleバインド変数プレースホルダ' bv_name'にバインドします。バインディングはOracleデータベースのパフォーマンス**とSQLインジェクションのセキュリティ問題を回避するための方法としても重要です。** ._ " – Andreas

+0

私の質問を読んだら、JavaScriptに関するWindowsアラートはPHPコードでは起動されません。 @vlaz – davehyy

答えて

0

"confirm"という名前のグローバル関数を定義しているようですが、これは既存のwindow.confirm()を置き換えます。あなたのカスタム関数の中で、あなたは "window.confirm()"を呼び出そうとしますが、あなたがそれを置き換えたので、実際にあなたのOWN関数を呼び出しています。この結果、無限ループが発生します。原因は... "スタックオーバーフロー"エラー:)関数の名前を "confirm"以外の名前に変更します(ただし、window.confirm()を呼び出して続けます)もちろん)

+0

...私は遭遇しなかった。私はJavaScriptだけでいくつかの質問をしています。しかし、共有してくれてありがとうございます – davehyy

+0

実際には、関数内にメモリを割り当てていないのでスタックメモリをオーバーフローさせることができないので、実際には(おそらくは)スタックオーバーフローエラーは発生しません。それにもかかわらず、window.confirm()を上書き/再定義し、独自の関数を再帰的/無限に呼び出すことは間違いありません。 "確認"機能の名前を "myConfirm"などの名前に変更したり、 "ウィンドウ"オブジェクトにない他の名前に変更しなければなりません。 –

+0

ああ!あなたが正しいです!今それは完璧に正常に動作します。ありがとうございますJeff @:D – davehyy

関連する問題