2014-05-24 18 views
1

所以我删除了我的最后一篇文章,因为我觉得我的问题不够简明。基本上,我想创建一个使用从我的主网页传递变量我的PHP文件中的MySQL连接(JS)我的索引页面传递变量,如下所示:传递给php文件的数据不允许MySQL连接

$.ajax({ 
    url: "php/ajax.php", 
    type: "POST", 
    data: {name:'3404-11833'}, 
    success: function(data){ 
      window.location.assign("http://www.dasite.com/" + myloc + ".html"); 
     } 
    }); 
} 

的PHP文件如下:

<?php 

/* Database Configuration.*/ 

$name = $_POST['name']; 
$test = strval('3404-11833'); 

$dbOptions = array(
'db_host' => '', 
'db_user' => '', 
'db_pass' => '', 
'db_name' => $name 
); 

/* Database Config End */ 

error_reporting(E_ALL^E_NOTICE); 

require "classes/DB.class.php"; 
require "classes/Chat.class.php"; 
require "classes/ChatBase.class.php"; 
require "classes/ChatLine.class.php"; 
require "classes/ChatUser.class.php"; 

session_name('webchat'); 
session_start(); 

if(get_magic_quotes_gpc()){ 

array_walk_recursive($_GET,create_function('&$v,$k','$v = stripslashes($v);')); 
array_walk_recursive($_POST,create_function('&$v,$k','$v = stripslashes($v);')); 
} 

try{ 

// Connecting to the database 
DB::init($dbOptions); 

$response = array(); 

// Handling the supported actions: 

switch($_GET['action']){ 

    case 'login': 
     $response = Chat::login($_POST['name']); 
    break; 

    case 'checkLogged': 
     $response = Chat::checkLogged(); 
    break; 

    case 'logout': 
     $response = Chat::logout(); 
    break; 

    case 'submitChat': 
     $response = Chat::submitChat($_POST['chatText']); 
    break; 

    case 'getUsers': 
     $response = Chat::getUsers(); 
    break; 

    case 'getChats': 
     $response = Chat::getChats($_GET['lastID']); 
    break; 

    default: 
     throw new Exception('Wrong action'); 
} 

echo json_encode($response); 
} 
catch(Exception $e){ 
die(json_encode(array('error' => $e->getMessage()))); 
} 

?> 

现在,当我使用$ test时,代码工作正常,但是当我切换到$ name时,出现数据库错误。这是一个格式问题还是我做了其他错误? *另外,是的,我知道注射,这里不是问题。

+1

你应该发布数据库代码和变量的var_dump()。但用户提供的输入不应该导致数据库错误。 – jeroen

+0

没有用户提供的输入。我应该在这里发布完整的数据库代码,还是应该关闭它并提出一个新问题? – user3634006

+0

我加了完整的php文件。你是否也需要查看所需的类文件? – user3634006

回答

0

如果两个字符串包含完全相同的值,它们都可以工作,或者两者都不起作用。

我个人不使用以数字开头数据库名称,但我会假设你需要逃避他们,你逃脱表 - 或以相同的方式列名:使用反引号:

'db_name' => "`{$name}`"; 
+0

$ test绝对有效,$ name绝对不起作用。这就是让我感到困惑的事情,因为据我所知它应该起作用,但事实并非如此,我尝试使用反引号,这也不起作用。 – user3634006

+0

@ user3634006如果其中一个有效,另一个不可用,则字符串不一样,请检查确切的值。 – jeroen

+0

我会做一个var_dump()并查看吐出的内容,但字符串完全相同(据我所知)感谢您的帮助jeroen,我非常感谢您的时间。 – user3634006