Вопрос:
Итак, я делаю простое веб-приложение для входа/регистрации, но я продолжаю получать следующую ошибку:
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, но мне все еще не удается заставить работать мой проект, и попытался с Google Chrome и Firefox.
Ответ №1
AHA! Получил это сегодня по той причине, которая заставит меня выглядеть довольно глупо, но которая может когда-нибудь помочь кому-то.
Установив сервер Apache на моем компьютере, с PHP и так далее… Я получил эту ошибку… и затем понял, почему: я нажал на файл HTML, о котором идет речь (то есть тот, который содержит Javascript/JQuery), поэтому адресная строка в браузере показывала “файл:///D:/apps/Apache24/htdocs/experiments/forms/index.html”.
Что вам нужно сделать, чтобы на самом деле использовать сервер Apache (при условии, что он запущен и т.д.) – go “ http://localhost/experiments/forms/index.html” в адресной строке браузера.
В смягчении я до сих пор использовал файл index.php и просто изменил файл “index.html”. Бит получателя, поскольку с первым вы обязаны получить доступ к нему “правильно” с помощью localhost.
Ответ №2
У меня была такая же ситуация в Spring MVC Application, поскольку она была объявлена как void, изменив ее, чтобы вернуть String, решив проблему
@PostMapping() public void aPostMethod(@RequestBody( required = false) String body) throws IOException { System.out.println(«DoSome thing» + body); }
To
@PostMapping() public String aPostMethod(@RequestBody( required = false) String body) throws IOException { System.out.println(«DoSome thing» + body); return «justReturn something»; } Ответ №3
Предполагая, что вы работаете с javascript, вам нужно поставить заголовок перед эхом ваших данных:
header(‘Content-Type: application/json’); echo json_encode($response); Ответ №4
Убедитесь, что вы используете php-сервер и что php-код находится в соответствующей папке. Я столкнулся с этой проблемой, если php не был там. Я также рекомендую поместить ваш html в ту же папку, чтобы предотвратить ошибки при перекрестном происхождении при тестировании.
Если это не проблема, убедитесь, что каждый SQL-запрос корректен в php и что вы используете текущие стандарты php… Php быстро меняется, в отличие от html, css и Javascript, поэтому некоторые функции могут быть устаревшими.
Кроме того, я заметил, что вы не можете правильно собирать свою переменную, что также может вызвать эту ошибку. Если вы отправляете переменные через форму, они должны быть в правильном формате и отправляться либо 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 скрипт 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, поскольку мне не пришлось бы приводить мой собственный пример. Однако я надеюсь, что эти указатели помогут!