رفتن به مطلب

آپلودر با چند فیلد + ذخیره در دیتابیس


پست های پیشنهاد شده

با سلام خدمت همه ی دوستان و اساتید محترم .

جستوجوهای زیادی در گوگل و همچنین در همین وب سایت کردم و به نتیجه هایی رسیدم اما کافی نبود و در بعضی موارد گنگ بود و تصمیم گرفتم اینجا مطرح کنم سوالم رو .

من یه فرم دارم که یه تعداد مشخصی آپلودر ( 6 ) عکس داره .

میخوام این آپلودرها چندتا کار انجام بده :

1 - اعتبار سنجی کنه که فایل آپلود شده واقعا عکس هست و حجم عکس کمتر از 3 مگابایت باشه .

2 - بعد از آپلود هر 6 عکس مقدارشو درون یک متغییر ریخته بشه و با , از هم جدا شده باشن و نهایتا اینسرت بشه درون دیتابیس .

در صورتی که همه عکسا آپلود نشد ، یه خطا بده و مثلا اگر عکس شماره 3 آپلود نشد و دوتای قبلی آپلود شد ، اون دوتا پاک بشه و درون هاست ذخیره نشه !

کدی که من برای یک عکس نوشتم اینه :


<?php

$uploadpath = '../uploads/';
$max_size = 2000;
$alwidth = 900;
$alheight = 800;
$allowtype = array('bmp', 'gif', 'jpg', 'jpe', 'png');

if(isset($_FILES['fileup']) && strlen($_FILES['fileup']['name']) > 1) {
$uploadpath = $uploadpath . basename( $_FILES['fileup']['name']);
$sepext = explode('.', strtolower($_FILES['fileup']['name']));
$type = end($sepext);
list($width, $height) = getimagesize($_FILES['fileup']['tmp_name']);
$err = '';

if(!in_array($type, $allowtype)) $err .= 'The file: <b>'. $_FILES['fileup']['name']. '</b> فرمت فایل شما غیر مجاز است . تنها فرمت تصاویر قابل قبول است .';
if($_FILES['fileup']['size'] > $max_size*1000) $err .= 'حجم فایل بیش از حد مجاز است : '. $max_size. ' KB.';
if(isset($width) && isset($height) && ($width >= $alwidth || $height >= $alheight)) $err .= 'ابعاد تصویر بیش از حد مجاز است: '. $alwidth. ' x '. $alheight;


if($err == '') {
if(move_uploaded_file($_FILES['fileup']['tmp_name'], $uploadpath)) {

include_once("../includes/config.php");
$cmelli = $_POST["cmelli"];
$fname = $_POST["fname"];
$lname = $_POST["lname"];
$pname = $_POST["pname"];
$nshenasname = $_POST["nshenasname"];
$bdateroz = $_POST["roz"];
$bdatemah = $_POST["mah"];
$bdatesal = $_POST["sal"];
$bdate = "$bdatesal"."$bdatemah"."$bdateroz";
$taahol = $_POST["taahol"];
$children = $_POST["children"];
$nvazife = $_POST["nvazife"];
$state = $_POST["state"];
$city = $_POST["city"];
$mtahsil = $_POST["mtahsil"];
$address = $_POST["address"];
$postalcode = $_POST["postalcode"];
$tellephone = $_POST["tellphone"];
$mobile = $_POST["mobile"];
$shoghl = $_POST["shoghl"];
$semat = $_POST["semat"];
$tellkar = $_POST["tellkar"];
$addresskar = $_POST["addresskar"];
$pic = $_FILES['fileup']['name'];
$email = $_POST["email"];
$email = $_POST["email"];
$password = MD5($_POST["userPass"]);
$loginip = $_SERVER['REMOTE_ADDR'];
$details = $_POST["details"];


$query ="INSERT INTO tbl_user ( cmelli,fname,lname,pname,nshenasname,bdate,taahol, children,nvazife,state,city,mtahsil,address,postal code,tellphone,mobile,shoghl,semat,tellkar,address kar,pic,email,password,loginip,details )
VALUES ('{$cmelli}','{$fname}','{$lname}' , '{$pname}' ,'{$nshenasname}' ,'{$bdate}' ,'{$taahol}' ,'{$children}' ,'{$nvazife}' ,'{$state}' ,'{$city}' ,'{$mtahsil}' ,'{$address}' ,'{$postalcode}' ,'{$tellephone}' ,'{$mobile}' ,'{$shoghl}' ,'{$semat}' ,'{$tellkar}' ,'{$addresskar}' ,'{$pic}' ,'{$email}' ,'{$password}' ,'{$loginip}' ,'{$details}' )";

if(mysql_query($query))
{
echo '<div class="add-user-ok"><i class="icon-ok-sign"></i> کاربر با موفقیت اضافه شد .</div>';
}
else
{
echo '<div class="add-user-error"><i class="icon-remove-sign"></i> در اضافه کردن کاربر خطایی رخ داده است !</div>';
}

}
else echo '<b>خطا در آپلود تصویر.</b>';
}
else echo $err;
}

