2014-05-24 20 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