2017-04-14 118 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客户端执行它。当然用实际值代替 占位符。

相关问题