web-dev-qa-db-ja.com

XML解析エラー:ルート要素が見つかりません場所

簡単なログイン/登録Webアプリケーションを作成していますが、次のエラーが発生し続けます。

XML Parsing Error: no root element found Location: file:///C:/xampp/htdocs/EdgarSerna95_Lab/login.html Line Number 37, Column 3:   

そして

XML Parsing Error: no root element found Location: file:///C:/xampp/htdocs/EdgarSerna95_Lab/php/login.phpLine Number 37, Column 3:

これが私のlogin.phpです

<?php
header('Content-type: application/json');

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "jammer";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    header('HTTP/1.1 500 Bad connection to Database');
    die("The server is down, we couldn't establish the DB connection");
}
else {
    $conn ->set_charset('utf8_general_ci');
    $userName = $_POST['username'];
    $userPassword = $_POST['userPassword'];

    $sql = "SELECT username, firstName, lastName FROM users WHERE username = '$userName' AND password = '$userPassword'";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        while($row = $result->fetch_assoc()) {
            $response = array('firstName' => $row['firstNameName'], 'lastName' => $row['lastName']);
        }
        echo json_encode($response);
    }
    else {
        header('HTTP/1.1 406 User not found');
        die("Wrong credentials provided!");
    }
}
$conn->close();
?>

私はxml解析エラーについていくつかの調査を行いましたが、それでもプロジェクトを機能させることができません。GoogleChromeとFirefoxで試してみました。

3
Edgar Serna

AHA!私がかなりばかげているように見えるが、いつか誰かを助けるかもしれない理由で今日これを手に入れました。

PHPなどでApacheサーバーをセットアップした後、このエラーが発生しました...そして理由を理解しました:問題のHTMLファイルをクリックしました(つまり、 Javascript/JQueryを含むもの)であるため、ブラウザのアドレスバーに「file:/// D:/apps/Apache24/htdocs/experiments/forms/index.html」と表示されました。

Apacheサーバーを実際に使用するために必要なこと(実行中など)は、go " http://localhost/experiments/forms/index.html です。ブラウザのアドレスバーにある= "

緩和策として、これまで「index.php」ファイルを使用していて、「index.html」ファイルに変更しました。前者ではローカルホストを使用して「適切に」アクセスする必要があるため、ちょっとした落とし穴があります。

7
mike rodent

Spring MVCアプリケーションでvoidとして宣言されたのと同じ状況が発生し、Stringを返すように変更すると問題が解決しました

@PostMapping()
public void aPostMethod(@RequestBody( required = false) String body) throws IOException {
System.out.println("DoSome thing" + body); 
}

@PostMapping()
public String aPostMethod(@RequestBody( required = false) String body) throws IOException {
    System.out.println("DoSome thing" + body);
    return "justReturn something";
}
3
Raj

Phpサーバーが実行されていること、およびphpコードが適切なフォルダーにあることを確認してください。 phpがなかった場合、私はこれと同じ問題に遭遇しました。また、テスト時のクロスオリジンエラーを防ぐために、HTMLを同じフォルダーに配置することをお勧めします。

それが問題ではない場合は、すべてのSQL呼び出しがphpで正しく、現在のphp標準を使用していることを確認してください... html、css、Javascriptとは異なり、Phpはすぐに変更されるため、一部の関数は非推奨になる可能性があります。

また、変数を正しく収集していない可能性があることに気付きました。これもこのエラーの原因となる可能性があります。フォームを介して変数を送信する場合は、適切な形式で、好みに応じてPOSTまたはGET)で送信する必要があります。たとえば、迷路ゲームのログインページがある場合:

[〜#〜] html [〜#〜]

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
    <form class="modal-content animate" method="post">
    <div class="container">
        <label><b>Username</b></label>
        <input type="text" id="usernameinput" placeholder="Enter username" name="uname" required>
        <label><b>Password</b></label>
        <input type="password" id="passwordinput" placeholder="Enter Password" name="psw" required>
        <button onclick="document.getElementById('id01').style.display='block'">Sign Up</button>
        <button type="button" id="loginsubmit" onclick="myLogin(document.getElementById('usernameinput').value, document.getElementById('passwordinput').value)">Login</button>
    </div>
    </form>

JavaScript

function myLogin(username, password){
var datasend=("user="+username+"&pwd="+password);
$.ajax({
    url: 'makeUserEntry.php',
    type: 'POST',
    data: datasend,
    success: function(response, status) {
        if(response=="Username or Password did not match"){
            alert("Username or Password did not match");
        }
        if(response=="Connection Failure"){
            alert("Connection Failure");
        }
        else{
            localStorage.userid = response;
            window.location.href = "./maze.html"
        }
    },
    error: function(xhr, desc, err) {
        console.log(xhr);
        console.log("Details: " + desc + "\nError:" + err);
        var response = xhr.responseText;
        console.log(response);
        var statusMessage = xhr.status + ' ' + xhr.statusText;
        var message  = 'Query failed, php script returned this status: ';
        var message = message + statusMessage + ' response: ' + response;
        alert(message);
    }
}); // end ajax call
}

[〜#〜] php [〜#〜]

<?php
$MazeUser=$_POST['user'];
$MazePass=$_POST['pwd'];


//Connect to DB
$servername="127.0.0.1";
$username="root";
$password="password";
$dbname="infinitymaze";
//Create Connection
$conn = new MySQLi($servername, $username, $password, $dbname);
//Check connetion
if ($conn->connect_error){
    die("Connection Failed:  " . $conn->connect_error);
    echo json_encode("Connection Failure");
}
$verifyUPmatchSQL=("SELECT * FROM mazeusers WHERE username LIKE '$MazeUser' and password LIKE '$MazePass'");
$result = $conn->query($verifyUPmatchSQL);
$num_rows = $result->num_rows;
if($num_rows>0){
    $userIDSQL =("SELECT mazeuserid FROM mazeusers WHERE username LIKE '$MazeUser' and password LIKE '$MazePass'");
    $userID = $conn->query($userIDSQL);
    echo json_encode($userID);
}
else{
    echo json_encode("Username or Password did not match");
}

$conn->close();
?>

このような独自の例を示す必要がないので、htmlやJavaScriptなどのコードの他の部分を含めると役に立ちます。ただし、これらのポインタが役立つことを願っています。

0
Midimistro

Javascriptを使用していると仮定すると、データをエコーする前にヘッダーを配置する必要があります。

header('Content-Type: application/json');
echo json_encode($response);
0
Yolo