webafra

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

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

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


لینک به پست

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

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

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

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


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

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

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


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

  • مطالب مشابه

    • توسط behnamstar
      سلام و عرض ادب
      من یه سایت وردپرسی دارم که به تازگی تغییر دامنه روش انجام دادم که بعد ازینکار مشکل عجیبی اتفاق افتاده 
      من دامنه ی https://damane1.co m رو ریدایرکت کردم به https://damane2.co m الان اتفاقی که میفته دامنه 1 ریدایرکت میشه روی دامنه 2 
      ولی زیر دامنه ها ریدایرکت نمیشن 
      مثلا روی این لینک کلیک بشه (https://damane1.co m/linksite) باید این لینک باز شه (https://damane2.co m/linksite)
      ولی این لینکها جدا جدا باز میشن 
      فقط دامنه https://damane1.co m روی https://damane2.co m ریدایرکت میشه بقیه ی لینک ها همه جدا جدا باز میشن.
      ممنون میشم از دوستان کمک کنن 
      حتی به هاست پشتیبانی هم تیکت دادم ولی متوجه مشکل نشدن.
    • توسط Timecity.ir
      سلام دوستان خسته نباشید . 
      من یک « پک فونت ایران سنس » خریداری کردم ، اما نمیدونم چجوری باید روی قالب وردپرس نصبش کنم .
      یه بار امتحان کردم سایت ارور مرگ صفحه سفید داد و با کلی تلاش تونستم آخرین بک آپی که داشتم رو اجرا کنم . 
      ممنون میشم اگه کسی راهنمایی کنه چجوری این فونت رو نصب کنم .
    • توسط nnmmss
      سلام
      من كاملا در وردپرس تازه كار هستم. سايتي با پوسته RealNews طراحي شده. منوهايي دارم كه داراي منو و زير منو هستند. وقتي يك نوشته را به زير منو اختصاص ميدم بعد روي منو ميروم كليه نوشته هاي زير منو را هم نشان ميدهد. مثلا من به اين صورت است
      منو1
      زيرمنو 1-1
      زير منو1-2
       
      من اگر روي زير منو 1-1 كليك كنم فقط نوشته هاي زير منو 1-1 را نشان ميده ولي وقتي روي منو1 كليك كنم تمام نوشته هاي منو1   ,    زيرمنو1-1 و زيرمنو1-2 را نشان ميدهد. چطور ميتوانم اين موضوع را تصحيح كنم كه با كليك كردن روي منو1 فقط نوشته مربوط به منو1 را نشان دهد
    • توسط rendesharif
      با سلام 
      24 ساعت پیش در حال آپدیت تب های وبسایت بودم که اینترنت قطع شد و هنگامی که سعی کردم دوباره وارد کنترل پنل بشم دیدم صفحات ساختار خودشون رو از دست دادن و به نحوی بصورت لایت بارگزاری میشن برای حل این مشکل چیکار میتونم بکنم آیا راه حلی هست.
      تصویر قسمت لاگین هم اضافه کردم میتونید ببینید که دیگه خبری از ساختار اصلی نیست در مابقی صفحات کنترل پنل هم به همین شکل هست

    • توسط naff
      سلام.
      من  میخوام یه صفحه ی استاتیک رو روی ftp  آپلود کنم به عنوان  index اصلی و بعد از کلیک روی دکمه ی مورد نظر کاربر منتقل بشه به سایت اصلی یا همون قالب وردپرس.
       مشکل اینجاست که وقتی صفحه ی  html  رو روی  ftp  آپلود میکنم سایت فقط این صفحه رو به عنوان  index  میشناسه و  این رو جایگزین  index وردپرس میکنه و این صفحه  رو  front page  میشناسه.
       در صورتی که من هر دوتاش رو  میخوام . و صفحه ی html  رو به عنوان  index  میخوام یعنی با وارد کردن اسم سایت اسن صفحه ظاهر بشه.
      صفحه ی اچ دی ام ال:
      https://altourneur.com/new.html
       صفحه ی اصلی سایت:
      https://altourneur.com