2017-05-19 2 views
0

abgeschlossen Ich habe folgende PHP-Skript, das eine SELECT-Abfrage der Fall ist, Variablen bindet Ergebnisse, Logik läuft basierend auf dem Wert der gebundenen Variablen und das andere tut UPDATE in der Tabelle auf die je Logik. Dieser Code wird erfolgreich ausgeführt (ich kann die entsprechende Spalte mit dem korrekten Wert in meiner Tabelle anzeigen), aber es dauert etwa 10 Sekunden, bis die Antwort vom Server zurückkommt und folgende Antwort lautet:500 Internal Server Error Bei obwohl Code erfolgreich

"Der Server hat einen internen Fehler oder eine Fehlkonfiguration festgestellt und konnte Ihre Anfrage nicht abschließen Bitte wenden Sie sich an den Server Administrator an ['private contact'], um sie über den Zeitpunkt dieses Fehlers und die Aktionen, die Sie kurz vor diesem Fehler ausgeführt haben, zu informieren Weitere Informationen zu diesem Fehler können in den Server-Fehlern Protokolle zur Verfügung.

Darüber hinaus wurde ein 500 Internal Server Error Fehler bei dem Versuch, ein ErrorDocument zu verwenden, um die Anforderung zu verarbeiten, gefunden. "

Das folgende ist mein Skript:

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

All Hilfe, da ich nicht sicher zu schätzen wissen bin, warum die so lange dauern würde, eine Antwort zu bekommen.

Vielen Dank!

+0

Haben Sie aktiviert die Fehlerberichterstattung? Könnten Sie Ihre Protokolldateien überprüfen, um zu sehen, ob dort etwas steht? –

+0

Eigentlich wurde es downvoted, weil Einrücken ist schrecklich und macht es wirklich schwer, Ihren Code zu lesen, um zu helfen. Nur für den Fall, es war nicht meine Stimme. – Alfabravo

+0

@alfabravo .... okay, ich werde das im Hinterkopf behalten. Danke für den Vorschlag. Was das eigentliche Thema der Frage anbelangt, zeigt das Fehlerprotokoll, dass der 500 interne Fehler durch Mod-Sicherheitsregeln für Response-Limits verursacht wird und dass die Antwort für die Mod-Regel zu groß war. Ich untersuche derzeit das Thema weiter. – rdimouro

Antwort

1

Vielen Dank für die Antworten. Ich konnte bestätigen, dass der 500 Internal Server Error von einer Antwortgröße von 4 MBs verursacht wurde ... !!! Dies wurde durch die while-Schleife für die Logik verursacht. Durch das Entfernen der while-Funktion und das Umstrukturieren der Logikkomponenten der Seite ist die Antwort wesentlich kleiner und funktioniert einwandfrei. Im Folgenden finden Sie die aktualisierte Version des Codes, die ordnungsgemäß funktioniert. Danke an alle für die Hilfe !!!

MEIN 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

(Edited Antwort) Nach dem Versuch, durch den Code zu lesen, die nicht richtig zerklüftet ist und wirklich schwierig macht das Lesen, würde ich prüfen vorschlagen, ob die Variablen ($sqlget, $sql, $conn) noch eine Instanz halten, die Klassen, damit Sie wirklich alles schließen können.

<?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

Ich habe die engsten Teile des Skripts außerhalb der if-Logik bewegt und das Verhalten ist das gleiche ... – rdimouro

Verwandte Themen