dodgy

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

6 پست در این موضوع قرار دارد

ارسال شده در (ویرایش شده)

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

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

من یه فرم دارم که یه تعداد مشخصی آپلودر ( 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
0

به اشتراک گذاری این پست


لینک به پست

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

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

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

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

1

به اشتراک گذاری این پست


لینک به پست

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

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

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

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

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

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

0

به اشتراک گذاری این پست


لینک به پست

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

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

آرایه ی

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


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

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

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

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

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

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

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

2

به اشتراک گذاری این پست


لینک به پست

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

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

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

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

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

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

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

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

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

گیج شدم :D

0

به اشتراک گذاری این پست


لینک به پست

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


<?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"); ?>

0

به اشتراک گذاری این پست


لینک به پست

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری

  • مطالب مشابه

    • توسط Mr Mirzaei
      سلام
      کد مطالب تصادفی توی وبلاگ های میهن بلاگ چیه؟
      اگه کسی میدونه لطفا بگه خیلی گیرم
      کد بیشترین بازدید چیه توی مطالب؟
      سریع بگید
    • توسط asghar
      سلام
      من یک سایت وردپرسی دارم که خیلی دیر لود میشه 
      میخواستم بدونم برای رفعش باید چی کار کنم؟
      آدرس سایت https://www.hairent.com
       
    • توسط cheeta
      با سلام خدمت اساتید گل وردپرس
      من برای فروش از افزونه edd و با قالب دستکاری شده صحیفه کار میکنم. مشکلی که دارم اینه مه وقتی به عنوان مدیر خرید میکنم تمام مراحل تا پس از پرداخت تا اخر اجرا میشه اما وقتی با نقش های کاربری دیگه از جمله مشترک خرید میکنم وقتی در صفحه سبد خرید روی " خرید و دانلود " کلیک میکنم هیچ اتفاقی نمی افته. یعنی به صفحه پرداخت نمیره و البته هیچ خطایی هم نمیده.
      با عوض کردن قالب مشکل حل میشه اما می خوام مشکل رو در همین قالب بر طرف کنم. چطور میشه این محدودیت رو برای سایر نقش های کاربری برداشت؟ کی چیزی در این زمینه هست؟
    • توسط saeid1872
      سلام دوستان
      تو کمتر از یک ماه سایتم 61 ارور 500 ثبت کرده که در حال زیاد شدن هستش نمیدونم چرا این ارورهارو ثبت میکنه
      لطفا دلیلش رو بگید و اینکه چطور باید رفع کنم
      من خیلی اصلا حرفه ای نیستم فقط خواهشا جوری راهنمایی کنید که بتونم رفعش کنم.

    • توسط hamid.he
      سلام بر دوستان .
      يك سايت با استفاده از قالب هاي آماده روي لوكال هاست طراحي كرده ام تصميم گرفت بقيه كار سايت را بعد از انتقال بر روي هاست انجام دهم . خودم بلد نبودم سايت را به هاست منقل كنم از دوستي خواهش كردم انجام دهد . منتها بعد از انتقال به هاست اولا صفحه به هم ريخته و نادرست است . عكس ها نمي آيند و هم چنين روي هر لينك و يا منويي كليك مي كنيم صفحه به لوكال هاست مي خواهد برود و براي همين چيزي بالا نمي آيد . آدرس سايت : www.behinja.com  مي باشد كه مي توانيد مشاهده . چگونه مي شود اين مشكل را رفع كرد . پيشاپيش از پاسخ گويي دوستان تشكر مي كنم