2017-05-19 20 views
0

次のPHPスクリプトでSELECTクエリを実行し、結果を変数にバインドし、バインドされた変数の値に基づいてロジックを実行し、論理。このコードは正常に実行されます(テーブルの正しい値で適切な値が更新されたことがわかります)が、サーバーからの応答を返すのに約10秒かかり、応答は次のようになります。500コードが正常に完了したにもかかわらず、内部サーバーエラーが発生しました

"サーバー内部エラーまたは誤設定が発生しました あなたのリクエストを完了できませんでした。 エラーが発生した時刻とこのエラーの直前に実行した操作を通知するには、['private contact']サーバ 管理者に連絡してください。 このエラーの詳細については、サーバーエラー ログに記載されています。

さらに、要求を処理するためにErrorDocumentを使用しようとしているうちに、内部サーバーエラー500が発生しました 。すべてのヘルプは、その応答を得るためにそう長く取って、なぜ私はわからないとして高く評価され

include("../../include/session.php"); 

include('inc.php'); 

if ((isset($_POST['lotnumberinput'])) AND (isset($_POST['sgref']))) { 


$sgref = $_POST['sgref']; 
$lotnumber = $_POST['lotnumberinput']; 

$conn = new mysqli($servername, $username, $password, $dbname); 

    if ($conn->connect_errno) { 
     echo "There was a problem connecting to MySQL: (" . $conn->connect_errno . ") " . $conn->connect_error; 
    } 

    if (!($sqlget = $conn->prepare("SELECT lotnumber, lotnumber2, lotnumber3 FROM invoicesJan2016 WHERE id = ?"))) { 
     echo "Prepare failed: (" . $conn->errno . ") " . $conn->error; 
    } 

    if (!$sqlget->bind_param("s", $sgref)) { 
     echo "Binding parameters failed: (" . $sqlget->errno . ") " . $sqlget->error; 
    } 

    if (!$sqlget->execute()) { 
     echo "Execute failed: (" . $sqlget->errno . ") " . $sqlget->error; 
    } 


    $sqlget->bind_result($lotnumber1, $lotnumber2, $lotnumber3); 

    $res = $sqlget->fetch(); 

    $sqlget->free_result(); 

if ($res) { 

    while ($res) { 


     if ($lotnumber1 == "") { 


      if (!($sql = $conn->prepare("UPDATE invoicesJan2016 SET lotnumber = ? WHERE id = ?"))) { 
       echo "Prepare failed: (" . $conn->errno . ") " . $conn->error; 
      } 

      if (!$sql->bind_param("ss", $lotnumber, $sgref)) { 
       echo "Binding parameters failed: (" . $sql->errno . ") " . $sql->error; 
      } 


      if (!$sql->execute()) { 
        echo "Execute failed: (" . $sql->errno . ") " . $sql->error; 

      } else { 

       echo "SG Successfully Added!"; 
      } 


     } else if (($lotnumber1 !== "") AND ($lotnumber2 == "")) { 


      if (!($sql = $conn->prepare("UPDATE invoicesJan2016 SET lotnumber2 = ? WHERE id = ?"))) { 
       echo "Prepare failed: (" . $conn->errno . ") " . $conn->error; 
      } 


      if (!$sql->bind_param("ss", $lotnumber, $sgref)) { 
       echo "Binding parameters failed: (" . $sql->errno . ") " . $sql->error; 
      } 


      if (!$sql->execute()) { 
        echo "Execute failed: (" . $sql->errno . ") " . $sql->error; 

      } else { 

       echo "SG Successfully Added!"; 
      } 


     } else if (($lotnumber1 !== "") AND ($lotnumber2 !== "") AND ($lotnumber3 == "")) { 


      if (!($sql = $conn->prepare("UPDATE invoicesJan2016 SET lotnumber3 = ? WHERE id = ?"))) { 
       echo "Prepare failed: (" . $conn->errno . ") " . $conn->error; 
      } 


      if (!$sql->bind_param("ss", $lotnumber, $sgref)) { 
       echo "Binding parameters failed: (" . $sql->errno . ") " . $sql->error; 
      } 


      if (!$sql->execute()) { 
        echo "Execute failed: (" . $sql->errno . ") " . $sql->error; 

      } else { 

       echo "SG Successfully Added!"; 
      } 


     } else { 

      echo "There are too many lot numbers associated with this SG. Please call IT to request additional space."; 

     } 

    } // End While. 

}//end if 


} else { 

    echo "SG Number did not save. Please try again."; 

} 