?>

در موردی که گفتم از آرایه بعنوان اسم استفاده کردم و آپلود با موفقیت انجام مشد اما تمام شرطها اعمال نمیشد .

دوستان ، لطف میکنید کدم رو تکمیل کنید تا مشکلم رفع بشه؟

متشکرم .

ویرایش شده توسط dodgy
لینک به ارسال

شما از $_FILES['fileup']['size'] استفاده کردید برای حجم، این درست هست و مشکلی نداره

برای نوع هم بهتره MIMETYPE استفاده کنید

2 - بعد از آپلود هر 6 عکس مقدارشو درون یک متغییر ریخته بشه و با , از هم جدا شده باشن و نهایتا اینسرت بشه درون دیتابیس .

بهتره تک تک به دیتابیس بریزید

لینک به ارسال

شما از $_FILES['fileup']['size'] استفاده کردید برای حجم، این درست هست و مشکلی نداره

برای نوع هم بهتره MIMETYPE استفاده کنید

بهتره تک تک به دیتابیس بریزید

نمیشه تک تک اینزرت کرد چون همه ی این اطلاعات و مسیر عکسها درون یک رکورد باید ثبت بشه .

در واقع هر رکورد مربوط به یک کاربر میشه و اطلاعاتی که ازش دریافت میشه !

امکانش هست راهنمایی دقیقتر کنید ؟

لینک به ارسال

1 - اعتبار سنجی کنه که فایل آپلود شده واقعا عکس هست و حجم عکس کمتر از 3 مگابایت باشه .

شما برا ی اینکار میتوانید از همان MIMETYPE که مرتضی گفتند استفاده کنید , اما اصلا بهتون توصیه نمیشه . این روش قابل دور زدن است . سعی کنید عکس آپلود شده را از توابع GD بگزرانید و عکس رو دوباره درست کنید . قطعا اگر محتوای عکس , عکس باشه , همان عکس خروجی داره و اگر چیزی جزء عکس باشه صفحه ی سیاه تولید میشه .نمیدونم منظور بنده رو متوجه شدید یا خیر

آرایه ی

FILES رو بیشتر بررسی کنید


http://php.net/manual/en/reserved.variables.files.php

قطعا بعد از بررسی دست شما بیشتر تو کدهاتون باز میشه

2 - بعد از آپلود هر 6 عکس مقدارشو درون یک متغییر ریخته بشه و با , از هم جدا شده باشن و نهایتا اینسرت بشه درون دیتابیس .

مقدار چی تو متغیر ریخته بشه ؟

این کدی که نوشتید برای یک عکس است .

نمیشه تک تک اینزرت کرد چون همه ی این اطلاعات و مسیر عکسها درون یک رکورد باید ثبت بشه .

شما مرحله ی اینسرت اطلاعات و عکس رو از هم جدا کنید , اینجوری بهتر میتوانید هندل کنید . میتوانید ابتدا اطلاعات کاربر را دریافت و در سشن ذخیره کنید و در صفحه ی بعد عکس ها را بگیرید . اگر پروسه ی عکس با مشکل مواجه شد میتوانید سشن را پاک کنید .بعد از آپلود عکس ها آنها را در مکانی از سرور ذخیره میکنید و آدرس آن را در متغیری میریزید . به همین صورت تا آخر . اگر یکی از عکس ها با مشکل اعتباری مواجه شد با آدرس هایی که ذخیره کردید میتوانید کل عکس ها را پاک کنید . یا اینکه میتوانید پیغام دهید شما 5 عکس با موفقیت آپلود کردید و یک عکس دیگر باید آپلود کنید

