2017-10-25 20 views
1

Ich bekomme diesen Fehler immer, wenn ich versuche, die Upload-Seite einzugeben.Undefinierte Variable: Benutzer Laravel

Kann jemand helfen?

Ich habe bereits den kompakten Teil gemacht, um sicherzustellen, dass die Variable an die Ansicht weitergegeben wird und auch meine Route sollte in Ordnung sein, denke ich.

habe ich versucht, mit dd aber alles ist mir der Fehler tut halten

Fehler bei zeigt: Nicht definierte Variable: Benutzer (Ansicht: C: \ xampp \ htdocs \ Bewertung \ resources \ Ansichten \ upload.blade.php)

Hier sind meine Codes:

upload.blade.php

<form class="form-horizontal" method="post" action="{{ url('/userUpload')}}" enctype="multipart/form-data"> 

    {{ csrf_field() }} 

    <input type="hidden" name="user_id" value="{{$user->id}}"> 
    <div class="form-group"> 
     <label for="imageInput" class="control-label col-sm-3">Upload Image</label> 
     <div class="col-sm-9"> 
      <input type="file" name="file"> 

     </div> 
    </div> 

    <div class="form-group"> 
     <div class="col-md-6-offset-2"> 
      <input type="submit" class="btn btn-primary" value="Save"> 
     </div> 
    </div> 
</form> 

UploadController:

public function upload(){ 

    return view(‘upload’); 
} 

public function store(Request $request,$id){ 

    $this->validate($request, [ 
     'file' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 
    ]); 

    var_dump('has file '.$request->hasFile('file')); 
    if ($request->hasFile('file')) { 
     $image = $request->file('file'); 
     $name = $image->getClientOriginalName(); 
     $size = $image->getClientSize(); 
     $id = $request->user_id; 
     $destinationPath = public_path('/images'); 
     $image->move($destinationPath, $name); 

     $Image = new Image; 
     $Image->name = $name; 
     $Image->size = $size; 
     // $Image->user_id = $id;   
     //$Image->save(); 
      $user->find($id); 
       dd($user); 
     $user->Images()->save($Image); 
    } 
    return redirect('/home'); 
} 

public function test(){ 
    $user = user_information::where('id')->get(); 
    return view('upload', compact('user')); 
} 

Route: (dies ist meine Strecke)

Route::get('/UploadUser/upload','[email protected]’); 
Route::post('/UploadUser','[email protected]'); 
Route::post('/UploadUser/upload', '[email protected]'); 

Eine andere Frage: Ich erhalte immer diese Fehlermeldung, wenn ich versuche, eine Datei zu laden, also was soll ich tun? Hier

ist der Fehler:

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (form . images , CONSTRAINT images_user_id_foreign FOREIGN KEY (user_id) REFERENCES usere_information (id)) (SQL: insert into images (name , size , user_id , updated_at , created_at) values (download.png, 4247, 1, 2017-10-25 08:54:57, 2017-10-25 08:54:57))

Bild Modell:

class Image extends Model 
{ 

    protected $fillable = array('name','size','user_id'); 

    public function user_informations() { 
     return $this->belongsTo('App\user_information', 'user_id', 'id'); 
    } 
} 

Bilder Tabelle:

Schema::create('images', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('name'); 
     $table->string('size'); 
     $table->integer('user_id')->unsigned(); 
     $table->foreign('user_id')->references('id')->on('user_informations'); 
     $table->timestamps(); 
    }); 

User_information Tabelle:

Schema::create('user_informations', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->engine = 'InnoDB'; 
      $table->binary('signature'); 
      $table->String('Name'); 
      $table->timestamps(); 
     }); 

User_information Modell:

class user_information extends Eloquent 
{ 
    protected $fillable = array('signature', 'Name'); 
    protected $table = 'user_informations'; 
    protected $primaryKey = 'id'; 
     public function Images() { 
     return $this->hasOne('App\Image','user_id'); 
    } 
} 

enter image description here

Wie das Bild zu bekommen? Hier ist der Ansicht Ordner:

@foreach ($data as $object) 
    <b>Name: </b>{{ $object->Name }}<br><br> 
<a href="{{ url('/user/show/'.$object->id.'/edit') }}">Edit</a><br> 
    @foreach ($data3 as $currentUser) 
    <img src="{{ asset('public/images/' . $currentUser->Image->name) }}"> 
    @endforeach 
    @if($data3->count()) 
@foreach($data3 as $currentUser) 
<a href="{!! route('user.upload.image', ['id'=>$currentUser->user_id]) !!}"> 
    <button class="btn btn-primary"><i class ="fa fa-plus"></i>Upload Images</button> 
</a> 

@endforeach 
@else 
<a href="{!! route('user.upload.image', ['id'=>$object->id]) !!}"> 
    <button class="btn btn-primary"><i class ="fa fa-plus"></i>Upload Images</button> 
@endif 
@endforeach 

