زمان جاری: 2012/02/06, 04:49 PM خوش آمدید مهمان گرامی! (ورودعضویت)



ایجاد رکورد جدید بجای بروزرسانی اطلاعات


ارسال موضوع  ارسال پاسخ 
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
رتبه موضوع:
 
ایجاد رکورد جدید بجای بروزرسانی اطلاعات
نویسنده پیام
alisniper آفلاین
تازه کار
*

ارسال‌ها: 32
تاریخ عضویت: Jun 2010
رتبه: 0
تشکر: 7
6 بار تشکر شده در 4 پست
ارسال: #1
ایجاد رکورد جدید بجای بروزرسانی اطلاعات
دوستان من جدول کاربران دارم .
زمانی که به کاربر فرم ویرایش رو میدم ، وقتی کاربر میخواد رمزشو تغییر بده یه رکورد جدید براش ایجاد میکنه . البته من cake رو تازه شروع کردم و اگه کدنویسم صحیح نیست بفرمایید .
سورس کد تابع ویرایش کاربر :
کد PHP:
function edit() {
        if (!empty(
$this->data))
            {
                
$id $this->Session->read('Auth.User.id') ;
                
$userxx =  $this->User->find('all' , array( 'conditions' => array( 'id' => $id) ));
                
//print_r($user);
                //== ذخیره اطلاعات در صورتی که شخص فقط نمیخواهد رمز را تغییر دهد
                
if ( (trim($this->data['User']['lastpassword']) == '') && (trim($this->data['User']['newpassword1'] )== '') && (trim($this->data['User']['newpassword2'] )== ''))
                {
                        
$this->data['User']['password'] = $userxx['0']['User']['password'];
                        if (
$this->User->save($this->data))
                        {
                            
$this->Session->setFlash(__('اطلاعات شما بروزرسانی گردید .',true));
                            
$this->redirect('/');
                        }
                }
                else
                {
                    if (((
md5($this->data['User']['lastpassword'])) == $userxx['0']['User']['password']))
                    {
                        if (
$this->data['User']['newpassword1'] == $this->data['User']['newpassword2'])
                        {
                            
//$this->data['User']['password'] = md5($this->data['User']['newpassword1']);
                            
$this->data['User']['password'] = md5($this->data['User']['newpassword1']);
                            if (
$this->User->save($this->data))
                            {
                                
$this->Session->setFlash(__('اطلاعات شما بروزرسانی گردید .',true));
                                
$this->redirect('/');
                            }
                        }
                        else 
                        {
                            
$this->Session->setFlash(__('کلمه عبور جدید با تکرار کلمه عبور جدید یکسان نیست ! .',true));
                        }
                    }
                    else 
                    {
                        
$this->Session->setFlash(__('کلمه عبور قبلی وارد شده نادرست است .',true));
                    }
                }
                
            }
        
//==
        
if (empty($this->data))
        {
            
//$this->Session->read('Auth.User.id')
            
$this->data  $this->User->read(null,$this->Session->read('Auth.User.id'));
            
//$this->data = $this->Amarlist->read(null, $id);
        
}
    } 
2010/07/21 04:10 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
chalist آفلاین
تازه کار
*

ارسال‌ها: 48
تاریخ عضویت: Jan 2010
رتبه: 0
تشکر: 51
14 بار تشکر شده در 15 پست
ارسال: #2
RE: ایجاد رکورد جدید بجای بروزرسانی اطلاعات
منم مشکلم همینه

ز باغ پیرهنت چون دریچه ها وا شد - بهشت گمشده پشت دریچه پیدا شد
رها ز سلطه ی پاییز، در بهار اتاق - گلی به نام تو در بازوان من وا شد
به دیدن تو همه ذره های من شد چشم - و چشم ها همه سر تا به پا تماشا شد
شتاب خواستنت این چنین که می بالد - به دیدن تو مگر می توان شکیبا شد
پدرغزل معاصر ایران - حسین منزوی
2010/07/21 04:30 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 666
تاریخ عضویت: Dec 2009
رتبه: 9
تشکر: 246
459 بار تشکر شده در 351 پست
ارسال: #3
RE: ایجاد رکورد جدید بجای بروزرسانی اطلاعات
خوب شما تقریبا پیچوندی کدهاتون رو یا در واقع بهینه ننوشتن