لینک به ارسال

ممنونم علیرضا جان :)

شما برا ی اینکار میتوانید از همان MIMETYPE که مرتضی گفتند استفاده کنید , اما اصلا بهتون توصیه نمیشه . این روش قابل دور زدن است . سعی کنید عکس آپلود شده را از توابع GD بگزرانید و عکس رو دوباره درست کنید . قطعا اگر محتوای عکس , عکس باشه , همان عکس خروجی داره و اگر چیزی جزء عکس باشه صفحه ی سیاه تولید میشه .نمیدونم منظور بنده رو متوجه شدید یا خیر

در مورد GD اطلاعات کمی دارم اما در مورد تابع Fildes یه سری چیزا میدونم و میدونم چطور میشه نوع ، پسوند و... رو بدست آورد و درون کدهایی که با آپلودر تکی استفاده کردم ، قرار دادمش :)

شما مرحله ی اینسرت اطلاعات و عکس رو از هم جدا کنید , اینجوری بهتر میتوانید هندل کنید . میتوانید ابتدا اطلاعات کاربر را دریافت و در سشن ذخیره کنید و در صفحه ی بعد عکس ها را بگیرید

منظورتون اینه که یکبار عکس رو بگیرم و اگر تعداد عکسهایی که صحیح آپلود شده ، به تعدادی که تعیین شده بود باشه ، اونوقت در مرحله ی بعد اینسرت کنم ؟

اگر اینطور باشه ، باید اسم عکس هارو درون یه متغییر بریزم که بتونم تو صفحه ی بعد ازش استفاده کنم و این درست در نمیاد !

اگر فرم جدا بشه ، میشه از یه متغییر که در یک صفحه مقدا گرفته ، در صفحه ی دیگه هم استفاده کرد ؟

یه تابع هست به اسم Curl ، به همین کار میاد ؟

یا شایدم پیشنهادتون اینه که درون session ذخیره کنم و بعد در صفحه بعد سشن چک کنم و ... ؟

گیج شدم :D

لینک به ارسال

دوستان ممنونم ، با این روش مشکلم حل شد :