Homecontroller:

 public function getInfo($id) { 
$data = user_information::where('id',$id)->get(); 
      $data3=Image::where('user_id',$id)->get(); 
    return view('test',compact('data','data3')); 
+1

Sie geschrieben 'upload.blade.php', aber Ihr Code ruft' create1'. Sind Sie sicher, dass Sie die richtige Vorlage aufrufen? –

+0

@Dkna übergeben Sie eine '$ id' Variable in Ihre' test() 'Methode. – Jonjie

+0

@Maraboc vielleicht löschen wir den Chat oben ein wenig, und kann ich auch nicht die ID-Nummer manuell, sondern stattdessen automatisch? Vielleicht eine For-Schleife, damit ich es nicht für alle machen muss? Beispiel vielleicht wie wenn ich in user _information id = 3 gehe, dann ist die user_id von Images 3 – Dkna

Antwort

1

Weil Sie nicht den Benutzer Upload-Ansicht bestanden haben, versuchen Sie es wie folgt weitergeben müssen:

public function upload(){ 
    $id = 1 //The wanted user or if the user is authenticated use Auth::id() 
    $user = User::find($id); 
    return view('upload')->withUser($user); 
} 

Oder wenn der Benutzer authentifiziert Verwendung Auth in der Ansicht:

<form class="form-horizontal" method="post" action="{{ url('/userUpload')}}" enctype="multipart/form-data"> 

    {{ csrf_field() }} 

    <input type="hidden" name="user_id" value="{{auth()->id()}}"> 
    <div class="form-group"> 
     <label for="imageInput" class="control-label col-sm-3">Upload Image</label> 
     <div class="col-sm-9"> 
      <input type="file" name="file"> 

     </div> 
    </div> 

    <div class="form-group"> 
     <div class="col-md-6-offset-2"> 
      <input type="submit" class="btn btn-primary" value="Save"> 
     </div> 
    </div> 
</form> 

Für das zweite Problem ist es, weil in der Route du

Route::post('/UploadUser','[email protected]'); 
haben

und Ihre Methode speichern Signatur

public function store(Request $request,$id){ 

Die $id Parameter, die das Problem haben, weil es in der Route nicht definiert ist so einfach entfernen sie aus dem Verfahren signatre

public function store(Request $request){ 

    $this->validate($request, [ 
     'file' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 
    ]); 


    if ($request->hasFile('file')) { 
     $image = $request->file('file'); 
     $name = $image->getClientOriginalName(); 
     $size = $image->getClientSize(); 
     $id = $request->user_id; // here id is declared no need for the parameter 
     $destinationPath = public_path('/images'); 
     $image->move($destinationPath, $name); 

     $Image = new Image; 
     $Image->name = $name; 
     $Image->size = $size; 
     $Image->user_id = $id;   
     $Image->save(); 
    } 
    return redirect('/home'); 
} 

Für die Im dritten Fall müssen Sie die Routen ändern von:

Route::get('/UploadUser/upload','[email protected]’); 

zu

Route::get('/UploadUser/{user}/upload','[email protected]’)->name('user.upload.image'); 

Und in der Ansicht, die die ID in der URL-Upload-Button vielleicht wie folgt hinzu:

{!! route('user.upload.image', ['user'=>$currentUser->id]) !!} 

Dann in der Upload-Methode:

public function upload(user_information $user){ // route model binding here 
    // dd($user); //for testing only :) 
    return view('upload')->withUser($user); 
} 

Nach Ansicht ändern

<input type="hidden" name="user_id" value="{{auth()->id()}}"> 

Um

<input type="hidden" name="user_id" value="{{$user->id()}}"> 

Und Sie sind gut zu gehen;)

@foreach ($data as $currentUser) 
    <b>Name: </b>{{ $currentUser->Name }}<br><br> 
    <a href="{{ url('/user/show/'.$currentUser->id.'/edit') }}">Edit</a><br> 

    @if($currentUser->Image) 
     <img src="{{ asset('public/images/' . $currentUser->Image->name) }}"> 
    @endif 

    <a href="{!! route('user.upload.image', ['id'=>$currentUser->id]) !!}"> 

@endforeach 
0

Sie haben Miss-ID in Ihrem wo Zustand zu übergeben,

public function test(){ 
    $user = user_information::where('id',$id)->first(); 
    return view('create1', compact('user')); 
} 

und Sie müssen Ihren Benutzerdaten gehen in Dies ist

public function upload(){ 
$user = user_information::where('id',$id)->first(); 
return view(‘upload’,compact('user')); 
} 

Hoffe, es hilft,

+0

danke für die antwort ich habe deinen code versucht aber der fehler bleibt gleich, Undefinierte variable: user und die view wird hochgeladen, gerade jetzt ich nahm die falsche templete – Dkna

+0

yeah aber ich redigierte meine Antwort freue mich ich übergeben Benutzervariable in Ihre Upload-Methode Ihre Upload-Ansicht Vorlage nicht bekommen $ user-> ID das ist warum es werfen Fehler. – Rits

0

Sie müssen eine $id Variable in Ihre test() Methode übergeben. Dann kommentieren Sie bitte unten, was der Fehler als nächstes ist, damit ich Ihnen folgen kann.

aktualisieren

Da Sie wollen keine id passieren. Sie können:

public function test(){ 
    $u = Auth::user(); 
    $user = user_information::where('id', $u->id)->get(); 
    return view('upload', compact('user')); 
} 

ODER

Try first() statt get() zu verwenden.

Weitere Option: ich bemerkt haben, Sie verwenden die upload() Methode hier, warum die $user dort nicht vorbei? so wie:

public function upload(){ 
    $user = Auth::user(); 
    return view(‘upload’, compact('user')); 
} 
+0

Hallo Tks zum Antworten, ich scheine immer noch den Fehler undefined Benutzer, wenn ich Ihren Code versuchen und auch ich kann nicht zuerst() verwenden, da ich alle ID und nicht nur die erste – Dkna

+0

@Dkna OK groß bekomme. Verwende stattdessen 'get()'. – Jonjie

0

Auf Ihrer Upload-Funktion haben Sie die Benutzervariable zu übergeben, da Sie die $user in der Ansicht verwenden. So wird der Controller

public function upload() { 
    $user = Auth::user(); 
    return view('upload', compact('user')); 
} 

nicht vergessen, den $ Benutzer basierend auf Ihrem Bedarf zu ändern.

Verwandte Themen