2014-06-29 2 views
0

Il ya quelque temps, j'ai fait une fonction de recherche avec ajax et php. Vous pouvez remplir une zone de texte avec du texte et essayer de trouver une correspondance entre tous les pays stockés dans la base de données. Maintenant, je raffine le code et le fait PDO, mais j'ai cassé quelque chose et je ne peux pas savoir quoi.Base de données PHP ajax pas de mise à jour

c'est ma simple HTML

<head> 
    <title>Ajax</title> 
    <link href="style/style.css" rel="stylesheet" type="text/css" /> 
    <link rel="stylesheet" type="text/css" /> 
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
    <script type="text/javascript" src="scripts/Javascript.js"></script> 
</head> 

<body> 
    <div id="main"> 
      <h1 class="title">Enter your country please</h1> 

     <input type="text" id="search" autocomplete="off" onchange=""> 
      <h4 id="results-text">Showing results for: <b id="search-string">Array</b></h4> 

     <ul id="results"></ul> 
    </div> 
</body> 

voici mon Jquery et javascript. note que je n'ai rien changé au HTML ni javascript donc il ne peut pas par une erreur de type.

$(document).ready(function() { 
alert('asdf'); 

function search() { 
    var query_value = $('input#search').val(); 
    $('b#search-string').html(query_value); 

    if(query_value !== ''){ 
     $.ajax({ 
      type: "POST", 
      url: "search.php", 
      data: { query: query_value }, 
      cache: false, 
      success: function(html){ 
       $("ul#results").html(html); 
      } 
     }); 
    } 

    return false; 
} 

$("input#search").live("keyup", function(e) { 
    clearTimeout($.data(this, 'timer')); 
    var search_string = $(this).val(); 

    if (search_string == '') { 
     $("ul#results").fadeOut(); 
     $('h4#results-text').fadeOut(); 
    } 

    else { 
     $("ul#results").fadeIn(); 
     $('h4#results-text').fadeIn(); 
     $(this).data('timer', setTimeout(search, 100)); 
     }; 
    }); 
}); 

Et voici mon search.php

<?php 
class SearchEngine{ 

    private $html; 

    public function __construct($conn){ 

     $this->html = '<li class="result"> 
          <h3>NameReplace</h3> 
          <a target="_blank" href="ULRReplace"></a> 
         </li>'; 

     if (isset($_POST["query"])) { 
      $search_string = mysql_real_escape_string($search_string); 
     } 

     else{ 
      $search_string = 'b'; 
     } 

     if (strlen($search_string) >= 1 && $search_string !== ' ') { 

      $query = 'SELECT * FROM country WHERE name LIKE "%' . $search_string . '%"'; 
      $result = $conn->prepare($query); 
      $result->execute(); 
      $result_array = $result->fetchAll(); 

       foreach ($result_array as $result) { 
        $display_name = preg_replace("/" . $search_string . "/i", "<b>" . $search_string . "</b>", $result['name']); 
        $display_url = 'sadf'; 

        $output = str_replace('NameReplace', $display_name, $this->html); 
        $output = str_replace('ULRReplace', $display_url, $output); 
        echo($output); 
       } 
     } 
    } 

    } 
?> 

Les problèmes:

  1. la requête Post est jamais créé, pour cela, je fait un isset donc pour l'instant quand il y a Aucune post-requête créée. Il va créer une post-requête avec la valeur "B".

  2. Je pense que la page ne sera jamais mise à jour, mais je ne peux pas être sûr à 100% puisque la publication n'est jamais créée, donc il n'y a jamais de mise à jour de la requête. Et pour une raison quelconque, les résultats ne sont pas placés là au bon endroit.

Toute aide sera très appréciée. S'il vous plaît soyez gentil je suis nouveau à Ajax et je veux plutôt comprendre que d'avoir la solution. Merci

+1

si vous var_dump ($ _ POST); '- est-ce que quelque chose est affiché? Que se passe-t-il si vous essayez de naviguer manuellement vers la page PHP qui a mis à jour le code SQL? – Dutchie432

+0

Je ne peux pas var_Dump le poste, car il ne sera jamais créé. J'ai testé le javascript.js et les fonctions internes sont appelées mais ne font pas ce qu'elles sont sensées faire. et que voulez-vous dire avec le manuel naviguer vers la page PHP? –

+0

@KrijnvanderBurg vous avez encore besoin d'aide pour cette question? – meda

Répondre

1

Êtes-vous vraiment poster votre chaîne de recherche à une classe PHP?

Ce n'est pas comme cela que cela fonctionne, vous devez créer une instance de cette classe et l'utiliser.

Créer un fichier php distinct pour cette classe, et inclus dans search.php

Vous pouvez avoir une classe simple qui ressemble à ce qui suit:

search_engine.php

<?php 
class SearchEngine{ 

    private $conn; 

    function __construct($conn){ 
     $this->conn = $conn; 
    } 

    function get_search_results($search_string){ 
     $query = 'SELECT * FROM country WHERE name LIKE :search'; 
     $result = $this->conn->prepare($query); 
     $result->execute(array(':search'=>'%'.$search_string.'%')); 
     $result_array = $result->fetchAll(); 

     return $result_array; 
    } 
} 
?> 

search.php

if (isset($_POST["query"])) { 
    $search_string = $_POST["query"]; 
    if(strlen($search_string) >= 1 && $search_string !== ' ') { 
     include 'search_engine.php' 
     $engine = new SearchEngine($conn); 
     $results = $engine->get_search_results($search_string); 
     foreach($results as $result){ 
      //do something 
     } 
    } 
} 
Questions connexes