$sqlget->close(); 
$sql->close(); 
$conn->close(); 

は私のスクリプトです。

ありがとうございました!あなたのコードを読み取ろうとした後

+0

エラー報告が有効になっていますか?ログファイルをチェックして、そこに何かがあるかどうか確認できますか? –

+0

実際には、インデントがひどいので、あなたのコードを読むのが難しいため、実際には下書きされました。ちょうどその場合、私の投票ではありませんでした。 – Alfabravo

+0

@alfabravo ....大丈夫、私はそれを念頭に置いておきます。提案していただきありがとうございます。質問の実際の話題については、エラーログには、レスポンス制限のMod Securityルールによって引き起こされた500内部エラーが示されています。これは、レスポンスがmodルールに対して大きすぎると述べています。私は現在、問題をさらに検討しています。 – rdimouro

答えて

1

ありがとうございました。私は500内部サーバーエラーが4 MBの応答サイズによって引き起こされたことを確認することができました... !!!これはロジックのwhileループによって引き起こされたものです。その間を取り除き、ページの論理構成要素を再構成することによって、応答が大幅に小さくなり、完全に機能します。以下は、機能するコードの更新版です。みんなに助けてくれてありがとう!

MY CODE:

<?php 

include("../../include/session.php"); 
include('inc.php'); 

if ((isset($_POST['lotnumberinput'])) AND (isset($_POST['sgref']))) { 

    $sgref = $_POST['sgref']; 
    $lotnumber = $_POST['lotnumberinput']; 

    $conn = new mysqli($servername, $username, $password, $dbname); 

    if ($conn->connect_errno) { 
     echo "There was a problem connecting to MySQL: (" . $conn->connect_errno . ") " . $conn->connect_error; 
    } 

    if (!($sqlget = $conn->prepare("SELECT lotnumber, lotnumber2, lotnumber3 FROM invoicesJan2016 WHERE id = ?"))) { 
     echo "Prepare failed: (" . $conn->errno . ") " . $conn->error; 
    } 

    if (!$sqlget->bind_param("s", $sgref)) { 
     echo "Binding parameters failed: (" . $sqlget->errno . ") " . $sqlget->error; 
    } 

    if (!$sqlget->execute()) { 
    echo "Execute failed: (" . $sqlget->errno . ") " . $sqlget->error; 
    } 

    $sqlget->bind_result($lotnumber1, $lotnumber2, $lotnumber3); 

    $res = $sqlget->fetch(); 

    $sqlget->free_result(); 

    if ($res) { 

    if ($lotnumber1 == "") { 

     if (!($sql = $conn->prepare("UPDATE invoicesJan2016 SET lotnumber = ? WHERE id = ?"))) { 
     echo "Prepare failed: (" . $conn->errno . ") " . $conn->error; 
     } 

    } else if (($lotnumber1 !== "") AND ($lotnumber2 == "")) { 

     if (!($sql = $conn->prepare("UPDATE invoicesJan2016 SET lotnumber2 = ? WHERE id = ?"))) { 
     echo "Prepare failed: (" . $conn->errno . ") " . $conn->error; 
     } 

    } else if (($lotnumber1 !== "") AND ($lotnumber2 !== "") AND ($lotnumber3 == "")) { 

     if (!($sql = $conn->prepare("UPDATE invoicesJan2016 SET lotnumber3 = ? WHERE id = ?"))) { 
     echo "Prepare failed: (" . $conn->errno . ") " . $conn->error; 
     } 

    } else { 

     $sql = ""; 

    } 

    if (!($sql == "")) { 

     if (!$sql->bind_param("ss", $lotnumber, $sgref)) { 

     echo "Binding parameters failed: (" . $sql->errno . ") " . $sql->error; 
     } 

     if (!$sql->execute()) { 

     echo "Execute failed: (" . $sql->errno . ") " . $sql->error; 

     } else { 

     echo "SG Successfully Added!"; 
     } 

    } else { 

     echo "There are too many lot numbers associated with this SG. Please call IT to request additional space."; 

    } 

    }//end if 

} else { 

    echo "SG Number did not save. Please try again."; 

} 

