我编写了脚本,用作2套数据库的CMS,图像库和菜单。他们在我使用xampp和mamp在Windows,Mac甚至linux上测试的本地服务器上工作。
但是在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 :(得分: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而不是原始默认值null,这会导致数据类型问题。
感谢xReprisal提出的这个建议,我只需要调试并解决问题:
转储查询并尝试在mysql客户端中执行它。当然替换 具有实际价值的占位符。
答案 1 :(得分:-2)
我将如何调试此问题:
execute()
返回此查询的内容