2014-01-15 2 views
0

У меня проблема, когда я вставляю $ q в «SELECT * FROM table LIMIT». $ Q. "'";limit in ajax & mysql

Код HTML: html-код, сохраненный в файле "ajax.php".

<html> 
<head> 
<script> 
function showUser(str) 
{ 
if (str=="") 
    { 
    document.getElementById("txtHint").innerHTML=""; 
    return; 
    } 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText; 
    } 
    } 
xmlhttp.open("GET","getuser.php?q="+str,true); 
xmlhttp.send(); 
} 
</script> 
<meta charset="utf-8"> 
</head> 
<body> 

<form> 
<select name="users" onchange="showUser(this.value)"> 
<option value="">Select a person:</option> 
<option value="1">Peter Griffin</option> 
<option value="2">Lois Griffin</option> 
<option value="3">Glenn Quagmire</option> 
<option value="4">Joseph Swanson</option> 
</select> 
</form> 
<br> 
<div id="txtHint"><b>Person info will be listed here.</b></div> 

</body> 
</html> 

и PHP код: этот PHP код сохраняется в «getuser.php» в той же директории с HTML кодом.

<?php 
$q = intval($_GET['q']); 
$m = 2; 

$con = mysqli_connect('localhost','root','','net'); 

mysqli_select_db($con,"members"); 
$sql="SELECT * FROM members LIMIT '".$q."'"; 

$result = mysqli_query($con,$sql); 

echo "<table border='1'> 
<tr> 
<th>Firstname</th> 
<th>Lastname</th> 
<th>Age</th> 
<th>Hometown</th> 
<th>Job</th> 
</tr>"; 


while($row = mysqli_fetch_array($result)) 
    { 
    echo "<tr>"; 
    echo "<td>" . $row['username'] . "</td>"; 
    echo "<td>" . $row['password'] . "</td>"; 
    echo "<td>" . $row['name'] . "</td>"; 
    echo "<td>" . $row['family'] . "</td>"; 
    echo "<td>" . $row['email'] . "</td>"; 
    echo "</tr>"; 
    } 
echo "</table>"; 

mysqli_close($con); 
?> 

выходного шоу это messege:

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\php2\admin\test\getuser.php on line 30 

но когда я вставить "SELECT * FROM членов LIMIT 2" Он успешно работать

+0

Давайте сначала избавимся от очевидных. Попробуйте эту строку вместо того, что у вас есть: '$ sql =" SELECT * FROM members LIMIT ". $ Q;'. – Sebas

ответ

1

Вы не должны бежать целочисленных значений в SQL-запросах. Я хотел бы написать:

$sql = "SELECT * FROM members LIMIT " . (int)$q . ";"; 
+0

Вы должны рассмотреть возможность регистрации пользователя. И код даже не ускользает: он передает строковый параметр LIMIT вместо целого. – NobleUplift

+0

(int) $ q выводит строку в целое число, нет необходимости избегать целых чисел. – andreaslangsays

+0

Я имел в виду, что код OP не ускользает от ввода, который OP должен преподавать в первую очередь. Ваше решение хорошее. Раньше была ошибка в PHP, где casting (int) 1a2b3c4d привел бы к 1234 IIRC, но теперь он занимает только первую часть целого числа, что приводит к 1 или 0, если это не число. – NobleUplift

1

этот код опасен экстремально вы позволяете никому вводить в вашу базу данных. вам нужно сначала очистить переменную, также нет необходимости конкатцировать утверждение, если вы используете просто двойные кавычки. $ x woudl будет интерпретироваться правильно.

function clean_data($string) { 
     $string = trim($string); 
     if (get_magic_quotes_gpc()) { 
      $string = stripslashes($string); 
     } 
     $string = strip_tags($string); 
     return html_entity_decode($string, ENT_QUOTES); 
} 

$x = clean_data($_GET['q'); 
$q = "SELECT * FROM members LIMIT $x"; 
+0

спасибо. задача решена –