$sqlget->close(); 
$sql->close(); 
$conn->close(); 

?> 
0

(編集答え)、適切をインデントし、本当に難しい読みますされていない、私はあなたの変数($sqlget$sql$conn)がまだのインスタンスを保持するかどうかを確認することをお勧めしたいですあなたは実際に何かを閉じることができるので、クラス。

<?php 

include("../../include/session.php"); 

include('inc.php'); 

if ((isset($_POST['lotnumberinput'])) AND (isset($_POST['sgref']))) { 

    $sgref = $_POST['sgref']; 
    $lotnumber = $_POST['lotnumberinput']; 
    $conn = new mysqli($servername, $username, $password, $dbname); 

    if ($conn->connect_errno) { 
     echo "There was a problem connecting to MySQL: (" . $conn->connect_errno . ") " . $conn->connect_error; 
    } 

    if (!($sqlget = $conn->prepare("SELECT lotnumber, lotnumber2, lotnumber3 FROM invoicesJan2016 WHERE id = ?"))) { 
     echo "Prepare failed: (" . $conn->errno . ") " . $conn->error; 
    } 

    if (!$sqlget->bind_param("s", $sgref)) { 
     echo "Binding parameters failed: (" . $sqlget->errno . ") " . $sqlget->error; 
    } 

    if (!$sqlget->execute()) { 
     echo "Execute failed: (" . $sqlget->errno . ") " . $sqlget->error; 
    } 

    $sqlget->bind_result($lotnumber1, $lotnumber2, $lotnumber3); 
    $res = $sqlget->fetch(); 
    $sqlget->free_result(); 

    if ($res) { 

     while ($res) { 

      if ($lotnumber1 == "") { 

       if (!($sql = $conn->prepare("UPDATE invoicesJan2016 SET lotnumber = ? WHERE id = ?"))) { 
        echo "Prepare failed: (" . $conn->errno . ") " . $conn->error; 
       } 

       if (!$sql->bind_param("ss", $lotnumber, $sgref)) { 
        echo "Binding parameters failed: (" . $sql->errno . ") " . $sql->error; 
       } 

       if (!$sql->execute()) { 
        echo "Execute failed: (" . $sql->errno . ") " . $sql->error; 
       } else { 
        echo "SG Successfully Added!"; 
       } 

      } else if (($lotnumber1 !== "") AND ($lotnumber2 == "")) { 

       if (!($sql = $conn->prepare("UPDATE invoicesJan2016 SET lotnumber2 = ? WHERE id = ?"))) { 
        echo "Prepare failed: (" . $conn->errno . ") " . $conn->error; 
       } 

       if (!$sql->bind_param("ss", $lotnumber, $sgref)) { 
        echo "Binding parameters failed: (" . $sql->errno . ") " . $sql->error; 
       } 

       if (!$sql->execute()) { 
        echo "Execute failed: (" . $sql->errno . ") " . $sql->error; 
       } else { 
        echo "SG Successfully Added!"; 
       } 

      } else if (($lotnumber1 !== "") AND ($lotnumber2 !== "") AND ($lotnumber3 == "")) { 

       if (!($sql = $conn->prepare("UPDATE invoicesJan2016 SET lotnumber3 = ? WHERE id = ?"))) { 
        echo "Prepare failed: (" . $conn->errno . ") " . $conn->error; 
       } 

       if (!$sql->bind_param("ss", $lotnumber, $sgref)) { 
        echo "Binding parameters failed: (" . $sql->errno . ") " . $sql->error; 
       } 

       if (!$sql->execute()) { 
        echo "Execute failed: (" . $sql->errno . ") " . $sql->error; 
       } else { 
        echo "SG Successfully Added!"; 
       } 

      } else { 
       echo "There are too many lot numbers associated with this SG. Please call IT to request additional space."; 
      } 

     } // End While. 

    }//end if 

    if($sqlget != null){$sqlget->close();} 
    if($sql != null){$sql->close();} 
    if($conn != null) {$conn->close();} 

} else { 
    echo "SG Number did not save. Please try again."; 
} 

?> 
+0

私はifロジックの外でスクリプトのクローズ部分を移動し、動作は同じです... – rdimouro

関連する問題