Questo è il mio primo post su questo sito, e mentre ho passato i 2 minuti. per favore guidami nella giusta direzione se questa domanda sembra fuori posto o non in linea con le regole del sito.Paging sul lato server con MySQL, PHP e AngularJS
Ho creato/modificato uno script PHP (sotto), che mette una tabella MySQL in un formato JSON. Sto lavorando con oltre 700.000 righe, quindi ho pensato che la mia migliore scommessa fosse usare l'impaginazione.
<?php
require('connection.php');
header('Content-Type: application/json');
ini_set("max_execution_time", "-1");
ini_set("memory_limit", "-1");
ignore_user_abort(true);
set_time_limit(0);
// PortalActivity Table - JSON Creation
$limit = $_POST['limit']; //the pagesize
$start = $_POST['start']; //Offset
$dir = $_POST['dir']; // DESC or ASC
$sort = $_POST['sort'];// the column
switch ($sort) {
case "CallerPhoneNum": $orderby = "CallerPhoneNum"; break;
case "Carrier": $orderby = "Carrier"; break;
case "TotalLookups": $orderby = "TotalLookups"; break;
case "TotalBlocks": $orderby = "TotalBlocks"; break;
case "TotalComplaints": $orderby = "TotalComplaints"; break;
case "ActivityRanking": $orderby = "ActivityRanking"; break;
case "CallerType": $orderby = "CallerType"; break;
}
$sql = "SELECT COUNT(*) AS count FROM portal.PortalActivity";
$result = $conn->query($sql);
$row = $result->fetch(PDO::FETCH_ASSOC);
$count = $row['count'];
$query = "SELECT * FROM portal.PortalActivity ORDER BY $orderby $dir LIMIT $start, $limit";
$result = $conn->query($query);
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
$PortalActivity[] = array(
'CallerPhoneNum' => $row['CallerPhoneNum'],
'Carrier' => $row['Carrier'],
'TotalLookups' => $row['TotalLookups'],
'TotalBlocks' => $row['TotalBlocks'],
'TotalComplaints' => $row['TotalComplaints'],
'ActivityRanking' => $row['ActivityRanking'],
'CallerType' => $row['CallerType']
);
}
$myData = array('PortalActivity' => $PortalActivity, 'totalCount' => $count);
echo json_encode($myData);
?>
Il codice mi dà i dati di tutte le righe e un conteggio totale delle righe.
Ho un framework di bootstrap che utilizza AngularJS. Vorrei mettere i dati in una tabella usando l'impaginazione. Pertanto, quando un utente fa clic su "Avanti" o fa clic su una nuova pagina, il server carica solo i record necessari per pagina (10, 25, 50 o 100).
So che ho bisogno di: 1.) Creare il paging nel mio controller 2.) Ottenere i dati dal mio controller al mio file php in modo che possa ricevere correttamente i giusti limiti e offset. 3.) Visualizza questo a mio modo di vedere
Sono nuovo in queste lingue e mi sono ritrovato in una crisi di tempo per ottenere questa demo. Come posso far funzionare questi file insieme (PHP, JS e HTML) per visualizzare correttamente il paging di cui ho bisogno?
Questo è il mio controller originale che sta semplicemente visualizzando i dati in una vista filtrata. Come mostrato di seguito, sto usando $ http.get per ottenere i dati. Questo controller funziona, ma sto bisogno di prendere un ulteriore passo avanti con la paginazione:
app.controller('counterCtrl', function($scope, $http, $filter, filterFilter) {
$scope.Unknown = 'UK';
$scope.NonProfit = 'NP';
$scope.Political = 'PL';
$scope.Prison = 'PR';
$scope.getCount = function(strCat) {
return filterFilter($scope.items, {CallerType:strCat}).length;
}
$http.get("http://xx.xxx.xx.xx/php/jsoncreatePA.php")
.success(function (data) {
$scope.items = data.PortalActivity;
});
})
Questa è parte della vista che ho creato con il controller di lavoro:
<section id="main-content" class="animated fadeInRight">
<div class="row">
<div class="col-md-12">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Unknown</h3>
</div>
<div class="panel-body">
<table id="example" class="table table-striped table-bordered" datatable="" cellspacing="0" width="100%">
<thead>
<tr>
<th>Caller Number</th>
<th>Total Lookups</th>
<th>Total Blocks</th>
<th>Total Complaints</th>
<th>Activity Percentage</th>
</tr>
</thead>
<tbody>
<tr data-ng-repeat = "x in items | filter: { CallerType : Unknown }">
<td>{{x.CallerPhoneNum}}</td>
<td>{{x.TotalLookups}}</td>
<td>{{x.TotalBlocks}}</td>
<td>{{x.TotalComplaints}}</td>
<td>{{x.ActivityRanking}}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</section>
Questo è tangente alla tua domanda, ma il vostro PHP è seriamente vulnerabile a (https://en.wikipedia.org/wiki/SQL_injection), attacchi di SQL injection []. È necessario prendere in seria considerazione la possibilità di stabilire una connessione al database usando [PDO] (http://php.net/manual/en/intro.pdo.php) API e creazione di query parametrizzate tramite [istruzioni preparate] (http://php.net/manual/en/pdo.prepared-statements.php). –
Grazie per il tuo commento. Ho fatto un tentativo di usare PDO. L'esempio che stavo leggendo da mysqli usato. Sto ancora imparando come convertire questo in PDO. Esaminerò il tuo link sulle dichiarazioni preparate e aggiornerò di conseguenza. – ChaiBunnii