2016-07-26 18 views
2

Ich möchte Seitenumbrüche für meine Tablesorter-Tabellen erstellen. Meine Paginierung funktioniert jedoch nicht, aber die vorherige, nächste Schaltfläche ist da. Nur es funktioniert nicht. Immer wenn ich versuche, $(Document).ready..... zu entfernen, funktionierte es, aber alle meine Datenzeile ist verschwunden. Es ist nur leer und nur das einzige, was übrig bleibt, ist meine Tabellenüberschrift und diese Seitentaste. Stimmt etwas mit meinem Code nicht?Tabellenzeile verschwindet beim Erstellen der TablesOrter-Seitennummerierung

Das ist mein index.php

<head> 
<link rel="stylesheet" href="css/style.css"> 
<link rel="stylesheet" href="css/jquery.tablesorter.pager.css"> 
<link rel="stylesheet" href="css/jquery.dataTables.min.css"> 
<!---- 
----> 
<script type="text/javascript" src="js/jquery-latest.js"></script> 
<script type="text/javascript" src="js/jquery.tablesorter.js"></script> 
<script type="text/javascript" src="js/jquery.tablesorter.pager.js"></script> 
<!--<script type="text/javascript" src="js/jquery.dataTables.min.js"></script> --> 



    <script type="text/javascript"> 
     $(document).ready(function() 
     { 
      $("#myTable") 
      .tablesorter({widthFixed: true, widgets: ['zebra']}) 
      .tablesorterPager({container: $("#pager")}); 
     } 
     ); 
    </script> 

    </head> 

    <?php 

     // First we execute our common code to connection to the database and start the session 
     require("common.php"); 

    ?> 

    <form class="login, reminder"> 
      <h1>Search your data...</h1> 
    <p style="text-align: center">Enter your search here: <input type="text" id="search" name="search" placeholder="Enter your search here">&nbsp;&nbsp; 
    Select education level: <select id="edulevel"> 
    <option value="ALL">ALL</option> 
    <option value="PHD">PHD</option> 
    <option value="MASTER">MASTER</option> 
    <option value="DEGREE">DEGREE</option></select></p>  
    <div id="contentBox" class="login, reminder" style="margin:0px auto; width:95%; overflow-y: auto; height:304px;"> 


    <div id="result" class="login"></div> 
    <script type="text/javascript"> 

     /* 
     setInterval(function(){ 
      //alert('Refreshing database'); 
      $("#result").load("res.php", "update=true").fadeIn("slow").text("Refreshing Database"); 
     }, 10000); 
     */ 


     function update() { 
      $.ajax({ 
       url: 'userres.php', 
       dataType: 'text', 
       success: function(data) { 
        if (parseInt(data) == 0) { 
         $("#result").css({ color: "red" }).text("offline"); 
        } else { 
         $("#result").css({ color: "green" }).text("online"); 
        } 
       } 
      }); // properly end the ajax() invocation 
     } 


     function ajaxSearchUpdater(){ 
      $("#result").show(); 
      var x = $("#search").val(); 
      var y = $("#edulevel").val(); 
      $.ajax({ 
       type:'POST', 
       url:'userres.php', 
       data:'q='+x+'&e='+y, 
       cache:false, 
       success:function(data){ 
        $("#result").html(data) 
       } 
      }); 
     } 

     $(document).ready(function(e) { 
      ajaxSearchUpdater();    // fires on document.ready 
      $("#search").keyup(function() { 
       ajaxSearchUpdater();   // your function call 
      }); 
      $("#edulevel").click(function() { 
       ajaxSearchUpdater();   // your function call 
      }); 
     }); 
    </script> 

Dies ist, wo mein Tisch userres.php ist

