2017-09-25 2 views
-1

J'ai une page PHP qui tire les données de la table DB et écho. mais quand les colonnes de la table sont comme 1000 à 5000 et plus, le chargement de la page devient trop lent que cela prend des minutes. J'essaie d'ajouter un lien de vue au bas de la page où, pour chaque 100 messages, le lien afficher plus apparaît pour afficher 100 autres messages une fois que vous avez cliqué.'Voir plus' lien dans la page php pour chaque 100 messages affichés à partir de la base de données

Et je suis au courant que je ne pagination veux pas adopter pour certaines raisons ..

Espoir Je m clairement expliquer ma situation.

Mon code va ainsi jusqu'à:

<html> 
<head> 
<?php include('db.php'); ?> 

</head> 
<body> 

<?php 
$page = 0; 

if(isset($_GET["Page"])){ 
    $page = $_GET["Page"]; 
} 
    $sql2 = "SELECT * FROM smf_log_digest WHERE note_type = 'topic' ORDER BY id_msg DESC"; 
    $result2 = $conn->query($sql2); 
    if ($result2->num_rows > 0) { 
    while($row2 = $result2->fetch_assoc()) { 
     $number = $row2["id_msg"]; 
?> 
<?php 
    $sql3 = "SELECT * FROM smf_messages WHERE id_msg = $number AND id_board = 4 LIMIT 100 OFFSET " . $page * 100; 
    $result3 = $conn->query($sql3); 
    if ($result3->num_rows > 0) { 
     while($row3 = $result3->fetch_assoc()) { 
     $member = $row3["id_member"]; 
     $replies = $row3["id_topic"]; 
?> 
<script> 
var page = 0; 

function GetData(){ 
    page++; 

    var xhr = new XMLHttpRequest(); 
    xhr.open('GET', "/getData?page="+page, true); 
    xhr.send(); 

    xhr.onreadystatechange = processRequest; 

    function processRequest(e) { 
     if (xhr.readyState == 4) { 
      <?php echo substr($row3['body'], 0, 150); ?> 
     } 
    } 
} 
</script> 


<?php  } 
    } else { 
     echo ""; 
    } 
?> 
<?php  } 
    } else { 
     echo ""; 
    } 
?> 
<div onclick="GetData()">Show More</div> 
</body> 
</html> 

Comme je l'ai mentionné la requête fonctionne très bien en tirant toutes les données de la table, mais je voudrais limiter à 100 et donner un bouton « Voir plus » au bas de tous les 100 postes ont montré.

Toute aide est appréciée.

+0

Si vous utilisez le mot-clé "pagination", vous devriez être capable de trouver plus qu'assez d'explications sur le principe. Si vous ne voulez pas aller à différentes «pages» de résultats, mais ajoutez les nouvelles entrées sous les nouvelles dans la page actuelle, puis ajoutez AJAX dans le mix. – CBroe

Répondre

1

Modifiez votre requête pour inclure un compteur "page" qui fonctionnera comme un nombre de clics sur "afficher plus" pour calculer le décalage de la requête.

$page = 0; 

if(isset($_GET["Page"])){ 
    $page = $_GET["Page"]; 
} 

"SELECT * FROM smf_messages WHERE id_msg = $number AND id_board = 4 LIMIT 100 OFFSET " . $page * 100; 

Maintenant, JavaScript, faire une demande à votre page php, je l'ai appelé « getData » et inclure des paramètres Obtenez avec le compteur.

var page = 0; 

function GetData(){ 
    page++; 

    var xhr = new XMLHttpRequest(); 
    xhr.open('GET', "/getData?page="+page, true); 
    xhr.send(); 

    xhr.onreadystatechange = processRequest; 

    function processRequest(e) { 
     if (xhr.readyState == 4 && xhr.status == 200) { 
      // Append the results here. 
     } 
    } 
} 

Vous souhaitez exécuter cette fonction à chaque clic sur le DOM.

<div onclick="GetData()">Show More</div> 

Notez, ceci est un échantillon, vous devrez faire quelques modifications en fonction de votre objectif. Comme vous n'avez pas fourni de code HTML, il est impossible pour quelqu'un d'écrire du code complet et je ne suis pas fier d'écrire le tout (HTML etc) pour vous :), alors voilà. Editer: L'appel Ajax avec les résultats ajoutés peut être simplifié en utilisant JQuery, mais comme vous l'avez marqué comme JavaScript, j'ai fourni une solution sans cela.

Edit:

Mettez votre code PHP dans un nouveau fichier appelé getData.php par exemple et le laisser sur la racine (par exemple fin)

<?php 
$page = 0; 

if(isset($_GET["Page"])){ 
    $page = $_GET["Page"]; 
} 
    $sql2 = "SELECT * FROM smf_log_digest WHERE note_type = 'topic' ORDER BY id_msg DESC"; 
    $result2 = $conn->query($sql2); 
    if ($result2->num_rows > 0) { 
    while($row2 = $result2->fetch_assoc()) { 
     $number = $row2["id_msg"]; 
    } 
    } 

    $sql3 = "SELECT * FROM smf_messages WHERE id_msg = $number AND id_board = 4 LIMIT 100 OFFSET " . $page * 100; 
    $result3 = $conn->query($sql3); 
    if ($result3->num_rows > 0) { 
     while($row3 = $result3->fetch_assoc()) { 
     $member = $row3["id_member"]; 
     $replies = $row3["id_topic"]; 
     } 
    } 
?> 

Modifier votre requête Ajax, l'URL maintenant devenu "/getData.php?page="page,

Maintenant, une fois que vous obtenez les données renvoyées, vous pouvez l'ajouter.

Jetez un oeil à cette fonction

function processRequest(e) { 
    if (xhr.readyState == 4 && xhr.status == 200) { 
     // Append the results here. 
    } 
} 

Vous pouvez ajouter à corps à l'aide document.body.innerHTML +=

Ainsi, votre fonction finale va maintenant devenir

function processRequest(e) { 
    if (xhr.readyState == 4 && xhr.status == 200) { 
     document.body.innerHTML += xhr.responseText; 
    } 
} 

J'ai ajouté des crochets fermants à votre php fichier pour fermer la boucle while et si les déclarations. Si vous ne voulez pas utiliser les parenthèses, vous devez vous assurer que vous ne les avez jamais ouverts pour éviter les erreurs de syntaxe, si vous ne mettez pas les crochets, mais seulement la ligne suivante correspondra à l'instruction loop/if, Je ne suis pas au courant.

Bon apprentissage.

+0

Salut merci pour votre temps. et j'ai essayé votre méthode, mais il semble que j'ai raté quelque chose .. s'il vous plaît vérifier sur la question mise à jour. merci .. en attendant votre réponse. –

+0

@HarishKolliparat Oui vous avez manqué d'ajouter les données à la page elle-même ... Regardez le commentaire "// Ajouter les résultats ici.". Vous devez également séparer votre fichier php dans un fichier séparé ou ajouter le document HTML dans le document. Vous n'avez même pas changé l'URL Ajax. Comme je l'ai dit, je ne vous donnerai pas le code complet, faites quelques efforts. Vous devez déjà faire de petits changements. – Adriani6

+0

Je m'excuse de vous déranger, fondamentalement, je suis un eng chimique. et c'est un peu un intérêt personnel. S'il vous plaît jeter un oeil à la question mise à jour. Jusqu'ici c'est ce que j'ai compris. Encore une fois merci pour votre temps. –