قبل از اینکه توضیح بدم مشکلتون کجاست. لطفا در ابتدا اکشن یک pr($this->date); بگیرید و بعد از هر ->save هم یک pr($this->date); دیگه بگیرید تا به صورت کلی مشکلتون رو بگم تا در موارد دیگه از این نوع مشکلی ایجاد نشه واستون
2010/07/21 04:55 AM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
alisniper آفلاین
تازه کار
*

ارسال‌ها: 32
تاریخ عضویت: Jun 2010
رتبه: 0
تشکر: 7
6 بار تشکر شده در 4 پست
ارسال: #4
RE: ایجاد رکورد جدید بجای بروزرسانی اطلاعات
با سلام . در شروع اکشن چیزی نشون نمیده اما در لحظه ذخیره اطلاعات ذیل مشاهده میشه :
کد PHP:
Array
(
    [
User] => Array
        (
            [
email] => noori22@yahoo.com
            
[lastpassword] => 5
            
[newpassword1] => test
            
[newpassword2] => test
            
[password] => 4e44f1ac85cd60e3caa56bfd4afb675e
        
)

)

Array
(
    [
User] => Array
        (
            [
email] => noori22@yahoo.com
            
[lastpassword] => 5
            
[newpassword1] => test
            
[newpassword2] => test
            
[password] => 098f6bcd4621d373cade4e832627b4f6
        
)

)
Warning (2): Cannot modify header information 
headers already sent by (output started at E:\xampp\cake\cake\basics.php:355)
 [
CORE\cake\libs\controller\controller.phpline 746
(آخرین تغییر در این ارسال: 2010/07/21 08:33 AM توسط alisniper.)
2010/07/21 08:30 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 666
تاریخ عضویت: Dec 2009
رتبه: 9
تشکر: 246
459 بار تشکر شده در 351 پست
ارسال: #5
RE: ایجاد رکورد جدید بجای بروزرسانی اطلاعات
خوب امکان نداره که در ورودی هیچ چیزی نباشد. چون شما در یک حالت طرف داره مشخصاتش رو تغییر میده. پس باید تو فروم یک سری داده بیاد

این مورد رو بگید که فرومتون شامل چه فیلد هایی هست کد فرمتون رو هم بزارید
2010/07/21 12:45 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
alisniper آفلاین
تازه کار
*

ارسال‌ها: 32
تاریخ عضویت: Jun 2010
رتبه: 0
تشکر: 7
6 بار تشکر شده در 4 پست
ارسال: #6
RE: ایجاد رکورد جدید بجای بروزرسانی اطلاعات
کد فرم :
کد PHP:
<?php
    
echo $this->Form->create('User');
    
?>
    <fieldset>
         <legend><?php __('ويرايش مشخصات'); ?></legend>
    <?php
        
echo "<br><br>نام و نام خانوادگی&nbsp;:&nbsp;".$this->Session->read('Auth.User.first_name').
"&nbsp;".$this->Session->read('Auth.User.last_name');
        echo 
"<br><br>آدرس ایمیل :<br><br>";
        echo 
$this->Form->text('email');
        echo 
"<br><br>کلمه عبور قبلی : <br><br>";
        echo 
$this->Form->password('lastpassword');
        echo 
"<br><br>کلمه عبور جدید: <b>(کلمه عبور جدید خود را در این قسمت وارد نمایید)</b><br><br>";
        echo 
$this->Form->password('newpassword1');
        echo 
"<br><br>تکرار کلمه عبور جدید: <b>(کلمه عبور جدید خود را مجدادا در این قسمت وارد نمایید)</b><br><br>";
        echo 
$this->Form->password('newpassword2');
        echo 
$this->Form->hidden('password');
        echo 
$this->Form->end(__('ذخیره سازی تغییرات'true));
    
?>
</fieldset> 

البته موقتا با کد زیر حلش کردم ، اما دوست دارم با روش منطقی "کیک" حل بشه !
کد PHP:
function edit() {
        
//==
        
if (empty($this->data))
        {
            
$this->data  $this->User->read(null,$this->Session->read('Auth.User.id'));
        }
        else 
        {
            
                
$id $this->Session->read('Auth.User.id') ;
                
$userxx =  $this->User->find('all' , array( 'conditions' => array( 'id' => $id) ));

                
//== ذخیره اطلاعات در صورتی که شخص فقط نمیخواهد رمز را تغییر دهد
                
if ( (trim($this->data['User']['lastpassword']) == '') && (trim($this->data['User']['newpassword1'] )== '') && (trim($this->data['User']['newpassword2'] )== ''))
                {
                        
                        
$pid $this->Session->read('Auth.User.username') ;
                        
$mail $this->data['User']['email'] ;

                        if (
$this->User->Query("update users set email='$mail' where username = $pid"));
                        {
                            
$this->Session->setFlash(__('اطلاعات شما بروزرسانی گردید .',true));
                            
$this->redirect('/');
                        }
                }
                else
                {
                    if (((
md5($this->data['User']['lastpassword'])) == $userxx['0']['User']['password']))
                    {
                        if (
$this->data['User']['newpassword1'] == $this->data['User']['newpassword2'])
                        {
                            
$this->data['User']['password'] = md5($this->data['User']['newpassword1']);
                            
$pid $this->Session->read('Auth.User.username') ;
                            
$mail $this->data['User']['email'] ;
                            
$changepass md5($this->data['User']['newpassword1']) ;
                            if (
$this->User->Query("update users set email='$mail',password='$changepass' where username = $pid"));
                            {
                                
$this->Session->setFlash(__('اطلاعات شما بروزرسانی گردید .',true));
                                
$this->redirect('/');
                            }
                        }
                        else 
                        {
                            
$this->Session->setFlash(__('کلمه عبور جدید با تکرار کلمه عبور جدید یکسان نیست ! .',true));
                        }
                    }
                    else 
                    {
                        
$this->Session->setFlash(__('کلمه عبور قبلی وارد شده نادرست است .',true));
                    }
                }
                
            
        }

    } 
(آخرین تغییر در این ارسال: 2010/07/22 12:08 AM توسط alisniper.)
2010/07/22 12:02 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
parsig آفلاین
Super Moderator
******

ارسال‌ها: 218
تاریخ عضویت: Jan 2010
رتبه: 5
تشکر: 78
224 بار تشکر شده در 117 پست
ارسال: #7
RE: ایجاد رکورد جدید بجای بروزرسانی اطلاعات
مشکل اینجاست که شما آی دی یوزر رو به مدل پاس نمی کنید
زمانی که آی دی نباشه رکورد جدید ایجاد می شه ولی اگه آی دی رو هم پاس کنید (از سشن بخونید و پاس کنید) بر مبنای رکورد با آی دی آپدیت می کنه

[تصویر: ubuntu2_userbar.gif]
2010/07/22 12:09 AM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : alisniper
alisniper آفلاین
تازه کار
*

ارسال‌ها: 32
تاریخ عضویت: Jun 2010
رتبه: 0
تشکر: 7
6 بار تشکر شده در 4 پست
ارسال: #8
RE: ایجاد رکورد جدید بجای بروزرسانی اطلاعات
کاملا درست بود . مرسی .
طریقه رفع این مشکل برای دوستان که ممکنه بعدا این تاپیک رو بخونن .
در کد زیر قبل از ذخیره سازی id شخص رو به مدل مرتبط میکنیم :
کد PHP:
$id $this->Session->read('Auth.User.id') ;
$this->User->id $id ;
if (
$this->User->save($this->data))
{
$this->Session->setFlash(__('اطلاعات شما بروزرسانی گردید .',true));
$this->redirect('/');


در پایان کد نهایی فرم ، کنترلر و بانک رو اینجا بزارم و دوستان اگه جایش اشکال داره بفرمایید اصلاح کنم .

تابع ویرایش در کنترلر user :

کد PHP:
function edit() {
        
$id $this->Session->read('Auth.User.id') ;
        
//==
        
if (empty($this->data))
        {
            
$this->data  $this->User->read(null,$this->Session->read('Auth.User.id'));
        }
        else 
        {
$userinfo =  $this->User->findById($id);
                if ( ((
trim($this->data['User']['lastpassword']) != '') &&
 (
trim($this->data['User']['newpassword1'] )== '')) ||
 ((
trim($this->data['User']['lastpassword']) != '') &&
 (
trim($this->data['User']['newpassword2'] )== '')))
                {
 
$this->Session->setFlash(__('لطفا کلمه عبور جدید را وارد نمایید .',true));
                    
                }
                elseif     ( (
trim($this->data['User']['lastpassword']) == '') && (trim($this->data['User']['newpassword1'] )== '') && (trim($this->data['User']['newpassword2'] )== ''))
                {
                        
//== ذخیره اطلاعات در حالی که شخص نمیخواهد رمز را تغییر دهد
                        
$this->data['User']['password'] = $userinfo['User']['password'];
                        
$this->User->id $id ;
                        if (
$this->User->save($this->data))
                        {
                            
$this->Session->setFlash(__('اطلاعات شما بروزرسانی گردید .',true));
                            
$this->redirect('/');
                        }
                }
                else
                {
                    
//== ذخیره اطلاعات در حالی که شخص میخواهد رمز را تغییر دهد
                    //بررسی یکسان بودن رمز قبلی وارد شده در فرم با رمز موجود در جدول
                    
if (((md5($this->data['User']['lastpassword'])) == $userinfo['User']['password']))
                    {
                        
//بررسی یکسان بودن رمز جدید با تکرار رمز جدید
                        
if ($this->data['User']['newpassword1'] == $this->data['User']['newpassword2'])
                        {
                            
$this->data['User']['password'] = md5($this->data['User']['newpassword1']);
                            
$this->User->id $id ;
                            if (
$this->User->save($this->data))
                            {
                                
$this->Session->setFlash(__('اطلاعات شما بروزرسانی گردید .',true));
                                
$this->redirect('/');
                            }
                        }
                        else 
                        {
                            
$this->Session->setFlash(__('کلمه عبور جدید با تکرار کلمه عبور جدید یکسان نیست ! .',true));
                        }
                    }
                    else 
                    {
                        
$this->Session->setFlash(__('کلمه عبور قبلی وارد شده نادرست است .',true));
                    }
                }
                
            
        }

    } 

view ویرایش کاربر :
کد PHP:
<?php
    
echo $this->Form->create('User');
?>
    <fieldset>
         <legend><?php __('ويرايش مشخصات'); ?></legend>
    <?php
        
echo "<br><br>نام و نام خانوادگی&nbsp;:&nbsp;".
$this->Session->read('Auth.User.first_name').
"&nbsp;".$this->Session->read('Auth.User.last_name');
        echo 
"<br><br>آدرس ایمیل :<br><br>";
        echo 
$this->Form->text('email');
        echo 
"<br><br>کلمه عبور قبلی : <br><br>";
        echo 
$this->Form->password('lastpassword');
        echo 
"<br><br>کلمه عبور جدید: <b>(کلمه عبور جدید خود را در این قسمت وارد نمایید)</b><br><br>";
        echo 
$this->Form->password('newpassword1');
        echo 
"<br><br>تکرار کلمه عبور جدید: <b>(کلمه عبور جدید خود را مجدادا در این قسمت وارد نمایید)</b><br><br>";
        echo 
$this->Form->password('newpassword2');
        echo 
$this->Form->hidden('password');
        echo 
$this->Form->end(__('ذخیره سازی تغییرات'true));
    
?>
</fieldset> 

ساختار دیتابس کاربران :
کد:
CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) COLLATE utf8_persian_ci NOT NULL,
  `password` varchar(32) COLLATE utf8_persian_ci NOT NULL,
  `first_name` varchar(255) COLLATE utf8_persian_ci NOT NULL,
  `last_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `email` varchar(255) COLLATE utf8_persian_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci  ;
(آخرین تغییر در این ارسال: 2010/07/22 02:19 AM توسط alisniper.)
2010/07/22 01:23 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : saleh
saleh آفلاین
Administrator
*******

ارسال‌ها: 666
تاریخ عضویت: Dec 2009
رتبه: 9
تشکر: 246
459 بار تشکر شده در 351 پست
ارسال: #9
RE: ایجاد رکورد جدید بجای بروزرسانی اطلاعات
روش صحیح و استاندارد به صورت زیر هست

کد PHP:
// view

<?php echo $this->Form->create('User'); ?>
<fieldset>
    <legend><?php __('ويرايش مشخصات'); ?></legend>
    <?php
        
echo "<br><br>نام و نام خانوادگي&nbsp;:&nbsp;".
$this->Session->read('Auth.User.first_name').
"&nbsp;".$this->Session->read('Auth.User.last_name');
        echo 
"<br><br>آدرس ايميل :<br><br>";
        echo 
$this->Form->text('email');
        echo 
"<br><br>کلمه عبور قبلي : <br><br>";
        echo 
$this->Form->password('lastpassword');
        echo 
"<br><br>کلمه عبور جديد: <b>(کلمه عبور جديد خود را در اين قسمت وارد نماييد)</b><br><br>";
        echo 
$this->Form->password('newpassword1');
        echo 
"<br><br>تکرار کلمه عبور جديد: <b>(کلمه عبور جديد خود را مجدادا در اين قسمت وارد نماييد)</b><br><br>";
        echo 
$this->Form->password('newpassword2');
        echo 
$this->Form->submit(__('ذخيره سازي تغييرات'true));
    
?>
</fieldset> 


// controller

function edit() {
        $this->User->id = $this->Session->read('Auth.User.id') ;
 
         if ($this->User->save($this->data)) {
               $this->Session->setFlash(__('اطلاعات شما بروزرساني گرديد .',true));
               $this->redirect('/');
        }
}


//model


 var $validate = array(
    'email'     => array(
            'emailRule-1' => array(
              'rule'    => 'notEmpty',
              'message' => 'ايميل خود را وارد کنيد'
            ),
            'emailRule-2' => array(
              'rule'    => array('email', true),,
              'message' => 'ايميل معتبر نمي باشد.'
            ),
    ),
    'lastpassword'  => array(
        'rule' => 'CheckCurrentPassword',
        'message' => 'پسورد فعلي شما صحيح نمي باشد.'
    ),
    'newpassword2' => array(
              'rule'    => 'CheckNewPassword',
              'message' => 'رمز عبور جديد با تکرار يکسان نمي باشد'
            ),

); 


function CheckCurrentPassword(){
    if (empty ($this->data['User']['lastpassword'])){
       unset($this->data['User']['lastpassword'] );
       return true;
    }
    $User = $this->findByid( $this->id );
    if ( md5( $User['User']['lastpassword'] ) ==  $this->data['User']['lastpassword'] ) return true;
    return false;
}



function CheckNewPassword(){
    if (  empty($this->data['User']['newpassword1']) and empty($this->data['User']['newpassword2'])){
       unset( $this->data['User']['newpassword1'] , $this->data['User']['newpassword2']);
       return true;
    }
    
    if (  $this->data['User']['newpassword1'] == $this->data['User']['newpassword2'] ){
       $this->data['User']['newpassword1'] = md5($this->data['User']['newpassword1']); 
       $this->data['User']['newpassword2'] = md5($this->data['User']['newpassword2']);
       return true;
    }
    
    return false


(آخرین تغییر در این ارسال: 2010/07/22 05:09 AM توسط saleh.)
2010/07/22 05:09 AM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : alisniper payamsp
alisniper آفلاین
تازه کار
*

ارسال‌ها: 32
تاریخ عضویت: Jun 2010
رتبه: 0
تشکر: 7
6 بار تشکر شده در 4 پست
ارسال: #10
RE: ایجاد رکورد جدید بجای بروزرسانی اطلاعات
Shy خیلی خیلی عالی بود . مرسی .
2010/07/22 10:40 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
alisniper آفلاین
تازه کار
*

ارسال‌ها: 32
تاریخ عضویت: Jun 2010
رتبه: 0
تشکر: 7
6 بار تشکر شده در 4 پست
ارسال: #11
RE: ایجاد رکورد جدید بجای بروزرسانی اطلاعات
در مورد این قسمت در مدل یک توضیح میدید ؟
کد PHP:
function CheckCurrentPassword(){
    if (empty (
$this->data['User']['lastpassword'])){
       unset(
$this->data['User']['lastpassword'] );
       return 
true;
    }
    
$User $this->findByid$this->id );
    if ( 
md5$User['User']['lastpassword'] ) ==  $this->data['User']['lastpassword'] ) return true;
    return 
false;

2010/07/23 07:16 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
parsig آفلاین
Super Moderator
******

ارسال‌ها: 218
تاریخ عضویت: Jan 2010
رتبه: 5
تشکر: 78
224 بار تشکر شده در 117 پست
ارسال: #12
RE: ایجاد رکورد جدید بجای بروزرسانی اطلاعات
این یک ولیدیشن کاستومایز هست .
کارش اینه که اگر پسوردی تا حالا ست نشده باشه یا اینکه پسورد جاری با پسورد جاری وارد شده برابری داشت true برگردونه در غیر این صورت false برگردونه .
اسم تابع به عنوان rule در ولیدیشن استفاده می شه .

[تصویر: ubuntu2_userbar.gif]
2010/07/23 07:26 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : alisniper
alisniper آفلاین
تازه کار
*

ارسال‌ها: 32
تاریخ عضویت: Jun 2010
رتبه: 0
تشکر: 7
6 بار تشکر شده در 4 پست
ارسال: #13
RE: ایجاد رکورد جدید بجای بروزرسانی اطلاعات
خیلی ممنون . حالا مشکلی که هست نمیدونم چرا پیام های Validator در هنگام بروز تغایر با Rule ها نمایش داده نمیشن !!!
2010/07/23 08:55 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 666
تاریخ عضویت: Dec 2009
رتبه: 9
تشکر: 246
459 بار تشکر شده در 351 پست
ارسال: #14
RE: ایجاد رکورد جدید بجای بروزرسانی اطلاعات
یک نکته رو فراموش کردم
بجای
کد PHP:
if ($this->User->save($this->data)) { 

این رو قرار بدید
کد PHP:
if ($this->User->save($this->data,true)) { 
2010/07/23 09:43 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
alisniper آفلاین
تازه کار
*

ارسال‌ها: 32
تاریخ عضویت: Jun 2010
رتبه: 0
تشکر: 7
6 بار تشکر شده در 4 پست
ارسال: #15
RE: ایجاد رکورد جدید بجای بروزرسانی اطلاعات
اینکار رو هم کردم ولی باز هم پیام های Validator رو نشون نمیده ، یعنی عملیات ثبت اطلاعات رو طبق Rule ها متوقف میکنه اما پیام اخطار رو نشون نمیده !!!
(آخرین تغییر در این ارسال: 2010/07/24 12:06 AM توسط alisniper.)
2010/07/24 12:05 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 666
تاریخ عضویت: Dec 2009
رتبه: 9
تشکر: 246
459 بار تشکر شده در 351 پست
ارسال: #16
RE: ایجاد رکورد جدید بجای بروزرسانی اطلاعات
کنترلر مربوطه با مودل و ویو ها و app_controller رو آپلود کنید
2010/07/24 05:09 AM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
alisniper آفلاین
تازه کار
*

ارسال‌ها: 32
تاریخ عضویت: Jun 2010
رتبه: 0
تشکر: 7
6 بار تشکر شده در 4 پست
ارسال: #17
RE: ایجاد رکورد جدید بجای بروزرسانی اطلاعات
باتشکر ، فایل ها رو آپلود کردم .


فایل‌های ضمیمه
.zip  upload.zip (اندازه: 9.92 KB / دانلودها: 3)
2010/07/24 07:54 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 666
تاریخ عضویت: Dec 2009
رتبه: 9
تشکر: 246
459 بار تشکر شده در 351 پست
ارسال: #18
RE: ایجاد رکورد جدید بجای بروزرسانی اطلاعات
خیلی باحال بود. تا الان همچین کدی با کیک ندیده بودم Tongue

دوست من متاسفانه باید بگم کد های شما از پایه اشتباهه.

ببینید وقتی یک ابزاری دست میشه. یک سری قوانین و متد ها داره که برای استفاده از اون باید از این قوانین پیروی کرد

یا طوری برخورد کرد که از این قوانین نافرمانی نکرده باشید.

شما کلا قوانین کیک و mvc , orm رو زیر پا گزاشتید. در اصل باید بگم که اگر میخواهید به صورت غیر شی گرایی کد نویسی کنید. چرا از فریم ورک استفاده میکنید؟

فقط میتونم به چند اشتباه تون اشاره کنم!!

1- بهتر هست شما تمامی موارد لازم کامپوننت Auth رو انجام بدید. مثلا نوع چک کردن سطح دست رسی، فیلد های که باید برای لوگین استفاده بشند.
2- زمانی که شما از این کامپننت استفاده میکنید. اگر فیلد پسورد با دیتابیس یکی باشه خودش دیکد میکنه و چک میکنه. و اصلا نیاد به کدی جهت جک کردن نیست.

3- این همه کوئری دستی برای چیه؟. مگر orm کیک نیست؟ درسته کارتون به نوعی خاص هست و روتین نیست. اما با یک-دو کوئری میشه تموم کارهای که میخواهید رو انجام بدید.
4- از این همه شرط خسته نشدید؟چرا می خواهید چند عمل رو در یک زمان انجام بدید. پیشنهاد میکنم. چند مرحله ای کنید. یعنی اگر کاربر نتونست وارد سیستم بشه وارد یک اکشن دیگه بشه و عمل انتقال و ایجاد پسورد رو انجا انجام بدید.

اکشن لوگین توسط کامپوننت کنترل میشه حالا اگر میخواهد این تابع رو overwrite کنید باید بدونید چه برگردونید به این کامپوننت.

5- شما اکشن لوگین رو هم allow نکردین

6- بعدی ها از تیبل dlst میخواهید استفاده کنید دیگه . خوب چرا مودال تعریف نکردید. چرا اسمش استاندارد نیست

و .....

اما تلاشتون تحسین برانگیزه . تبریک میگم
2010/07/24 08:40 AM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
alisniper آفلاین
تازه کار
*

ارسال‌ها: 32
تاریخ عضویت: Jun 2010
رتبه: 0
تشکر: 7
6 بار تشکر شده در 4 پست
ارسال: #19
RE: ایجاد رکورد جدید بجای بروزرسانی اطلاعات
از راهنمایی های شما بسیار سپاسگذارم . سعی میکنم وقت بیشتری روی شی گرایی و اشتباهاتی که کردم بذارم .
حق بدید که تازه کار هستم و به کمک دوستان و اساتید خوبی مثل شما نیاز دارم . اما نکته آخر اینکه مشخص نشد چرا پیام Validator نمایش داده نمیشه !!! ؟
2010/07/24 11:01 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
alisniper آفلاین
تازه کار
*

ارسال‌ها: 32
تاریخ عضویت: Jun 2010
رتبه: 0
تشکر: 7
6 بار تشکر شده در 4 پست
ارسال: #20
RE: ایجاد رکورد جدید بجای بروزرسانی اطلاعات
2
نقل قول:- زمانی که شما از این کامپننت استفاده میکنید. اگر فیلد پسورد با دیتابیس یکی باشه خودش دیکد میکنه و چک میکنه. و اصلا نیاد به کدی جهت جک کردن نیست.
متوجه منظورتون نمیشم ! . چطور میتونه الگوریتم MD5 رو دیکد کند و چک کنه ! . من در زمان ویرایش اصلا فیلد پسورد رو نیاوردم . بخاطر اینکه موقعی که اطلاعات رو بارگذاری میکنم فیلد پسورد رو با حروف ستاره دار پر میکنه که اگه کاربر بدون هیچ تغییری ذخیره رو بزنه میاد دوباره اون اطلاعات رو MD5 میکنه و مشکل در پسورد ایجاد میکنه .
بخاطر همین فیلد دیگه ای رو در نظر گرفتم و هنگام ذخیره سازی اطلاعات بررسی رو انجام دادم . حالا اگه روش دیگه ای وجود داره بفرمایید تا من اصلاح کنم .
2010/07/25 12:17 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
ارسال موضوع  ارسال پاسخ 


پرش در انجمن: