我试图将图像文件发送到我的主机服务器中名为productpics /的文件,然后将文件的名称发送到我的数据库中,其中包含我表单中的所有其他数据。我将图像文件发送到productpics文件夹,但随后我准备好的语句中断,没有其他任何事情发生。没有任何内容发送到数据库。我相信这是因为我尝试将图像文件发送到数据库。
我认为打破这条线的是....
我在提交表单时遇到此错误,但无论我不确定我是否正在尝试将其正确发送到数据库。我是按照正确的方式做到这一点还是基于我拥有的,我该如何构建它?
致命错误:函数名称必须是第110行/home4/pfarley1/public_html/addproduct.php中的字符串
//Create
$filename = $_FILES['file']['name'];
//$filesize = $_FILES['file']['size'];
//$filetype = $_FILES['file']['type'];
$tmp_name = $_FILES['file']['tmp_name'];
$file_error = $_FILES['file']['error'];
if (isset($filename )) {
if (!empty($filename)) {
$destinationFolder = 'productpics/';
if (move_uploaded_file($tmp_name, $destinationFolder.$filename)) {
echo 'Uploaded!';
} else {
echo 'There was an error!';
}
} else {
echo 'Please choose a file.';
}
}
if($validation->passed()) {
if(isset($_POST['create'])){
$product_id = trim( $_POST['product_id'] );
$product_name = trim( $_POST['product_name'] );
$price = trim( $_POST['price'] );
$saleprice = trim( $_POST['saleprice'] );
$final_price = trim( $_POST['final_price'] );
$shippingprice = trim( $_POST['shippingprice'] );
$category = trim( $_POST['category'] );
$item_details = trim( $_POST['item_details'] );
$item_details2 = trim( $_POST['item_details2'] );
$description = trim( $_POST['description'] );
$viewproduct_type = trim( $_POST['viewproduct_type'] );
$file = $_POST ($filename['img']);
}else {
foreach($validation->errors() as $error) {
echo $error, '<br>';
}
//Connection
$con = mysqli_connect("localhost","root","","bfb");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
/* create a prepared statement */
if ($stmt = mysqli_prepare($con, "INSERT INTO products (product_id, product_name, price, saleprice, final_price, shippingprice, category, item_details, item_details2, description, viewproduct_type, date_created, img) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW(), ?)")) {
/* bind parameters for markers */
$stmt->bind_param('isiiiissssss', $product_id, $product_name, $price, $saleprice, $final_price, $shippingprice, $category, $item_details, $item_details2, $description, $viewproduct_type, $file);
/* execute query */
$stmt->execute();
//if(!$stmt->execute()){trigger_error("there was an error....".$con->error, E_USER_WARNING);}
/* close statement */
mysqli_stmt_close($stmt);
echo "Success!";
} else {
echo "Failed!";
}
}
所有这些都说明了,我没有得到任何与我准备好的陈述查询的其他陈述相呼应的东西。我没有取得成功!&#39;或者&#39;失败!&#39;。为什么没有显示任何结果?
我的表格(img文件部分位于其底部......
<form action="" method="POST" enctype="multipart/form-data">
<div class="field">
<label for="product_id">Product ID</label>
<input type="text" name="product_id" class="smallinputbar" required>
</div>
<div class="field">
<label for="product_name">Product Name</label>
<input type="text" class="inputbar" name="product_name" required>
</div>
<div class="field">
<label for="price">Product Price</label>
<input type="text" class="smallinputbar" name="price" required>
</div>
<div class="field">
<label for="saleprice">Sale Price</label>
<input type="text" class="smallinputbar" name="saleprice">
</div>
<div class="field">
<label for="final_price">Final Price</label>
<input type="text" class="smallinputbar" name="final_price" required>
</div>
<div class="field">
<label for="shippingprice">Shipping Price</label>
<input type="text" class="smallinputbar" name="shippingprice" required>
</div>
<div class="field">
<label for="category">Category</label>
<input type="text" class="inputbar" name="category" required>
</div>
<div class="field">
<label for="item_details">Item Details</label>
<input type="message" class="messageinput" name="item_details" required>
</div>
<div class="field">
<label for="item_details2">Item Details 2</label>
<input type="message" class="messageinput" name="item_details2">
</div>
<div class="field">
<label for="description">Description</label>
<input type="message" class="messageinput" name="description" required>
</div>
<div class="field">
<label for="viewproduct_type">View Product Type</label>
<select class="optionbar" name="viewproduct_type">
<option value="Not Selected">Not Selected</option>
<option value="a href='./viewProduct.php?view_product=$id">Standard</option>
<option value="Option">Option</option>
</select>
</div>
<span class="floatright">
<input type="file" name="file" class="inputbarfile">
<!--<input type="submit" name="create" id="signinButton" value="Upload">-->
</span>
<input type="hidden" name="token" value="<?php echo Token::generate(); ?>">
<label for="button">
<input type="submit" id="button" name="create" value="Create New Product">
</label>
</form>
更新:
//Create
$filename = $_FILES['file']['name'];
//$filesize = $_FILES['file']['size'];
//$filetype = $_FILES['file']['type'];
$tmp_name = $_FILES['file']['tmp_name'];
$file_error = $_FILES['file']['error'];
if (isset($filename )) {
if (!empty($filename)) {
$destinationFolder = 'productpics/';
if (move_uploaded_file($tmp_name, $destinationFolder.$filename)) {
echo 'Uploaded!';
} else {
echo 'There was an error!';
}
} else {
echo 'Please choose a file.';
}
}
if($validation->passed()) {
if(isset($_POST['create'])){
$product_id = trim( $_POST['product_id'] );
$product_name = trim( $_POST['product_name'] );
$price = trim( $_POST['price'] );
$saleprice = trim( $_POST['saleprice'] );
$final_price = trim( $_POST['final_price'] );
$shippingprice = trim( $_POST['shippingprice'] );
$category = trim( $_POST['category'] );
$item_details = trim( $_POST['item_details'] );
$item_details2 = trim( $_POST['item_details2'] );
$description = trim( $_POST['description'] );
$viewproduct_type = trim( $_POST['viewproduct_type'] );
$file = $filename;
此问题的完整PHP代码。
//Validation
if(Input::exists()) {
if(Token::check(Input::get('token'))) {
$validate = new Validate();
$validation = $validate->check($_POST, array(
'product_id' => array(
'required' => true,
'min' => 1,
'max' => 50,
'unique' => 'products'
),
'product_name' => array (
'required' => true,
'min' => 2,
'max' => 50
),
'price' => array (
'required' => true,
'min' => 1,
'max' => 50
),
'saleprice' => array (
'min' => 1,
'max' => 50
),
'final_price' => array (
'required' => true,
'min' => 1,
'max' => 50
),
'shippingprice' => array (
'max' => 50
),
'category' => array (
'required' => true,
'min' => 2,
'max' => 50
),
'item_details' => array (
'required' => true,
'min' => 2,
'max' => 1550
),
'item_details2' => array (
'max' => 1550
),
'description' => array (
'required' => true,
'min' => 2,
'max' => 1550
)
)
);
//Create
if($validation->passed()) {
$filename = $_FILES['file']['name'];
//$filesize = $_FILES['file']['size'];
//$filetype = $_FILES['file']['type'];
$tmp_name = $_FILES['file']['tmp_name'];
$file_error = $_FILES['file']['error'];
if (isset($filename )) {
if (!empty($filename)) {
$destinationFolder = 'productpics/';
if (move_uploaded_file($tmp_name, $destinationFolder.$filename)) {
echo 'Uploaded!';
} else {
echo 'There was an error!';
}
} else {
echo 'Please choose a file.';
}
}
if(isset($_POST['create'])){
$product_id = trim( $_POST['product_id'] );
$product_name = trim( $_POST['product_name'] );
$price = trim( $_POST['price'] );
$saleprice = trim( $_POST['saleprice'] );
$final_price = trim( $_POST['final_price'] );
$shippingprice = trim( $_POST['shippingprice'] );
$category = trim( $_POST['category'] );
$item_details = trim( $_POST['item_details'] );
$item_details2 = trim( $_POST['item_details2'] );
$description = trim( $_POST['description'] );
$viewproduct_type = trim( $_POST['viewproduct_type'] );
$file = $filename;
$file = $_POST['img'];
}else {
foreach($validation->errors() as $error) {
echo $error, '<br>';
}
//Connection
$con = mysqli_connect("localhost","root","","bfb");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
/* create a prepared statement */
if ($stmt = mysqli_prepare($con, "INSERT INTO products (product_id, product_name, price, saleprice, final_price, shippingprice, category, item_details, item_details2, description, viewproduct_type, date_created, img) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW(), ?)")) {
/* bind parameters for markers */
$stmt->bind_param('isiiiissssss', $product_id, $product_name, $price, $saleprice, $final_price, $shippingprice, $category, $item_details, $item_details2, $description, $viewproduct_type, $file);
/* execute query */
$stmt->execute();
//if(!$stmt->execute()){trigger_error("there was an error....".$con->error, E_USER_WARNING);}
/* close statement */
mysqli_stmt_close($stmt);
echo "Success!";
} else {
echo "Failed!";
}
}
}
}
}
答案 0 :(得分:1)
此时来回评论时间过长,并且提交了以下答案,因为评论时间过长。
虽然这可能不是一个解决方案(或者可能是一个解决方案,或者它可能导致一个解决方案),但仍然是您发布的问题/错误消息的答案。
问题在于这一行$file = $_POST ($filename['img']);
,我不知道你在这里要做什么。
你之前在评论中告诉我“我对'img'的专栏是文字”。
$_POST[]
使用方括号,而不是$_POST()
使用圆括号。这就是您收到以下错误的原因:
致命错误:函数名称必须是第110行/home4/pfarley1/public_html/addproduct.php中的字符串
$_POST
作为函数。我不知道您是否要将上传的文件作为二进制文件插入列中,或者是基于文本的指向该文件的指针,只有您知道它的确切意图。
如果要将其作为二进制文件输入,则需要将其关联列设置为BLOB。
当使用BLOB作为列类型时,需要转义该数据,否则会引发错误。
您还需要检查系统文件中设置/允许的上传最大大小。
默认情况下,PHP将其设置为2M。如果文件超过该大小,则会失败;增加它和相关的任何其他内容,例如最大超时时间。
你也没有做错误检查:
$file_error = $_FILES['file']['error'];
这是一个迷路/未使用的变量。
请教:
检查错误并使用它。
就我而言,我会摆脱$file = $_POST ($filename['img']);
并使用$filename
作为你想要输入数据库的变量,因为它进入{{1}您在查询中设置了该列。
“我对'img'的专栏是文字。”
img
更改为TEXT
,并为其设置足够长的时间。由于它,MySQL可能会无声地失败。我建议您做的另一件事是将VARCHAR
和其他变量放在条件语句中。
如果您想使用类似的语法来替换$filename = $_FILES['file']['name'];
,那么您可以添加一个额外的输入并为其指定$file = $_POST ($filename['img']);
name属性,然后执行以下操作:
img
这将是有效的。
我在你的第一段代码中发现了另一件事,如果这是你的整个代码,你错过了$file = $_POST['img'];
条件语句的右括号}
。
最后/最后一个大括号if($validation->passed()) {
与此代码块相关联:
}
修改强>
您在编辑中添加的这一行:
else {
foreach($validation->errors() as $error) {
echo $error, '<br>';
}
您正在覆盖您的第一个变量,并且您在评论中声明您没有表单元素名称$file = $filename;
$file = $_POST['img'];
。
但那是一个文件而不是文字。使用img
或$file = $_FILES['img'];
- 此时,我不知道您在表单中输入的文件是什么。
$file = $_FILES['file'];
MySQL和PHP是两种不同的动物,不知道哪个列用于插入。
您不能依赖POST数组来确定要插入的列。您需要在查询中指定它。
确保$file = $_FILES['file']['name'];
列确实存在,然后使用img
数组及其相关变量作为$_FILES
中的值VALUES
。
$file
,而不是$filename
。或者,无论变量如何;到目前为止,我对你正在使用的变量和/或输入名称感到困惑。您可能需要在$file
函数/数组中添加该参数。
将error reporting添加到文件的顶部,这有助于查找错误。
$validation = $validate->check($_POST, array(...
旁注:错误报告应仅在暂存时完成,而不是生产。