<?php
$uploadpath = '../uploads/';
$max_size = 2000;
$alwidth = 900;
$alheight = 800;
$allowtype = array('bmp', 'gif', 'jpg', 'jpe', 'png');
$pic = '';
$flag = true;
for($i=1;$i<=6;$i++)
{
if(!(isset($_FILES['fileup'.$i]) && strlen($_FILES['fileup'.$i]['name'])>0))
{
$flag = false;
break;
}
}
if($flag==true) {

$err = array();

for($i=1;$i<=6;$i++)
{
$sepext = explode('.', strtolower($_FILES['fileup'.$i]['name']));
$type = end($sepext);
if(!in_array($type, $allowtype))
{
$err[] = 'The file: <b>'. $_FILES['fileup'.$i]['name']. '</b> فرمت فایل شما غیر مجاز است . تنها فرمت تصاویر قابل قبول است .';
}
}
for($i=1;$i<=6;$i++)
{
if($_FILES['fileup'.$i]['size'] > $max_size*1000)
{
$err[] = '<br/>حجم فایل بیش از حد مجاز است : '. $max_size. ' KB.';
}
}
for($i=1;$i<=6;$i++)
{
list($width, $height) = getimagesize($_FILES['fileup'.$i]['tmp_name']);
if(isset($width) && isset($height) && ($width >= $alwidth || $height >= $alheight))
{
$err[] = '<br/>ابعاد تصویر بیش از حد مجاز است: '. $alwidth. ' x '. $alheight;
}
}

if(count($err)==0) {

$err = array();
$uploaded = array();
for($i=1;$i<=6;$i++)
{
$uploadpath = $uploadpath . basename( $_FILES['fileup'.$i]['name']);
if(!move_uploaded_file($_FILES['fileup'.$i]['tmp_name'], $uploadpath))
{
$err[] = 'فایل شماره '.$i.' با نام '.$_FILES['fileup'.$i]['name'].' آپلود نشد . .';
break;
}
else
{
$uploaded[] = $_FILES['fileup'.$i]['name'];
$pic .= $_FILES['fileup'.$i]['name'].",";
}
}
if(count($err)==0) {
include_once("../includes/config.php");
$cmelli = $_POST["cmelli"];
$fname = $_POST["fname"];
$lname = $_POST["lname"];
$pname = $_POST["pname"];
$nshenasname = $_POST["nshenasname"];
$bdateroz = $_POST["roz"];
$bdatemah = $_POST["mah"];
$bdatesal = $_POST["sal"];
$bdate = "$bdatesal"."$bdatemah"."$bdateroz";
$taahol = $_POST["taahol"];
$children = $_POST["children"];
$nvazife = $_POST["nvazife"];
$state = $_POST["state"];
$city = $_POST["city"];
$mtahsil = $_POST["mtahsil"];
$address = $_POST["address"];
$postalcode = $_POST["postalcode"];
$tellephone = $_POST["tellphone"];
$mobile = $_POST["mobile"];
$shoghl = $_POST["shoghl"];
$semat = $_POST["semat"];
$tellkar = $_POST["tellkar"];
$addresskar = $_POST["addresskar"];
$email = $_POST["email"];
$email = $_POST["email"];
$password = MD5($_POST["userPass"]);
$loginip = $_SERVER['REMOTE_ADDR'];
$details = $_POST["details"];


$query ="INSERT INTO tbl_user ( cmelli,fname,lname,pname,nshenasname,bdate,taahol,children,nvazife,state,city,mtahsil,address,postalcode,tellphone,mobile,shoghl,semat,tellkar,addresskar,pic,email,password,loginip,details )
VALUES ('{$cmelli}','{$fname}','{$lname}' , '{$pname}' ,'{$nshenasname}' ,'{$bdate}' ,'{$taahol}' ,'{$children}' ,'{$nvazife}' ,'{$state}' ,'{$city}' ,'{$mtahsil}' ,'{$address}' ,'{$postalcode}' ,'{$tellephone}' ,'{$mobile}' ,'{$shoghl}' ,'{$semat}' ,'{$tellkar}' ,'{$addresskar}' ,'{$pic}' ,'{$email}' ,'{$password}' ,'{$loginip}' ,'{$details}' )";

if(mysql_query($query))
{
echo '<div class="add-user-ok"><i class="icon-ok-sign"></i> کاربر با موفقیت اضافه شد .</div>';
}
else
{
echo '<div class="add-user-error"><i class="icon-remove-sign"></i> در اضافه کردن کاربر خطایی رخ داده است !</div>';
}

}
else
{
echo '<b>خطا در آپلود تصویر.</b>';
foreach($uploaded as $del_file)
@unlink($uploadpath.$del_file);
}
}
else
{
print_r($err);
}
}
else
{
echo "انتخاب تمامی فیلدهای اجباری هستند .";
}
?>
<div class="setting-base">
<div class="setting-head"><span>فرم افزودن کاربر :</span></div>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST" enctype="multipart/form-data">
<label class="lbl-adduser">تصویر کاربر : </label>
<input type="file" name="fileup1" /><br />
<input type="file" name="fileup2" /><br />
<input type="file" name="fileup3" /><br />
<input type="file" name="fileup4" /><br />
<input type="file" name="fileup5" /><br />
<input type="file" name="fileup6" /><br />


<label class="lbl-adduser">ایمیل کاربر : </label>
<input class="s-input" type="email" name="email" required="required" placeholder="ایمیل :" />

<label class="lbl-adduser">رمز عبور : </label>
<input class="s-input" type="password" name="userPass" required="required" placeholder="رمز عبور :" /><br />

<label class="lbl-adduser">نام : </label>
<input class="s-input" type="text" name="fname" required="required" placeholder="نام :" />

<label class="lbl-adduser">نام خانوادگی : </label>
<input class="s-input" type="text" name="lname" required="required" placeholder="نام خانوادگی :" /><br />

