PHP / Javascript: Javascript не отправляет данные в PHP - PullRequest
0 голосов
/ 30 ноября 2010

Я создаю поисковую систему, в которой пользователь вводит данные в текстовую область, и когда он нажимает «ввод», поисковый текст отправляется на поисковый запрос php через javascript, чтобы страница не загружалась заново.

Javascript:

<script type="text/javascript">
function search(str)
{
if (str=="")
  {
  document.getElementById("search").innerHTML="";
  return;
  } 
if (window.XMLHttpRequest)
  {//IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {//IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("search").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","leaderboard.php?q="+str,true);
xmlhttp.send();
}
</script>

Ввод текста:

<form>
<input type="text" value="search for user" onfocus="if
(this.value==this.defaultValue) this.value='';" onblur="if (this.value!==this.defaultValue) this.value='search for user';" id="search" name="search" style="background-color: white; color: black; border: 1px solid black; font-family: verdana; font-size: 9px; height: 20px; text-align: center;" onchange="search(this.value)">
</form>

PHP:

<?php
$con = mysql_connect('localhost', 'refrigerator', 'XXX');
mysql_select_db('refrigerator');
if($q=$_GET["q"]){
$sql="SELECT * FROM users WHERE username = '".$q."'";
$result = mysql_query($sql);
$User = array(); $Count = array(); $t=0; $i=0;
 while($row = mysql_fetch_array($result)){
  $User[] = $row['username']; $Count[] = $row['count'];
  $t=mysql_num_rows($sql);
 } 

  echo '<tr><td>' .$a. '</td><td>'.$row['username'].'</td><td>'.$row['count'].'</td></tr>';

mysql_close($con);
}

if ($q=!$_GET["q"]){

  $User = array(); $Count = array(); $t=0; $i=0;
 while($row = mysql_fetch_array($result)){
  $User[] = $row['username']; $Count[] = $row['count'];
  $t=13;
 } 
   $User[] = $row['username']; $Count[] = $row['count'];
 while($i<$t) {
  $a = $i + 1;
  echo '<tr><td>' .$a. '</td><td>'.$User[$i].'</td><td>'.$Count[$i].'</td></tr>';
  $i++;
 } 
 }
?>

Javascript определенно работает до предпоследней строки,потому что URL-адрес меняется на 'http://localhost/%5bclickphilia%5d/leaderboard.php?search=whatever был произведен поиск', но затем ничего не происходит.

Я очень новичок в этом, поэтому я мог сделать ослепительно очевидную ошибку, поэтому не исключаю такую ​​возможность: D

Спасибо

РЕДАКТИРОВАТЬ:

Вот полный код таблицы, включая php:

<table border="0" cellspacing="15" padding="0" width="200">

<th><font color="#00FF00">Rank</font></th>
<th><font color="#00FF00">Username</font></th>
<th><font color="#00FF00">Score</font></th>
<?php
$con = mysql_connect('localhost', 'refrigerator', 'XXXX');
mysql_select_db('refrigerator');
if($q=$_GET["q"]){
$sql="SELECT * FROM users WHERE username = '".$q."'";
$result = mysql_query($sql);
$result=mysql_real_escape_string($result);
$User = array(); $Count = array(); $t=0; $i=0;
while($row = mysql_fetch_array($result)){
} 

    echo '<tr><td>' .$a. '</td><td>'.$row['username'].'</td><td>'.$row['count'].'</td></tr>';

mysql_close($con);
}

if ($q=!$_GET["q"]){

    $User = array(); $Count = array(); $t=0; $i=0;
while($row = mysql_fetch_array($result)){
    $User[] = $row['username']; $Count[] = $row['count'];
    $t=13;
} 
    $User[] = $row['username']; $Count[] = $row['count'];
while($i<$t) {
    $a = $i + 1;
    echo '<tr><td>' .$a. '</td><td>'.$User[$i].'</td><td>'.$Count[$i].'</td></tr>';
    $i++;
} 
}
?>
</table>

Я уверен, что вставка php echoв таблицу работает, потому что событие if ($ q =! $ _ GET ["q"]) работает нормально.Данные введены в таблицу в порядке.

Ответы [ 3 ]

3 голосов
/ 30 ноября 2010

Ну вот эта строка:

document.getElementById("search").innerHTML=xmlhttp.responseText;

не имеет смысла для меня.Элемент "search" - это поле <input>.Установка свойства «innerHTML» этого элемента может вообще ничего не делать со страницей, потому что элементы ввода «text» являются элементами «void» и не имеют содержимого.

Может быть, у вас где-нибудь есть таблица «search_results»?Если это так, у вас могут возникнуть проблемы с обновлением «середины» <table>, по крайней мере, в IE.Попробуйте, однако, и вы должны быть в состоянии возиться с этим, чтобы придумать что-нибудь.

edit - Я еще раз скажу, в чем, на мой взгляд, проблема: ваш PHP-код кажетсясоставить ответ на поиск в виде таблицы;он создает элементы <tr> и <td>.Те должны пойти куда-нибудь в <table> (фактически технически <tbody>, но неважно).Точно, как, или даже если вы хотите уточнить это, я не могу сказать.Однако вы можете попытаться добавить это на свою страницу:

<div id='search_results'>Results Go Here</div>

и поместить ее где-нибудь там, где она появится.Затем измените свою функцию «search ()», чтобы везде, где вы устанавливаете «innerHTML», меняли «id», который вы ищете, на «search_results».

1 голос
/ 30 ноября 2010

Я предполагаю, что вы хотите реализовать своего рода автозаполнение.

Я думаю, что эта строка:

 document.getElementById("search").innerHTML=xmlhttp.responseText;

должна быть:

 document.getElementById("search_result").value=xmlhttp.responseText;

Вам нужно иметь таблицу search_result, как указал Пойнти.

Если вы заинтересованы в переходе по маршруту jQuery, это будет ваш новый код:

function search(str){
    if (str != "")
        $.get("leaderboard.php", {q : str}, function(r){
            $("#search_result").html(r);
        });
}

Если вы хотите использовать клавишу Enter, я бы (снова) рекомендовал jQuery, потому что вы можете выполнитьэто с несколькими строками кода вместо нескольких с чистым JavaScript.

0 голосов
/ 30 ноября 2010

Ничего себе.Трудно понять, с чего начать.

Я думаю, вы получите больше помощи, если дадите нам больше представления о том, чего вы пытаетесь достичь.Я думаю, что вы пытаетесь создать встроенный поиск?

  1. Если ваш URL меняется, то форма каким-то образом отправляется.Поскольку вы используете AJAX, это, вероятно, не то, что вы хотите.Добавьте onSubmit="return false;" к элементу формы.Это может решить вашу непосредственную проблему.(хотя я не уверен, что onChange будет работать в правом браузере. См. # 2)

  2. Посмотрите на jQuery для AJAX и для манипулирования DOM.Это намного проще, чем то, что вы пытаетесь построить, используя нативные инструменты.

  3. Ваш запрос не будет работать, и это проблема безопасности.Прямо сейчас любой может отправлять команды SQL в параметре q и, в зависимости от разрешений, может делать с вашей базой все, что пожелает.Посмотрите на mysql_real_escape_string() или, что еще лучше, посмотрите на структуру базы данных, которая использует заполнители, такие как PDO .Что касается самого запроса, вы только найдете людей с точным соответствием.Вы, вероятно, хотите использовать LIKE, а не равно.

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