Laravel SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry

ich bin ganz neu in Laravel und dies ist mein erstes Projekt in Laravel.Wie üblich, zunächst einmal bin ich der Entwicklung eine vollständige Benutzer-Authentifizierung-system.Ich kann registriert einen einzelnen Benutzer senden kann Benutzer Bestätigungs-E-Mail und nach einem Klick auf diesen link kann ich aktivieren Sie ein neues Benutzerkonto, kann sich anmelden und Abmelden können.Aber nach, dass, Wann immer ich versuche, registriert eine weitere neue Benutzer-und nach einem Klick auf den Bestätigungs-link , ich bin vor eine Ausnahme, die ist,

Illuminate \ Database \ QueryException
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '' for key     'users_code_unique' (SQL: update `users` set `code` = , `active` = 1, `updated_at` = 2014-07-   25 04:26:06 where `id` = 41)

nun, dies ist mein route.php,

<?php

Route::get('/',array(
     'as'   =>'home',
     'uses' =>'HomeController@index'
     ));

Route::get('/signin',array(
    'as'        =>'signin',
    'uses'      =>'AccountController@signinGet'
    ));

Route::get('/signup',array(
    'as' => 'signup',
    'uses' => 'AccountController@signupGet'
    ));

/* 

/* 
/Authenticated Group
*/
 Route::group(array('before' => 'auth'),function(){
 /* 
 /Sign Out(GET)
*/

 Route::get('/signout',array
    (
        'as' => 'signout',
        'uses' => 'AccountController@signoutGet'
    ));

 });

/* 
/UnAuthenticated Group
*/
Route::group(array('before' => 'guest'),function(){

/* CSRF Protect*/
Route::group(array('before' => 'csrf'),function(){
        /*
        /Create Account(POST)
        */
        Route::post('/signup',array(
                'as'=> 'signup',
                'uses'=>'AccountController@signupPost'
            ));

        /*
        /Sign In(POST)
        */

        Route::post('/signin',array(
                'as' => 'signin-post',
                'uses' => 'AccountController@signinPost'
            ));
 });

 /* 
 /Sign In (GET) 
 */

 Route::get('/signin',array(
        'as' => 'signin',
        'uses' => 'AccountController@signinGet'
    ));

 /* 
 /Create Account(GET) 
 */
 Route::get('/signup',array(
        'as' => 'signup',
        'uses'=> 'AccountController@signupGet'
    ));
 Route::get('signup/account/activate/{code}',array(
        'as'        =>'activate-account',
        'uses'      =>'AccountController@activatePost'
    ));
 });
 ?>

und das ist mein AccountController

<?php

class AccountController extends \BaseController {

public function signinGet()
{
    return View::make('account.signin');
}

public function signinPost(){

    $validator = Validator::make(Input::all(),array(
            'email' => 'required|email',
            'password' => 'required'
        ));

    if($validator->fails()){
        //redirect to the signin page
        return Redirect::route('signin')
                ->withErrors($validator)
                ->withInput();
    }else{
        //Attempt user singin

        $auth = Auth::attempt(array
            (
                'email' => Input::get('email'),
                'password' => Input::get('password'),
                'active' => 1
            ));

        if($auth){
            //Redirect To intented URL
            return Redirect::intended('/');
        }
        else
        {

            return Redirect::route('signin')
                                ->with('global','The username or password you provided is wrong or account not activated!');
        }

    }

            return Redirect::route('signin')    
                                ->with('global','There is a problem Signing You in.');
}


/**
 * Show the form for creating a new resource.
 *
 * @return Response
 */

public function signupGet()
{
    return View::make('account.signup');
}

public function signupPost()
{
    $validator = Validator::make(Input::all(), array(

        'email'             => 'required|max:255|email|unique:users',
        'username'          => 'required|min:3|unique:users',
        'password'          => 'required|min:6',
        'password_again'    =>  'required|same:password'

        )
    );

    if($validator->fails())
    {
        return Redirect::route('signup')
            ->withErrors($validator)
            ->withInput();
    }else
    {
        $email          = Input::get('email');
        $username       = Input::get('username');
        $password       = Input::get('password');

        //Activation Code
        $code = str_random(60);

        $user = User::create(array(
                    'email'     => $email,
                    'username'  => $username,
                    'password'  => Hash::make($password),
                    'code'      => $code,
                    'active'    => 0                
                    )
        );

        if($user){
            //User Activation Code Creation
            Mail::send('emails.auth.activate', array('link' => URL::route('activate-account',$code), 'username' => $username),function($message) use ($user)
                {
                    $message->to($user->email,$user->username)->subject('Activate Your Account');
                });

            return Redirect::route('signup')
                            ->with('global','Your Account has been created! We have sent you an email to activate your account.Please Check the both the Inbox and Spam Folder.');

        }

    }


    //return 'This is a Post Result';
}

public function activatePost($code){

    $user = User::where('code','=',$code)->where('active','=',0);
    if($user->count()){
        $user = $user->first();

        $user->active = 1;
        $user->code = '';
        if($user->save()){
            return Redirect::route('home')
                            ->with('global','Activated!.You can sign in now!'); 
        }
    }

    else{
        return Redirect::route('signup')
                        ->with('global','Sorry!We could not activate your acount,please try again later.');
    }
}


public function signoutGet(){

    Auth::logout();
    return Redirect::route('home');
}
}
?>

und das ist mein erstellen Sie Benutzer-migration-Datei

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUsersTable extends Migration {

public function up()
{
    Schema::create('users', function(Blueprint $table)
    {
        $table->increments('id');
        $table->string('username',255)->unique();
        $table->string('email',255)->unique();
        $table->string('password',60);
        $table->string('password_temp',60);
        $table->string('code',60)->unique();
        $table->integer('active');
        $table->timestamps();
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::drop('users');
}

}
?>

- und das ist meine user.php

<?php

use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;

class User extends Eloquent implements UserInterface, RemindableInterface {


    public function getRememberToken()
    {
        return $this->remember_token;
    }

    public function setRememberToken($value)
    {
        $this->remember_token = $value;
    }

    public function getRememberTokenName()
    {
        return 'remember_token';
    }

protected $fillable = array('email','username','password','password_temp','code','active');

use UserTrait, RemindableTrait;

/**
 * The database table used by the model.
 *
 * @var string
 */
protected $table = 'users';



/**
 * The attributes excluded from the model's JSON form.
 *
 * @var array
 */
protected $hidden = array('password', 'remember_token');

}
?>

nun was ist das problem?

  • Es sieht aus wie die user->code ist nicht eindeutig. Sind Sie sicher, dass es ist? Versuchen Sie, hallte es, und vergleichen Sie, was Sie bereits in der Datenbank. Ich hatte ein Problem mal mit str_random auf winXP, in einem kurzen Zeitraum von Zeit, die es erzeugt, wird derselbe Zufalls-strings...
  • Ahh sorry, für mich war es nicht laravels 4 str_random aber eine andere Funktion, die zufällig zu mischen, aber es erzeugt die gleichen Saiten wie ich sagte.
  • dann, wie dieses problem zu lösen,haben Sie eine Lösung?
  • Nein, ich habe es gecheckt,in der Tat str_random() generieren von eindeutigen string.
  • Das ist eine Vermutung, aber ich würde versuchen, die Steigerung string limit in DB-Schemas zB. $table->string('code',256)->unique(); und sehen, ob die codes korrekt gespeichert werden
InformationsquelleAutor Tanveer | 2014-07-25
Schreibe einen Kommentar