<label class="lbl-adduser">نام پدر : </label>
<input type="text" class="s-input" name="pname" required="required" placeholder="نام پدر :" />

<label class="lbl-adduser">کد ملی : </label>
<input type="text" class="s-input" name="cmelli" required="required" placeholder="کد ملی :" />

<label class="lbl-adduser">شماره شناسنامه : </label>
<input type="text" class="s-input" name="nshenasname" required="required" placeholder="شماره شناسنامه :" />

<label class="lbl-adduser">تاریخ تولد : </label>
<input type="text" class="s-input-day" name="roz" required="required" placeholder="روز :" />
<input type="text" class="s-input-day" name="mah" required="required" placeholder="ماه :" />
<input type="text" class="s-input-day" name="sal" required="required" placeholder="سال :" /><br />

<label class="lbl-adduser">وضعیت تاهل : </label>
مجرد <input type="radio" name="taahol" checked="checked" value="مجرد" />
متاهل <input type="radio" name="taahol" value="متاهل" />

<label style="width:110px;" class="lbl-adduser"></label>
<label class="lbl-adduser">تعداد فرزند : </label>
<input type="text" class="s-input" name="children" placeholder="تعداد فرزند :" /><br />

<label class="lbl-adduser">وضعیت نظام وظیفه : </label>
<select class="s-input" name="nvazife" >
<option value="0">---</option>
<option value="پایان خدمت">پایان خدمت</option>
<option value="معاف">معاف</option>
<option value="نرفتم">نرفتم</option>
</select>      

<label class="lbl-adduser">آخرین مدرک تحصیلی : </label>
<select class="s-input" name="mtahsil" >
<option value="0">---</option>
<option value="سیکل">سیکل</option>
<option value="دیپلم">دیپلم</option>
<option value="فوق دیپلم">فوق دیپلم</option>
<option value="لیسانس">لیسانس</option>
<option value="فوق لیسانس">فوق لیسانس</option>
<option value="دکترا">دکتری</option>
<option value="فوق دکتری">فوق دکتری</option>
</select><br />

<label class="lbl-adduser">استان محل سکونت : </label>
<input type="text" class="s-input" name="state" required="required" placeholder="استان محل سکونت :" />

<label class="lbl-adduser">شهر محل سکونت : </label>
<input class="s-input" name="city" required="required" placeholder="شهر محل سکونت :" /><br />

<label class="lbl-adduser">آدرس محل سکونت : </label>
<input type="text" class="s-input-address" name="address" required="required" placeholder="آدرس محل سکونت :" /><br />

<label class="lbl-adduser">کد پستی : </label>
<input class="s-input" type="text" name="postalcode" required="required" placeholder="کد پستی :" />

<label class="lbl-adduser">تلفن : </label>
<input class="s-input" type="tel" name="tellphone" required="required" placeholder="تلفن ثابت :" /><br />

<label class="lbl-adduser">تلفن همراه : </label>
<input class="s-input" type="tel" name="mobile" required="required" placeholder="تلفن همراه :" />

<label class="lbl-adduser">شغل : </label>
<input class="s-input" type="tel" name="shoghl" required="required" placeholder="شغل :" /><br />

<label class="lbl-adduser">سمت در شغل : </label>
<input class="s-input" type="tel" name="semat" required="required" placeholder="سمت در شغل :" />

<label class="lbl-adduser">تلفن محل کار : </label>
<input class="s-input" type="tel" name="tellkar" required="required" placeholder="تلفن محل کار :" /><br />

<label class="lbl-adduser">آدرس محل کار : </label>
<input class="s-input-address" type="tel" name="addresskar" required="required" placeholder="آدرس محل کار :" /><br />



<label class="lbl-adduser">توضیح در مورد کاربر : </label>
<textarea class="details" name="details" placeholder="توضیح کوتاه :"></textarea><br /><br />


<label class="lbl-adduser"></label><input class="s-submit" type="submit" value="ثبت کاربر" />
<input type="reset" class="s-submit" value="پاک کردن فرم" />
</form>
<div class="clear"></div>
</div>
<?php }else{ ?>
<?php redirect_to("login.php"); ?>
<?php } ?>
<?php include_once("footer.php"); ?>

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...