2017-12-26 3 views
0

auf einen Start möchte ich sagen, dass ich absolut neu in PHP und MySQL bin.PHP 1x während 2x für Schleife verlangsamt das Laden extrem

Nachdem einige Schleifen 1 x While-Schleife (für Daten vom DB erhalten) und 2x für Schleifen für dynamische Verknüpfungen machen, basierend auf „level“ in DB Laden dieser bestimmten Seite langsam gestartet werden. Ich benutze MAMP auf localhost.

Ich habe versucht, einige Korrekturen zu finden (zuerst dachte, dass die MAMP Problem ist), aber jetzt weiß ich nicht, ob diese 2x For-Schleife nicht zu schwer für die Seite ist. Wenn ich beide FOR LOOPS lösche, verschwinden die Probleme.

Kann das wegen der MAMP sein (es wird ok online laufen) oder es ist wirklich schwer und jemand sieht etwas, das die Seite verlangsamt? Auch

Vielen Dank für Hilfe

<?php 
session_start(); 
require('connect.php'); 
$level1 = "<p class='text-center mt-5' style='font-size:8vh'>Bez přihlášení do této sekce nemáte přístup</p>"; 

if (isset($_SESSION['username'])){ 
    $username = $_SESSION['username']; 
    $logmsg = "<p class='logged-in'>Jste přihlášen jako <b>$username</b>. <a href='process/logout.php'>Odhlásit se</a></p>"; 
    $level1 = "<p class='level'><a href='levels/level1.php'>Level1</a></p>"; 

    $query = "SELECT * FROM user WHERE username='$username'"; 
    $result = mysqli_query($connection, $query) or die(mysqli_error($connection)); 

    if (mysqli_num_rows($result) > 0) { 
    // output data of each row 
     while($row = mysqli_fetch_assoc($result)) { 
      $_SESSION['level'] = $row["level"]; 
     } 
    } 

    for ($i = 0 ; $i <= $_SESSION['level'] ; $i++) { 
     ${"level$i"} = "<p class='level-size'><a href='levels/level$i.php'>Hádanka $i</a></p>"; 

    } 
} 
?> 

<html> 
<head> 
    <meta charset="UTF-8"> 
    <title>Úvod</title> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" integrity="sha384-PsH8R72JQ3SOdhVi3uxftmaW6Vc51MKb0q5P2rRUpPvrszuE4W1povHYgTpBfshb" crossorigin="anonymous"> 
    <link rel="stylesheet" type="text/css" href="/style.css"> 
    <link href="https://fonts.googleapis.com/css?family=Patrick+Hand+SC&amp;subset=latin-ext" rel="stylesheet"> 


    <style type="text/css"> 
     label,small,button div { 
      font-size: 2.5vh 
     } 
    </style> 

</head> 
<body class="second-page-body"> 
    <?php if(isset($logmsg)){ ?><div class="text-right"> <?php echo $logmsg; ?> </div><?php } ?> 
    <div class="container"> 
     <h1 class="text-center p-5"><strong>Willkommen</strong></h1> 
    <div class="level-container"> 
     <?php for ($i=0; $io <= $_SESSION['level'] ; $i++) { 
       if(isset(${"level$i"})){ 
        echo ${"level$i"}; 
      } 
     } ?> 
    </div> 
    </div> 
</body> 

EDIT Getestet paar Seiten und es sieht aus, dass Problem manchmal auf anderen Seiten auftritt. (Vielleicht Kombination von MAMP localhost Fehler + for-Schleifen sind extrem langsam)

+3

Ihre zweite for-Schleife vergleicht die Variable "$ io" anstelle von "$ i"; soll das der Fall sein? Wenn es nicht definiert ist, führen Sie effektiv eine Endlosschleife in Ihrer zweiten For-Schleife aus (da sie niemals terminiert). –

+1

Warum übertragen Sie viele Daten von der Datenbank in die Sitzung? Sie werden keinen Leistungsvorteil erhalten. OTOH, wenn Sie davon ausgehen können, dass die Daten in der Sitzung konsistent sind, wird es auch im Client-Cache konsistent (wo es eine potenzielle Leistungssteigerung gibt. – symcbean

+1

Ihr Code ist ziemlich unordentlich. Sie sollten etwas über Templating-Systeme und Datenbankabstraktion lesen * (oder benutze mindestens 'PDO') *. Ich weiß nicht, wie (wenn) du den' username' bereinigst, wenn deine Benutzer ihn eingeben, aber es gibt eine grelle [SQL-Injektion] (http://php.net/ manual/de/security.database.sql-injection.php) attack vector. * (siehe https://xkcd.com/327/)* – Smuuf

Antwort

2
<?php 
    for ($i=0; $io <= $_SESSION['level'] ; $i++) { 
      if(isset(${"level$i"})){ 
       echo ${"level$i"}; 
     } 
    } ?> 

Es scheint mit $ io < = $ _SESSION [ 'Niveau'] ein Fehler zu sein. Ich denke, es sollte $ i < = $ _SESSION [ 'Niveau']

EDIT Vielen Dank für Hilfe sein. Finde auch die IF-Anweisung dort nutzlos.

Ich denke, es gibt eine falsche Verwendung oder Manipulation von Schleifen und Steueranweisungen. Versuchen Sie, Ihren Code zu optimieren, sollte es schneller laden

Verwandte Themen