Undefinded property / jQuery error

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bart Jans

Bart Jans

11/11/2019 18:08:46
Quote Anchor link
Hallo,

ik probeer een ACL permissie systeem in PHP te maken om gebruikers toestemming te geven om info van bepaalde instrumenten te zien, of deze terug in te trekken.
Ik heb een edit pagina aangemaakt met een tabel met een lijst van deze instrumenten, plus een icoon om te klikken om toestemming te geven/in te trekken.
Als ik op het icoon klik krijg ik echter jQuery melding "iets ging verkeerd". Als ik de code wat verander krijg ik ook undefined property errors. Ben al een paar dagen aan het zoeken wat fout is, maar zit wat vast. Kunnen jullie helpen aub, of weten jullie een bestaand voorbeeld van dergelijk systeem ?

Stuk van de code :

in de Edit.php :
<tbody>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
<?php
              foreach($this->instruments as $instrument): ?>

<tr data-id="
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?=$instrument->id?>
">
<td>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?=$instrument->name?>
</td>
<td class="text-right">
<a class="btn btn-sm btn-outline-info mr-1" onclick="toggleAcl('
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?=$instrument->id,$this->users->id?>
');return false;">
<i data-id="
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?=$instrument->id?>
" class="
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?=($instrument->id == 0)? 'fas fa-star': 'far fa-star'?>
"></i>
</a>
</td>
</tr>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php endforeach; ?>

</tbody>
<script>
function toggleAcl(id,user_id){
jQuery.ajax({
url: '
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?=PROOT?>
adminusers/toggleAcl',
method: "POST",
data : {id : id, user_id : user_id},
success : function(resp) {
if(resp.success){
var el = jQuery('i[data-id="'+resp.model_id+'"]');
var klass = (resp.acl)? 'fas' : 'far';
el.removeClass("fas far");
el.addClass(klass);
alertMsg(resp.msg,'success');
} else {
alertMsg(resp.msg, 'danger');
}
}
});
}
</script>

in de controller :
public function toggleAclAction(){
$resp = ['success'=>false,'msg'=>'Iets ging verkeerd'];
if($this->request->isPost()){
$id = $this->request->get('id');
$user_id = $this->request->get('user_id');
$user = adminUsers::findByUserId2($user_id);
$instrument = Instruments::findById($id);
if($instrument){
Users::addAcl($user->id,$instrument->name);
$msg = "Right added.";
$resp = ['success' => true, 'msg' => $msg,'model_id' => $id,'acl'=>$user->acl];
}
else {
// Users::removeAcl($user_id,$instrument->name);
// $msg = "Right removed.";
// $resp = ['success' => true, 'msg' => $msg,'model_id' => $id,'acl'=>$user_id->acl];
}
}
$this->jsonResponse($resp);
}

Dank bij voorbaat !
 
PHP hulp

PHP hulp

28/03/2024 21:10:35
 
- Ariën  -
Beheerder

- Ariën -

11/11/2019 18:19:00
Quote Anchor link
Zou je jouw code tussen code-tags willen plaatsen voor betere leesbaarheid? Zie ook de Veelgestelde Vragen.
 
Bart Jans

Bart Jans

11/11/2019 18:55:57
Quote Anchor link
Dag Ariën, ok sorry. Tweede poging :)

In mijn edit.php, tabel om beschikbare instrumenten weer te geven :
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<tbody>
              <?php
              foreach($this->instruments as $instrument): ?>

                <tr data-id="<?=$instrument->id?>">
                  <td><?=$instrument->name?></td>
                  <td class="text-right">
                    <a class="btn btn-sm btn-outline-info mr-1" onclick="toggleAcl('<?=$instrument->id,$this->users->id?>');return false;">
                      <i data-id="<?=$instrument->id?>" class="<?=($instrument->id == 0)? 'fas fa-star': 'far fa-star'?>"></i>
                    </a>
                  </td>
                </tr>
              <?php endforeach; ?>
            </tbody>

Onderaan edit.php, de jQuery toggle :
<script>
function toggleAcl(id,user_id){
  jQuery.ajax({
    url: '<?=PROOT?>adminusers/toggleAcl',
    method: "POST",
    data : {id : id, user_id : user_id},
    success : function(resp) {
      if(resp.success){
        var el = jQuery('i[data-id="'+resp.model_id+'"]');
        var klass = (resp.acl)? 'fas' : 'far';
        el.removeClass("fas far");
        el.addClass(klass);
        alertMsg(resp.msg,'success');
      } else {
        alertMsg(resp.msg, 'danger');
      }
    }
  });
}
</script>

In mijn controller file, de toggleAction :

public function toggleAclAction(){
    $resp = ['success'=>false,'msg'=>'Something went wrong...'];
    if($this->request->isPost()){
      $id = $this->request->get('id');
      $user_id = $this->request->get('user_id');
      $user = adminUsers::findByUserId2($user_id);
      $instrument = Instruments::findById($id);
      if($instrument){
        Users::addAcl($user->id,$instrument->name);
        $msg = "Toestemming gegeven.";
        $resp = ['success' => true, 'msg' => $msg,'model_id' => $id,'acl'=>$user->acl];
      }
    }
    $this->jsonResponse($resp);
  }
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.