<html> 
<head> 
<link rel="stylesheet" href="css/style.css"> 
<link rel="stylesheet" href="css/jquery.tablesorter.pager.css"> 
<link rel="stylesheet" href="css/jquery.dataTables.min.css"> 
<!---- 
----> 
<script type="text/javascript" src="js/jquery-latest.js"></script> 
<script type="text/javascript" src="js/jquery.tablesorter.js"></script> 
<script type="text/javascript" src="js/jquery.tablesorter.pager.js"></script> 
<script type="text/javascript" src="js/jquery.dataTables.min.js"></script> 


<script type="text/javascript"> 
    $(function() 
    { 
     $("#myTable") 
     .tablesorter({widthFixed: true, widgets: ['zebra']}) 
     .tablesorterPager({container: $("#pager")}); 
    } 
    ); 
</script> 

</head> 

<?php 

require("common.php"); 
error_reporting(error_reporting() & ~E_NOTICE); 


//print_r($_GET); 
$q=$_POST['q']; 
if(isset($_POST['e'])){ 
    $e=$_POST['e']; 
    //echo $q; 
    //echo $e; 
} 

echo '<div id="pager" class="pager"> 
    <form> 
     <img src="css/first.png" class="first"/> 
     <img src="css/prev.png" class="prev"/> 
     <input type="text" class="pagedisplay"/> 
     <img src="css/next.png" class="next"/> 
     <img src="css/last.png" class="last"/> 
     <select class="pagesize"> 
      <option value="">LIMIT</option> 
      <option value="2">2 per page</option> 
      <option value="5">5 per page</option> 
      <option value="10">10 per page</option> 

     </select> 
    </form> 
</div>'; 

if($stmt->rowCount() > 0){ 
    $r=$stmt->fetchAll(); 
    echo "<table class='tablesorter-blackice' id='myTable' style='width:97%; table-border: 1'>"; 
     echo "<thead>"; 
     echo "<tr>"; 
     echo "<th>No.</th>"; 
     echo "<th>No.Matric</th>"; 
     echo "<th>Name</th>"; 
     echo "<th>Programme</th>"; 
     echo "<th>Title</th>"; 
     echo "<th>Education Level</th>"; 
     echo "<th>Serial Number</th>"; 
     echo "<th>Availability</th>"; 
     echo "</tr>"; 
     echo "</thead>"; 
     echo "<tbody>"; 

    foreach($r as $row){ 

      echo "<tr align='center'><td>". ($a+1) ."</td><td>". $row['matricno'] ."</td><td>". $row['studentname'] ."</td><td>". $row['programme'] ."</td><td>". $row['title'] ."</td><td>". $row['education_level'] ."</td><td>". $row['serialno'] ."</td><td>". $row['bavailable'] ."</td></tr>"; 
      $a++; 
      //echo $row['education_level']; 
    } 
    echo "</tbody>"; 
    echo "</table>"; 
} 
else{ 
    echo "<p align='center'>Nothing to show you :(I am really sorry for this T_T </p>"; 
} 

?> 

Ich habe keine Probleme mit Datenbanken. Nur dass es passiert, wenn ich die $(Document).ready.... von der Funktion entferne, weil irgendein Tutorium das nicht benutzt und einiges tut. Irgendwelche Ahnung was ich vermisse? * HINWEIS Ich bin absichtlich nicht meine Abfrage enthalten, weil zu viele Kommentare und Zeug. Außerdem rufe ich setsorter auf beiden Seiten auf, weil ich nicht sicher bin, auf welcher Seite die Funktion salesorter aufgerufen werden soll. Es liegt daran, dass meine Tabelle in der PHP-Datei ist. nicht html

+0

Der document ready function wrapper ist nur notwendig, wenn das Javascript irgendwo über dem unteren Rand der Seite geladen oder ausgeführt wird. Wenn der Container "# result" aktualisiert wird, ist die Tabelle darin? – Mottie

Antwort

0

