通过php / sql获取ajax的URL

时间:2014-11-02 11:28:57

标签: javascript php mysql ajax

我在网站上遇到一些麻烦,试图续订 在头部中,使用名称“jquery.script.js”调用脚本,其中包含一些代码

$.ajax({
            url: 'function.js.php?option=urlget&id='+movie_id,
            dataType: 'json',
            success: function(data){
                fanarturl = data['url'];
                alert(fanarturl);
                alert(data.toSource());
                if (data) {
                    $('#background').fadeOut(500, function(){
                        $(this).delay(100).attr('src', 'cache/'+movie_id+'_f.jpg');
                        $(this).fadeIn(500);
                 })
                }
            }
        });

所以这个调用是一个名为“function.js.php”的文件。

if ($option == 'urlget') {
    require('function.php');

    $fan = get_fanart($mysql_tables, $_GET['id']);
    $fan_js = array(
        'url'    => (isset($fan['url']) ? $fan['url'] : ''),
    );
    echo json_encode($fan_js);
}

此调用是一个函数:

function get_fanart($mysql_tables, $movie_id) {

        $pos = strrpos($movie_id, "_");
        $MovieID = substr($movie_id, ($pos + 1));

        if(is_numeric($MovieID)){

        $img_sql = 'SELECT id, url FROM ' . $mysql_tables[5]. ' WHERE type="fanart" AND id="'.$MovieID.'"';
        $img_result = @mysql_query($img_sql);
        if ($img_result) {
            $get_img = mysql_fetch_assoc($img_result);
            foreach($get_img as $key => $val) {
                $fanart[$key] = $val;
            }
        }
    return $fanart;
}}


“jquery.script.js”中的alart显示:({url:“”})

现在的问题是,当我将代码从“function.js.php”复制到“index.php”时 它显示如下:
{“url”:“http://image.tmdb.org/t/p/original/A82GPC0XeoZMBWDYTe4Dba32cme.jpg”}



为什么这个URL没有传递给“jquery.script.js”文件?

提前致谢!

2 个答案:

答案 0 :(得分:1)

在function.js.php的开头你已经得到了这个:

if ($option == 'urlget') {

它不应该是$option,它应该是$_GET['option']。 (或类似的东西 - 我的PHP有点生锈。)

答案 1 :(得分:0)

不可否认,这种答案更适合于codereview.stackexchange.com,但您的代码存在大量含糊不清和安全漏洞。

var promise = $.ajax({
    url: 'function.js.php?option=urlget&id='+movie_id,
    dataType: 'json'
});

// This makes for better readability than a nest of callbacks
promise.done(function(data){    
    console.log(data);
    $('#background').fadeOut(500, function(){
        $(this).delay(100)
               .attr('src', 'cache/'+movie_id+'_f.jpg')
               .fadeIn(500);
    });
});

promise.fail(function(data){
    console.log('oh noes!', data); // @todo what do we do when 'function.js.php' fails?
});

function.js.php。请注意,我们会根据结果返回不同的HTTP响应代码。

// @todo fill in db credentials
$db = new PDO('mysql:host=localhost;dbname=test', $user, $pass);

$option = $_GET('option');

if ($option === 'urlget') {
    require('function.php');
    $fan_art = get_fanart($mysql_tables, intval($_GET['id']), $db);

    if  ($fan_art && count($fan_art)) {
        http_response_code(200);
        echo json_encode($fan_art);
    } else if (is_array($fan_art)) {
        http_response_code(404);
        echo json_encode(array('errors' => array('no fan_art found')));
    } else {
        http_response_code(500);
        echo json_encode(array('errors' => array('an error occured when fetching fan art')));
    } 
}

function.php。请注意,这里我们传入数据库连接并使用绑定参数将变量插入到SQL中。

/**
* 
* @param [String] $table - the table to fetch data from
* @param [Int] $movie_id
* @param [PDO] $db - A PDO database connection
* @return [False, Array] Returns false if query fails, otherwise returns array of results
*/
function get_fanart($table, $movie_id, $db) {
    $statement = $db->prepare( "SELECT id, url FROM :table WHERE type = 'fanart' AND id = :id" );
    $sth->bindParam(':table', $table); // default param type is string
    $sth->bindParam(':id', $movie_id, PDO::PARAM_INT);
    if ( $sth->execute() ) {
        return $sth->fetchAll(); 
    } else {
        return false;
    }
}

在旁边评论中,您的文件&变量命名方案非常可怕。命名文件.js.php意味着PHP文件呈现javascript。同样命名文件functionfunctions是一个维护性的噩梦 - 为什么不fan_art.json.phpfan_art.php