Bonjour, je sais que c'est simple mais je suis incapable de le faire.
J'ai @foreach lorsque j'ai une liste avec mes utilisateurs, (cela fonctionne) mais je dois envoyer l'ID utilisateur sélectionné vers une autre vue, mais je vois toujours l'ID du dernier utilisateur dans mon base de données. Comment puis-je enregistrer les données de la boucle? par $ _POST?
<div class="container mt mb-4">
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<h2>Edit </h2>
<form method="POST" role="form">
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
<div>
<select name="name" id="">
@foreach($user as $us)
<option value="{{$us->id}}" >{{$us->name}} {{$us->lastname}}</option>
@endforeach
</select>
</div>
<a href="{{ URL::to('admin/paneladministratora/editUser/'. $us->id) }}">Edit </a>
</form>
</div>
J'ai maintenant dans mon formulaire, l'identifiant du dernier utilisateur mais j'ai besoin de l'identifiant de l'utilisateur sélectionné.
Merci. p>
5 Réponses :
Vous accédez à l'objet $ us en dehors de la boucle foreach, c'est pourquoi il n'obtient que le dernier userId, ajoutez un lien dans la boucle foreach.
<div class="container mt mb-4">
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<h2>Edit </h2>
<form method="POST" role="form">
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
@foreach($user as $us)
$option = '<option value="{{$us->id}}" >{{$us->name}} {{$us->lastname}}
</option>';
<a href="{{ URL::to('admin/paneladministratora/editUser/'. $us->id) }}">Edit </a>
@endforeach
<div>
<select name="name" id="">
{!! $option !!}
</select>
</div>
</form>
</div>
Votre lien est en dehors de la boucle. Lorsque la boucle se termine, la variable $ us restera avec la valeur du dernier utilisateur. Vous devez passer le lien à l'intérieur de la boucle comme indiqué dans les commentaires:
<select name="name" id="mySelect">
@foreach($user as $us)
<option value="{{$us->id}}" >
{{$us->name}} {{$us->lastname}}
</option>
@endforeach
</select>
<a href="{{ URL::to('admin/paneladministratora/editUser/'. $us->id) }}" id="editLink">Edit </a>
<script>
var baseLink = {{ URL::to('admin/paneladministratora/editUser/') }}
var mySelect;
window.onload = function() {
mySelect = document.getElementById("mySelect");
mySelect.addEventListener("change", updateLink);
}
function updateLink(){
document.getElementById("editLink").href = baseLink + mySelect.options[mySelect.selectedIndex].value
}
</script>
Mais cette approche n'a pas beaucoup de sens (insérer un lien à l'intérieur d'un semble ... eh bien ... bizarre). Je suppose que vous n’avez pas formulé votre question correctement et je suppose que vous souhaitez afficher les liens pour modifier chaque utilisateur, vous devrez donc faire:
@foreach($user as $us)
<a href="{{ URL::to('admin/paneladministratora/editUser/'. $us->id) }}" id="editLink">Edit </a>
@endforeach
MISE À JOUR
Après qu'OP a commenté cette réponse, j'ai compris ce qu'il aimerait faire.
Il aimerait avoir un lien Modifier chaque fois qu'il clique sur le lien et être redirigé vers la page pour modifier un certain utilisateur.
Je ne suis pas sûr qu'il existe un moyen purement HTML pour atteindre votre objectif (du moins en pensant maintenant), vous devrez donc utiliser un peu de magie Javascript.
Vous devez écouter les changements dans select et mettre à jour le lien chaque fois qu'il y a un changement:
<select name="name" id="mySelect">
@foreach($user as $us)
<option value="{{$us->id}}" >
{{$us->name}} {{$us->lastname}}
</option>
@endforeach
</select>
Non testé correctement maintenant mais vous avez l'idée
J'ai mis à jour ma réponse pour vous montrer comment atteindre l'objectif
Lorsque vous utilisez '$ us-> id' en dehors de votre foreach, il vous donnera la valeur du dernier utilisateur car cette ligne sera exécutée après la fin de la boucle et la dernière valeur sera stockée dans cette variable. C'est la raison pour laquelle vous avez obtenu l'identifiant du dernier utilisateur.
<div class="container mt mb-4">
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<h2>Edit </h2>
<form method="POST" role="form">
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
<div>
<select name="name" id="">
@foreach($user as $us)
<option value="{{$us->id}}" >{{$us->name}} {{$us->lastname}}</option>
<a href="{{ URL::to('admin/paneladministratora/editUser/'. $us->id) }}">Edit </a>
@endforeach
</select>
</div>
</form>
Vous pouvez réaliser ce que vous avez décrit de plusieurs manières, mais la meilleure à mon avis, avec le moins de modifications apportées à votre code, est de soumettre le formulaire à une URL et de récupérer l'ID utilisateur à partir des données du formulaire, dans votre manette.
Essayez ceci:
<div class="container mt mb-4">
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<h2>Edit </h2>
<form method="POST" role="form">
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
<div>
<select name="name" id="">
@foreach($user as $us)
<option value="{{$us->id}}" >{{$us->name}} {{$us->lastname}}</option>
@endforeach
</select>
</div>
<button type="submit"> Edit </button>
</form>
</div>
Hellow, enfin je l'ai fait.
<h2>Edit </h2>
<form method="POST" role="form" >
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
<div>
<select name="name" id="test" onchange="javascript:doUrl(event)">
@foreach($user as $us1)
<option value="{{$us1->id}}">{{$us1->name}}</option>
@endforeach
</select>
</div>
</form>
<a id="linkEdit" href="{{ URL::to('admin/paneladministratora/editUser/'. $us1->id) }}">Edytuj3 </a>
</div>
<script>
function doUrl(e){
$('#linkEdit').attr('href','/admin/paneladministratora/editUser/'+e.target.value)
}
</script>
ajouter un lien à l'intérieur de chaque loo, voir la réponse