Как я могу отображать результаты поиска пользователей на одной странице внутри таблицы? - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь получить данные результатов поиска пользователя для печати в таблицу на той же странице, с которой был выполнен поиск. Я искал решения здесь, но все примеры используют MySql. В настоящее время я просто ищу из одного файла .log в проекте. Я использовал вызов AJAX, чтобы начать поиск нажатием кнопки. Я вижу, что результаты поиска возвращают совпадение из файла .log.
Я довольно новичок в PHP (2 недели!) И буду рад любым советам о том, как этого добиться.

error-lookup.php

<?php
require_once $RootPath . "p/check-session.inc";
$RootPath = "";
$User = "";
$RetCode = 200;
$sProcess = "error-lookup.php";
?>

<!doctype html>
<html lang="en">
<head>
 <title>MyTools</title> 
<?php include_once ($RootPath."p/html-head.inc"); ?> 
</head>
<script>
function verifyAccount() {
    var pageData = {};
        errorData = $('#userInput').val();
    pageData['errorData'] = errorData;
    var param = JSON.stringify(pageData);
    $.ajax({
        global: false,
        "url": "p/search-log.php",
        data: pageData,
        cache: false,
        "type": "POST",
        dataType: "json",
        "complete": function (selectionData) {
            console.log(selectionData);
            try {
                var resultData = $.parseJSON(selectionData.responseText); 
                var output = "";
            for (var i = 0; i < resultData.length; i++) {
                var output = "<td>" + resultData[i].Id + "</td><br>" + "<td>" + resultData[i].Date + "</td><br>" + "<td>" + resultData[i].User + "</td><br>" + "<td>" + resultData[i].Message + "</td><br>" + "<td>" + resultData[i].StackTrace + "</td>";
                $("dataTable").append(output);
            }
            document.write(output);          
                $("dataTable").html(resultData);
            } catch (err) {
                showError(1,err);
            }
        }
    });
}
</script>
<body>
    <div class="page-header">
        <div class="container">
            <div class="row-fluid">
            <medium>Platform error code lookup</medium>
            </div>
        </div>
    </div>

    <form class="container">
        <input type="radio" name="tags[]" value="East-Coast" class="east-radio"/> 
            <label >East Coast Servers</label><br/>    
        <input type="radio" name="tags[]" value="West-Coast" class="west-radio"/>
            <label >West Coast Servers</label>
    </form><br>

           <div class="input-group mb-3">
                <form class="container" action="search-log.php" method="post">
                <input class="form-control" id="userInput" type="text" name="input_tag" placeholder="Enter error code or user name">
                <div class="input-group-append">
                <input class="btn btn-outline-secondary" value="Submit" name="submit_button" type="button" onclick="verifyAccount()"></input>
                </div>
                </form>

        <table class="table" id="dataTable">
        <tbody>
            <tr> 
                <th>Date</th>
                <th>Error Id</th>
                <th>User</th>
                <th>Message</th>
                <th>StackTrace</th>
            </tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
        </tbody>
    </table>

        <div class="container">
            <div id="test"></div>
        </div>
</body>
</html>

Поиск-журнал

<?php 
$errorData = $_REQUEST["errorData"]; 
$errors = [];
$lines = file("../MyWeb.log", FILE_IGNORE_NEW_LINES);
foreach($lines as $line) {
    $tmp = [];
    $tmp["Date"] = substr($line, 0, 19);
    $pos = strpos($line, '{');
    $jsonObject = json_decode(substr($line, $pos),true);
    $tmp["Id"] = $jsonObject["Id"];
    $tmp["User"] = $jsonObject["User"];
    $tmp["Message"] = $jsonObject["Message"];
    $tmp["ServerName"] = $jsonObject["ServerName"];
    $tmp["StackTrace"] = $jsonObject["StackTrace"];
    array_push($errors, $tmp);
}
$results=[];
foreach($errors as $error){
    if (strpos($error["Date"], $errorData) > -1) {
        array_push($results, $error);
        continue;
    }
    if (strpos($error["Id"], $errorData) > -1) {
        array_push($results, $error);
        continue;
    }
    if (strpos($error["User"], $errorData) > -1) {
        array_push($results, $error);
        continue;
    }
    if (strpos($error["Message"], $errorData) > -1) {
        array_push($results, $error);
        continue;
    }
    if (strpos($error["ServerName"], $errorData) > -1) {
        array_push($results ,$error);
        continue;
    }
    if (strpos($error["StackTrace"], $errorData) > -1) {
        array_push($results, $error);
        continue;
    }
}
print_r($results);

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Поток выглядит следующим образом:

-> $ .ajax отправить сообщение с параметрами;

-> Вы получаете на свой скрипт PHP, как и любой другой пост, не нужно JSON декодировать;

-> Вы выбираете строки или все, что хотите сделать, создаете массив или структуру объекта, а затем возвращаете его с помощью json_encode и Content-Type: application / json;

-> В случае успеха ответ станет JS-объектом, если dataType определен для Json;

Ok. Сначала для преобразования в JSON необходимо создать массив или объект, а затем вернуть его с помощью json_encode. Он преобразует его в допустимую строку JSON, которую jQuery будет правильно анализировать. Допустим, у вас есть такая структура: массив ('name' => 'my_name'); Когда вы закодируете его в формате JSON, оно станет строкой JSON, например {"name": "my_name"}

В нашей полной или успешной функции у вас будет responseText.name, где значением будет «my_name». Теперь с ним вы можете делать что угодно, например, создавать domNode с div и вставлять его.

Например: вы можете создать таблицу с идентификатором, тогда:

$('#id-of-my-table').append('<tr><td>' + rensponseText.name + '</td></tr>');

Конечно, это необработанный пример, просто чтобы проиллюстрировать действительно простое использование.

0 голосов
/ 05 июля 2018

Проверьте, получаете ли вы json в правильном формате, прежде чем анализировать его.

 $.ajax({
        global: false,
        "url": "p/search-log.php",
        data: pageData,
        cache: false,
        "type": "POST",
        "complete": function (selectionData) {
            // check if you are getting valid JSON before parsing it
            console.log(selectionData)
            try {
                var resultData = $.parseJSON(selectionData.responseText);           
                    $("#test").html(resultData);
            } catch (err) {
                showError(1,err);
            }
        }
    });

отправка данных в формате json

// send json from your php script

echo json_encode($results);

ПРИМЕЧАНИЕ: вы можете использовать правую кнопку мыши -> осмотреть -> вкладку сети, чтобы проверить, что ваш сервер возвращает и выполняется ли вызов ajax.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...