2015-02-12 3 views
0

У меня вопрос re. получение данных от php-функции до ajax.Возврат эха от php-функции до ajax

Ajax (в HTML-файл):

function showUser(name) { 
$.ajax({  
    type: 'POST',       
    url: '/api.php',        
    data: { 
    name : "\""+name+"\"", 
    func_id : "1" 
    },       
    dataType: 'json',      
    success: function(data)   
    { 
    if (data == null) { 
     console.log("Something went wrong.."); 
    } else { 
     console.log(data); 

Php (отдельный PHP-файл):

<?php 
error_reporting(E_ALL); 

//MySQL Database connect start 
$host = "localhost"; 
$user = "root"; 
$pass = "root"; 
$databaseName = "TFD"; 

$con = mysqli_connect($host, $user, $pass); 
if (mysqli_connect_errno()) { 
    echo "Failed to connect to database: " . mysqli_connect_error(); 
} 
$dbs = mysqli_select_db($con, $databaseName); 
//MySQL Database connect end 

$func_id = $_POST['func_id']; 

function showUser() { 
    global $con; 
    $name = $_POST['name']; 
    $sql = "SELECT * FROM users WHERE first_name=$name"; 
    $result = mysqli_query($con, $sql);    
    $array = mysqli_fetch_row($result);    
    mysqli_close($con); 
    echo json_encode($array); 
} 

if ($func_id == "1") { 
    showUser(); 
} 
?> 

Вопрос: Все работает, если у меня нет showUser- функция в php, т. е. я получаю правильный вывод в ajax, если у меня есть весь php-код в «root» напрямую, но когда я помещаю эту часть в функцию, я ничего не получаю в ajax. Сетевая панель в Chrome показывает правильный запрос из sql, поэтому массив $ содержит правильные данные, но я не получаю его в ajax. Есть ли исправление для этого? Спасибо!

+1

вы уязвимы для [sql injection attack] (http://bobby-tables.com). –

+0

Спасибо, что напомнили мне, попытаются исправить! .. но кроме того, почему это работает, чтобы отправить результат обратно в ajax, если не в функции? Есть ли способ заставить его отправить назад (эхо в ajax) из php-функции? –

+0

Проблема исправлена. У меня был комментарий после?>, Который был отправлен обратно в ajax вместе с массивом. Не знаю, почему это не было отправлено обратно, когда он не работает. Но теперь это работает. –

ответ

0

Причина может заключаться в том, что переменные внутри функции видны только для самой функции. Попробуйте так:

$name = $_POST['name']; 
function showUser($name) { 
    global $con; 
    $sql = "SELECT * FROM users WHERE first_name=$name"; 
    $result = mysqli_query($con, $sql);    
    $array = mysqli_fetch_row($result);    
    mysqli_close($con); 
    echo json_encode($array); 
} 

Примечание: Если вы будете использовать «mysql_escape_string», чтобы предотвратить SQL инъекции, не забудьте подключиться к БД первой, в противном случае «mysql_escape_string» вернет пустую строку.

Смежные вопросы