2015-01-12 2 views
-1

У меня есть данные таблицы [Столбцы: id, вопрос, ответ на каждый вопрос есть ответ]; В frontend/UI у меня есть textarea, в то время как я вставляю вопрос в это поле, которое ищет точный вопрос в db и покажет результат. Я хочу, чтобы ajax не нужно было нажимать кнопку поиска. Я хочу, чтобы это работало, когда я вставляю вопрос в текстовую область.Поиск базы данных при вводе данных в текстовую область

код я использую

HTML:

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
    <meta charset="utf-8">  
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <title>CSS3</title> 
    <!-- Latest compiled and minified CSS --> 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css"> 
<!-- Latest compiled and minified JavaScript --> 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
    </head> 
     <body> 
     <div class="container"> 
      <div class="jumbotron"> 
      <h1>PHP5</h1> 
    <form class="form-inline"> 
     <div class="form-group"> 

     <input size="100" type="text" id="searchid" class="form-control" rows="10" cols="100" /> 
     </div> 

    <div id="resultdiv"></div> 
    </form> 
      </div> 
     </div> <!-- /container --> 
     <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> 
     </body> 
    </html> 

JQuery:

<script type="text/javascript"> 
     $(document).ready(function() { 

      $('#searchid').keydown(function (e){ // Event for enter keydown. 

      if(e.keyCode == 13){ 

      var idvalue = $("#searchid").val(); // Input value. 

       $.ajax({ //Ajax call. 

        type: "GET", 
        url: "search.php", 
        data: 'id=' + idvalue , 
        type: 'json', 
        success: function(msg){ 
         // Show results in textareas. 
         msg = JSON.parse(msg); // Line added 

         alert (msg); 

         $('#resultdiv').val(msg.answer); 

         } 

        }); // Ajax Call 
       } //If statement 

     }); //document.ready 
    </script> 

Мой search.php

 <?php 

    if ($_GET['id']): 

     $dataid = json_decode($_GET['id']); 


     // Connect to database. 
     $con = mysqli_connect("localhost","root",""); 
     mysqli_select_db ($con,'exam_css3'); 

     // Get the values from the table. 
     $sql = "SELECT answer FROM exam_css3 where question LIKE '$dataid' "; 
     $result = mysqli_query($con,$sql); 

     while($row = mysqli_fetch_assoc($result)) 
     { 
     $answer = $row[answer]; 

     } 

    $rows = array('answer' => $answer); 

    echo json_encode($rows); 

    endif; 

    ?> 

Этот код не работает, может ли кто-нибудь помочь в этом?

+0

что-нибудь в консоли? – Neat

+0

Неудачная ошибка: JavaScript для Bootstrap требуется jQuery localhost /: 49 Uncaught SyntaxError: Неожиданный конец ввода – BANNA

+0

Что означает «не работает вообще»? Вы получили сообщение об ошибке? Происходит ли поиск? Если последнее, обратите внимание, что вы ищете 'LIKE '$ dataid'', а не' LIKE'% {$ dataid}% '', поэтому вам нужно ввести ** полный и точный текст вопроса **, чтобы он Работа. Одна фраза в вопросе ** не будет работать **. – LSerni

ответ

0

Вы определяете дважды type в своем ajax. json - dataType не простой type. type - это то, что вам не нужно устанавливать, то есть по умолчанию.

Вторая проблема заключается в том, что вы передаете свои данные как строку, а не как объект json, поэтому на вашей стороне сервера это будет массив, что вы не можете json_decode.

+0

Он * * передаёт данные как JSON. В * некоторых * браузерах это будет работать (и именно поэтому мы находим такие «обучающие программы» в сети). Чтобы работать во всех браузерах (хорошо ... * most *), ему нужно было бы добавить «Заголовок (Content-Type: application/json; charset = utf8)) перед отправкой результата из' json_encode'. – LSerni

+0

Можете ли вы переписать мой код? – BANNA

1

Есть, помимо всего прочего, некоторые проблемы на вашем PHP.

Прежде всего, вы ищете $dataid, что означает точное совпадение. Вам нужно сделать

"SELECT answer FROM exam_css3 where question LIKE '%{$dataid}' "; 

Тогда вы всегда сохранять только один ответ, и вы не указали в кавычки «ответ», что может вызвать предупреждение PHP, который будет коррумпированный выход JSON:

while($row = mysqli_fetch_assoc($result)) 
    { 
     $answer = $row[answer]; 
    } 
    $rows = array('answer' => $answer); 

    echo json_encode($rows); 

endif; 

таким образом, вы можете переписать, что, как

<?php 

if (array_key_exists('id', $_GET)) { 

    $dataid = json_decode($_GET['id']); 
    // Here it would be good to check whether the decoding succeeded. 
    // I'd also try doing in HTML: data: { id: idvalue } 

    // Connect to database. 
    $con = mysqli_connect("localhost", "root", ""); 
    mysqli_select_db ($con,'exam_css3'); 

    // Get the values from the table. 
    // Only interested in one match. 
    $sql = "SELECT answer FROM exam_css3 where question LIKE '%{$dataid}%' LIMIT 1"; 
    $result = mysqli_query($con,$sql); 

    $answer = mysqli_fetch_assoc($result); 
    if (null === $answer) { 
     $answer = array('answer' => 'nothing found', 'status' => 'error'); 
    } 

    // Since we're putting this into HTML... 
    $answer['answer'] = HTMLspecialChars($answer['answer']); 

} else { 
    $answer = array('answer' => 'no query was supplied', 'status' => 'error'); 
} 
Header ('Content-Type: application/json'); 
die(json_encode($answer)); 

в коде выше я добавил переменную «статус» так, что в Jquery вы можете сделать

if (msg.error) { 
    alert("Error: " + msg.answer); 
    return; 
} 

и далее различать правильные и неправильные ответы. существуют

Другие вопросов (например, вы должны использовать PDO и переключиться на подготовленные запросы, при существующем положении вещей, если вопрос содержит кавычки знак такого как

What's a SQL injection? 

поиск SQL будет выдавать ошибку . Это не ограничивается SQL-инъекцией. НИКАКИЕ ВОПРОСЫ, КОТОРЫЕ СОДЕРЖАЩИЕ ЦИТИРОВАННЫЕ ЗНАКИ, РАБОТАЮТ. Перед тем, как поместить его в запрос, вам нужно как минимум до escape the string dataid.

+0

Спасибо. SQL инъекции не большие проблемы в моем случае, так как это использование локального компьютера. Я изменил коды в соответствии с вашими предложениями. Какие изменения я должен внести в свой файл index.php для почты, я пока не вижу результата. – BANNA

+0

эта ошибка у меня в консоли Ошибка анализа: синтаксическая ошибка, неожиданный конец файла в D: \ wamp \ www \ exam \ search.php в строке 24 – BANNA

+0

У вас, вероятно, есть структура управления, которая оставлена ​​открытой. Я также предлагаю не использовать конструкцию if if:/endif, но фигурные скобки. Изменение ответа ... – LSerni