<input id="input-fcount-3" name="inputfcount3[]" multiple type="file" class="file-loading" accept="image/*">
首先它必须验证最小 02 和最大 05 的图像计数,然后是最大 8MB 的文件大小,之后只允许图像类型“JPEG”和“PNG”,错误应为 0。
然后我必须创建一个文件夹作为 userName(登录用户的用户名,它在 session 中,可以请求)。在该文件夹内,应创建另一个文件夹,如 userName_ID_220(为此,它必须从数据库中选择最后插入的 ID,可以使用 SQL max 函数)。在此文件夹中,图像应移动并重命名为 userName_id_220_0.jpg,下一张图像应为 userName_id_220_1.jpg。
而且我必须将所有图像的路径保存在数据库中,例如 pic0 列中的 userName/userName_ID_001/userName_id_220_0.jpg,其他图像路径和名称应保存到 pic1 列中,例如 userName/userName_ID_001/userName_id_220_1.jpg,如下所示图片。
我试过 foreach 但它为每个图像创建了每一行。所以请给我一个解决方案。
date_default_timezone_set("Asia");
$currentDateTime = date('Y-m-d H:i:s');
$ad_topic = addslashes($_REQUEST['ad_topic']);
$distict = $_REQUEST['distict'];
$city = $_REQUEST['city'];
$price = $_REQUEST['price'];
$details = $_REQUEST['details'];
$user_name = $_REQUEST['user_name'];
$mainCat = addslashes($_REQUEST['Category']);
$subCat = addslashes($_REQUEST['subCategory']);
if (isset($_REQUEST['item_brand']) && isset($_REQUEST['condition']) ) {
$sub_sub_Cat = addslashes($_REQUEST['item_brand']);
$condition = $_REQUEST['condition'];
}else if(isset($_REQUEST['condition'])){
$condition = $_REQUEST['condition'];
}else if(isset($_REQUEST['item_brand'])){
$sub_sub_Cat = addslashes($_REQUEST['item_brand']);
}else{
}
if (empty($ad_topic) || strlen($ad_topic)<=10) {
echo "at least ad topic should be 10 characters long";
}else if(empty($distict) || $distict=='Select District'){
echo "Please Choose District";
}else if(empty($city) || $city=='Select City'){
echo "Please Choose City";
}else if(empty($price)){
echo "Please Enter Proper value for price";
}else if(empty($details) || strlen($details)<=15 ){
echo "At least details should be 15 characters long";
}else if(empty($user_name)){
echo "Something Wrong Contact Admin";
}else if (empty($mainCat) || ($mainCat=='Select Category')) {
echo "Please Choose Category";
}else if (empty($subCat) || ($subCat=='Select Sub Category')) {
echo "Please Choose Sub Category";
}else if(isset($_REQUEST['item_brand']) && $sub_sub_Cat=='Select Item / Brand'){
echo "Please Choose Item / Brand";
}else if (isset($_REQUEST['condition']) && $condition=='Select Condition') {
echo "Please Choose Condition";
}else if(!isset($_FILES) || count($_FILES['inputfcount3']['name']) < 2){
echo "Please choose at least 2 Pictures";
}else{
$totalPics = sizeof($_FILES['inputfcount3']['tmp_name']);
if ($totalPics >= 2) {
$file_type0 = ($_FILES['inputfcount3']['type'][0]) ;
$file_type1 = ($_FILES['inputfcount3']['type'][1]) ;
$file_type2 = ($_FILES['inputfcount3']['type'][2]) ;
$file_type2 = ($_FILES['inputfcount3']['type'][3]) ;
$file_type2 = ($_FILES['inputfcount3']['type'][4]) ;
$file_size0 = ($_FILES['inputfcount3']['size'][0]) ;
$file_size1 = ($_FILES['inputfcount3']['size'][1]) ;
$file_size2 = ($_FILES['inputfcount3']['size'][2]) ;
$file_error0 = ($_FILES['inputfcount3']['error'][0]) ;
$file_error1 = ($_FILES['inputfcount3']['error'][1]) ;
$file_error2 = ($_FILES['inputfcount3']['error'][2]) ;
if ( ($file_type0 == "image/jpeg") || ($file_type0 == "image/png") && ($file_type1 == "image/jpeg") || ($file_type1 == "image/png") && ($file_type2 == "image/jpeg") || ($file_type2 == "image/png")&& ($file_error0 == 0) && ($file_error1 == 0) && ($file_error2 == 0)) {
$sql = "INSERT INTO ads (user_name,ad_topic,district,city,price,condtition,details,status,date_time) VALUES (";
$sql .= "'$user_name',";
$sql .= "'$ad_topic',";
$sql .= "'$distict',";
$sql .= "'$city',";
$sql .= "'$price',";
$sql .= "'$condition',";
$sql .= "'$details',";
$sql .= "'waiting',";
$sql .= "'$currentDateTime')";
$q = mysql_query($sql,$link);
$last_id = mysql_insert_id();
echo "\nAD Details added Successfully, Waiting for Admin Approval";
$folder_name = './assets/img/products/'.$user_name;
$sub_folder_name = $user_name.'_adid_'.$last_id;
$sub_folder_dir = $folder_name.'/'.$sub_folder_name;
if(!file_exists($folder_name)){
$create_folder = mkdir('./assets/img/products/'.$user_name);
if (!file_exists($sub_folder_dir)) {
$create_sub_folder = mkdir($folder_name.'/'.$sub_folder_name);
}else{
echo "\nsub folder exists if con folder name";
}
}else{
if (!file_exists($sub_folder_dir)) {
$create_sub_folder = mkdir($folder_name.'/'.$sub_folder_name);
echo "\nDOWN HERE";
}else{
echo "\n sub folder exists if con folder name";
}
}
$file_tmp0 = ($_FILES['inputfcount3']['tmp_name'][0]) ;
$file_tmp1 = ($_FILES['inputfcount3']['tmp_name'][1]) ;
$file_tmp2 = ($_FILES['inputfcount3']['tmp_name'][2]) ;
$paths=array($sub_folder_name.'_0.jpg',$sub_folder_name.'_1.jpg',$sub_folder_name.'_2.jpg');
$destination0 = $folder_name.'/'.$sub_folder_name.'/'.$sub_folder_name."_0.jpg";
$mov_pic = move_uploaded_file($file_tmp0,$destination0);
PicResize($sub_folder_dir.'/',$sub_folder_name.'_0.jpg'); // $sub_folder_name Contains $user_name.'_adid_'.$last_id line number 56
$destination1 = $folder_name.'/'.$sub_folder_name.'/'.$sub_folder_name."_1.jpg";
$mov_pic = move_uploaded_file($file_tmp1,$destination1);
PicResize($sub_folder_dir.'/',$sub_folder_name.'_1.jpg');// $sub_folder_name Contains $user_name.'_adid_'.$last_id line number 56
$destination2 = $folder_name.'/'.$sub_folder_name.'/'.$sub_folder_name."_2.jpg";
$mov_pic = move_uploaded_file($file_tmp2,$destination2);
PicResize($sub_folder_dir.'/',$sub_folder_name.'_2.jpg');// $sub_folder_name Contains $user_name.'_adid_'.$last_id line number 56
if($mov_pic>0){
$pic0 = $user_name.'/'.$sub_folder_name.'/'.$sub_folder_name."_0.jpg";
$pic1 = $user_name.'/'.$sub_folder_name.'/'.$sub_folder_name."_1.jpg";
$pic2 = $user_name.'/'.$sub_folder_name.'/'.$sub_folder_name."_2.jpg";
$sqlPic = "UPDATE ads SET pic0='$pic0', pic1='$pic1', pic2='$pic2' WHERE adid='$last_id'";
$qry = mysql_query($sqlPic,$link);
}
}else{ // Ending IF condition of Image type, size, validations
echo "\n Not Suitable Image";
}
}
else{
echo "\n YOU HAVE UPLOADED $totalPics PICTURES, YOU MUST HAVE TO UPLOAD 02 PICTURES";
}
}
我遇到了一些问题,比如如果我上传了 2 张图片,就会出现错误 undefined offset for $file_type2 = ($_FILES['inputfcount3']['type'][2]);如何修复该错误并简化此代码?
最佳答案
当您上传两张图片时,它自然会出现此错误 - $file_type2 用于第三张不存在的图片。您必须将所有 $file_type 更改为:
$file_type2 = (isset($_FILES['inputfcount3']['type'][2]) ? $_FILES['inputfcount3']['type'][2] : '') ;
您的 $_FILES 数组如下所示:
Array
(
[inputfcount3] => Array
(
[name] => Array
(
[0] => test1.jpg
[1] => test2.png
)
[type] => Array
(
[0] => image/jpeg
[1] => image/png
)
[tmp_name] => Array
(
[0] => /tmp/phpq62nsC
[1] => /tmp/phpKTijeC
)
[error] => Array
(
[0] => 0
[1] => 0
)
[size] => Array
(
[0] => 63722
[1] => 3254
)
)
)
如我所见,您不需要任何 foreach - 只需将您的数据库文件名放在一起,如上所示。我有一个建议:使用 basename($_FILES['file_upload_int']['name']) 作为文件名。
这样你就不会覆盖以 jgp 结尾的文件,即使它是 png。
出于安全原因,我还建议您使用 PDO 而不是 mysql 函数和 $_POST 而不是 $_REQUEST(如果您还没有按帖子发送表格)。
关于PHP如何在不同的列中保存多个上传图片名称和路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36334469/
出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby中使用两个参数异步运行exe吗?我已经尝试过ruby命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何rubygems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除
鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende
我正在为一个项目制作一个简单的shell,我希望像在Bash中一样解析参数字符串。foobar"helloworld"fooz应该变成:["foo","bar","helloworld","fooz"]等等。到目前为止,我一直在使用CSV::parse_line,将列分隔符设置为""和.compact输出。问题是我现在必须选择是要支持单引号还是双引号。CSV不支持超过一个分隔符。Python有一个名为shlex的模块:>>>shlex.split("Test'helloworld'foo")['Test','helloworld','foo']>>>shlex.split('Test"
我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2