Ich löse es schon, indem ich es manuell in der userres.php erstelle. Ich denke, dass es nicht funktioniert, weil ich Ajax in index.php verwende, um Daten von userres.php anzufordern. Daher sind die Daten, die zurückgegeben werden, zu DOM geworden, was ein Dokumentobjektmodell ist, und es hat sich auf HTML bezogen (Wenn jemand dies besser als ich klären kann, würde ich mich freuen). Also muss ich ein Handbuch wie folgt erstellen. (Mathematische Sachen T_T)

Beginnend nach der Ausführung der Abfrage innerhalb userres.php

$stmt2 = $db->prepare($totalrow); 
$stmt2->bindValue(':q','%'.$q.'%'); 
$stmt2->bindValue(':e',$e); 
$stmt2->execute(); 

$row = $stmt2->rowCount(); 

$limitrow = 1; 
if(isset($_POST['pagelim'])){ 
    $limitrow = $_POST['pagelim']; 

    if($limitrow == 0){ 
     $limitrow = $row; 
    } 

} 


if($row != 0){ 
    $baki = $row%$limitrow; 
} 
else{ 
    $baki = 0; 
    $limitrow = 1; 
    $row = 1; 
} 

$maxpage = (($row-$baki)/$limitrow); 
$startrow = $limitrow*($pageno-1); 

if($baki!=0) 
    $maxpage++; 

---- dann eine weitere Abfrage ---- Ich schließe die Abfrage

-Code unten ist animiere die Seitennummer etwas und passe sie an.

$startPage = ($pageno <5) ? 1 : $pageno -4; 
$endPage = 8 + $startPage; 
$endPage = ($maxpage < $endPage) ? $maxpage : $endPage; 
$diff = $startPage - $endPage + 8; 
$startPage -=($startPage - $diff > 0) ? $diff : 0; 

$a = $startPage; 
echo "<ol id='olpoint'>"; 


if($startPage > 1) echo "<a href='#' onclick='ajaxSearchUpdater(1);'><li>First</li></a>"; 

while($a<=$endPage){ 

     echo "<a href='#' onclick='ajaxSearchUpdater(".$a.");'"; 
     if($pageno == $a){ 
      echo "style='color:grey;'"; 
     } 
     echo "><li>".$a."</li></a>"; 
     $a++; 
}; 

if($endPage < $maxpage) echo "<a href='#' onclick='ajaxSearchUpdater(".$maxpage.");'><li>End</li></a>"; 

echo "</ol>"; 

Für meine index.php Ich habe es wie dieser

function ajaxSearchUpdater(p){ 
     $("#result").show(); 
     var x = $("#search").val(); 
     var y = $("#edulevel").val(); 
     var pagelim = $("#pagefpe").val(); 
     var pagenumber = p; 

     $.ajax({ 
      type:'POST', 
      url:'userres.php', 
      data:'q='+x+'&e='+y+'&pagelim='+pagelim+'&pageno='+pagenumber, 
      cache:false, 
      success:function(data){ 
       $("#result").html(data) 
      } 
     }); 
    } 

    $(document).ready(function(e) { 
     ajaxSearchUpdater(1);    // fires on document.ready 
     $("#search").keyup(function() { 
      ajaxSearchUpdater(1);   // your function call 
     }); 
     $("#edulevel").click(function() { 
      ajaxSearchUpdater(1);   // your function call 
     }); 
     $("#pagefpe").click(function() { 
      ajaxSearchUpdater(1);   // your function call 
     }); 
    }); 

HINWEIS: Ich kann nicht sagen, dass dies die beste Lösung in Bezug auf Leistung ist denn auch nicht selbst viel über Ajax und DOM Sachen zu wissen . Auch innerhalb dieser userres.php benutze ich viele Abfragen und innerhalb der Abfrage gibt es eine weitere Abfrage. Also ich denke, es ist nicht gut, richtig. Der Punkt ist, dass ich diese Paginierung machen muss, um unabhängig von der Leistung zu arbeiten, aber wenn es viel besseren Weg gibt, hoffe ich, dass jeder mehr zur Verfügung stellen kann :).