2017-04-14 19 views
-2

我編寫腳本以用作2套數據庫,圖像庫和菜單的CMS。他們使用xampp和mamp在Windows,Mac甚至Linux上測試的本地服務器上工作。我的php/sql腳本在本地服務器上工作,但在活動網站上不完整

但是在GoDaddy的實時網站上,菜單cms只能修改數據庫項目,不會添加新項目。圖庫cms只能上傳圖片,但不會像其應該添加數據庫項目。

我很欣賞關於如何調試此問題或任何可能的解決方案(仍有很多要了解PDO,PHP和SQL)的任何提示。

我需要(改變數據庫憑證)的PDO文件:

<?php 

ini_set('display_errors', 'On'); 

define('APP_ROOT', __DIR__); 
define('VIEW_ROOT', APP_ROOT . '/views'); 
define('BASE_URL', ''); 

$db = new PDO('mysql:host=127.0.0.1;dbname=menu','sqladmin', 'password'); 

require 'functions.php'; 
?> 

下面是圖片上傳腳本:

<?php 
if(isset($_FILES['files'])) { 
    foreach ($_FILES['files']['name'] as $file=> $name) { 
     $filename = date('Ymd-His',time()).mt_rand().'-'.$name; 
     try { 
      if(move_uploaded_file($_FILES['files']['tmp_name'][$file],'../uploads/'.$filename)){ 
       $stmt = $db->prepare("INSERT INTO multiupload VALUES('',?)"); 
       $stmt->bindParam(1, $filename); 
       $stmt->execute(); 
      } 
     } catch(Exception $e) { 
      echo $e; 
     } 

    } 
} 
?> 

和添加項目到菜單的腳本:

<?php 

     if (!empty($_POST)) { 
      $name  = $_POST['name']; 
      $label  = $_POST['label'];   
      $dsc  = $_POST['dsc']; 
      $price  = $_POST['price']; 
      $price2  = $_POST['price2']; 
      $price3  = $_POST['price3']; 
      $price4  = $_POST['price4']; 

      $insertPage = $db->prepare(" 
       INSERT INTO menu (name, label, dsc,price,price2,price3,price4) 
       VALUE (:name, :label, :dsc, :price,:price2,:price3,:price4) 
      "); 

      $insertPage->execute([ 
       'name'  => $name, 
       'label'  => $label, 
       'dsc'  => $dsc, 
       'price'  => $price, 
       'price2' => $price2, 
       'price3' => $price3, 
       'price4' => $price4, 
      ]); 

      header('Location: ' . BASE_URL . '/admin/list.php'); 
     } 

?> 
+0

INSERT INTO multiupload VALUES('',?)' - 第一個值爲空而第二個參數化的任何原因?它也可以用空字符串參數化。 –

+0

首先,查看PHP,MySQL等版本的差異,然後在web服務器用戶的mysql中檢查權限。 –

+0

如果你要檢查真正的錯誤,也許你會知道你的代碼爲什麼失敗。 –

回答

-2

我將如何去調試這個問題:

  • 確保插入查詢被稱爲
  • 檢查什麼​​回報這個查詢
  • 轉儲查詢並嘗試在MySQL客戶端執行它。當然,用實際值替換佔位符。
+0

感謝您提供有關如何不回答「**」的反饋意見有關如何調試此問題的任何提示**或任何可能的解決方案「 – xReprisal

+0

您可以詳細說明前兩個? (不知道爲什麼你downvoted,你的意見讚賞btw!) – Replica

+0

我發現與我的文件上傳腳本與語句INSERT INTO multiupload VALUES('',?)的問題。 顯然空字符串不會插入到Godaddy的sql服務器上的整數值,但它會在我的本地服務器B/C它沒有配置。在嘗試第三個建議時,我在sql客戶端中得到了#1366錯誤,只是簡單地搜索了一下,發現這個解決方案在這裏非常詳細地解釋:http://stackoverflow.com/questions/2536199/1366-incorrect-integer-valuemysql 希望我可以upvote你! xD – Replica

0

我的數據庫是嚴格的SQL模式,所以我不得不在我的腳本中更改幾行,其中插入的數據類型不一定是爲我的SQL項目設置的特定數據類型。在我的本地服務器上,即使數據類型不一定匹配,空SQL輸入也可以工作。有2個SQL插入有這種數據類型問題。其中一個在圖像上傳腳本中

$stmt = $db->prepare("INSERT INTO multiupload VALUES('',?)"); 

我簡單地用null替換了空字符串。另一個在菜單的添加項目腳本中,如果添加的菜單項只有一個價格選項,則第二,第三和第四個價格將在表單輸入中留空,這將導致將空值插入SQL表的整數數據類型。所以我添加JavaScript來該頁面,

var input = document.getElementsByClassName('pricex');  

function makeDefault(){ 
    var input = document.getElementsByClassName('pricex'); 

    if(input.value.length == 0){ 

     x = input.length; 
     console.log(x);  
     for (var i = 0; i < x; i++) { 
      input.getElementsByClassName('.pricex')[i].value = 0.00; 
     } 
    } 
} 

確保空白的價格值將改爲整數0.00,而不是原來的默認值,空,導致數據類型的問題。

感謝xReprisal這一建議,這是所有我需要調試和解決問題:

轉儲查詢並嘗試在MySQL客戶端執行它。當然用實際值代替 佔位符。

相關問題