Ich habe 2 Tabellen, Subunternehmer und Benutzer.

Jede Tabelle hat eine Spalte mit dem Namen "Bezirk".

Ich habe eine Frage in meinem Formular, in der der Benutzer einen Bezirk auswählen soll. Ich möchte, dass das Formular die Dropdown-Optionen von "Distrikt" basierend auf dem "Distrikt" des angemeldeten Benutzers anzeigt.

Wenn ich mein Modell mit meinem Code "$ this-> session-> userdata" codiere, werden die Dropdown-Optionen nur leer angezeigt.

Wenn ich den Code zur Angabe des "Distrikts" eingebe, funktioniert das Dropdown-Feld ordnungsgemäß und zeigt nur die Distriktoptionen aus der Tabelle der Subunternehmer an.

Mein Ziel ist es, dass in der Formular-Dropdown-Liste nur die Optionen angezeigt werden, die demselben Distrikt entsprechen wie der angemeldete Benutzer.

ZB: Wenn "James" angemeldet ist und das Formular ausfüllt, möchte ich, dass jeder "Subname", der denselben "Bezirk" wie James hat, in einem Dropdown-Feld angezeigt wird.

enter image description here

enter image description here

Das System wird von ungefähr 30 verschiedenen Benutzern verwendet, sodass jeder Benutzer, der sich anmeldet, bei der Anmeldung einen anderen Satz von Distriktvariablen sehen muss.

Ihre Hilfe wird gerne in Anspruch genommen.

-

MODELL (funktioniert nicht - Dropdown-Optionen werden leer angezeigt)

    public function get_subcontractors()
    {
        $this->db->where('district', $this->session->userdata('district'));
        $query = $this->db->get('subcontractors');
        return $query->result();
    }

MODELL (Funktioniert das Dropdown-Menü "Formular" zeigt nur die Optionen mit derselben Distrikt-ID an)

    public function get_subcontractors()
    {
        $this->db->where('district', 'cobb');
        $query = $this->db->get('subcontractors');
        return $query->result();
    }

CONTROLLER

$data['subcontractors'] = $this->Page_model->get_subcontractors();

USER / LOGIN (Controller)

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Users extends CI_Controller
{
    function __construct()
    {
        parent::__construct();

    }

    public function index()
    {
        // Check Login
        if(!$this->session->userdata('logged_in'))
        {
            redirect('admin/login');
        }

        $data['users'] = $this->User_model->get_list();
        // Load templte
        $this->template->load('admin', 'default', 'users/index', $data);
        // referencing <!-- /application/views/admin/users/index.php -->

    }

    public function login()
    {
        $this->form_validation->set_rules('username','Username','trim|required|min_length[4]');
        $this->form_validation->set_rules('password','Password','trim|required|min_length[4]');

        if ($this->form_validation->run() == FALSE)
        {
            //Load View Into Template
            $this->template->load('admin','login','users/login');
        } 
        else 
        {

            // Get Post Data
            $username = $this->input->post('username');
            $password = $this->input->post('password');
            $enc_password = md5($password);

            $user_id = $this->User_model->login($username, $enc_password);

            if($user_id)
            {
                $user_data = array(
                    'user_id' => $user_id, 
                    'username' => $username, 
                    'district' => $district, 
                    'logged_in' => true
                );

                // Set Session Data
                $this->session->set_userdata($user_data);

                // Create Message
                $this->session->set_flashdata('success', 'You are logged in');
                
                // Redirect to pages
                redirect('admin');

            }
            else
            {
              $this->session->set_userdata('district', $loaded_login['district'])
              
              
                // Create Error
                $this->session->set_flashdata('error', 'Invalid Login');
                
                // Redirect to pages
                redirect('admin/users/login');

            }

            // Add Activity $this->Activity_model->add($data);

        }

    }



    public function logout()
    {
        $this->session->unset_userdata('logged_in');
        $this->session->unset_userdata('user_id');
        $this->session->unset_userdata('username');
        $this->session->sess_destroy();

        // Message
        $this->session->set_flashdata('success', 'You are logged out');

        // Redirect
        redirect('admin/users/login');
    }
    
  
  
  
}

USER_MODEL (Login)

    public function login($username, $password)
    {
        $this->db->select('*');
        $this->db->from($this->table);
        $this->db->where('username', $username);
        $this->db->where('password', $password);
        $this->db->limit(1);

        $query = $this->db->get();

        if($query->num_rows() == 1)
        {
            return $query->row()->id;
        }
        else
        {
            return false;
        }
    }

ADMIN NAVIGATION WRAPPER

<button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">
<?php echo $username = $this->session->userdata('username'); ?>
<span class="caret"></span></button>


<?php $user_id = $this->session->userdata('user_id'); ?>
<?php if( $user_id == '3' ):?>
      
      <!-- START FULL NAVIGATION -->

ANSICHT

<select name="sub_name" class="form-control name_list" >
     <option value="NA">Choose</option>
        <?php foreach($subcontractors as $subcontractor) : ?>
        <option value="<?php echo $subcontractor->sub_name; ?>"><?php echo $subcontractor->sub_name; ?> 
     </option>
        <?php endforeach; ?>
</select>
-1
Roberto Raymon 14 Aug. 2020 im 16:22

2 Antworten

Beste Antwort

Versuchen Sie diese Lösung:

1). User_model.php

Ersetzen Sie die Anmeldefunktion durch diese Funktion.

public function login($username, $password)
    {
        $this->db->select('*');
        $this->db->from($this->table);
        $this->db->where('username', $username);
        $this->db->where('password', $password);
        $this->db->limit(1);

        $query = $this->db->get();

        if($query->num_rows() == 1)
        {
            return $query->result_array();
        }
        else
        {
            return false;
        }
    }

2). Register.php

Und dies ist die Indexfunktion in Ihrer register.php

public function index()
    {
        $this->form_validation->set_rules('username','Username','trim|required|min_length[4]');
        $this->form_validation->set_rules('password','Password','trim|required|min_length[4]');

        if ($this->form_validation->run() == FALSE)
        {
            //Load View Into Template
            $this->template->load('admin','login','users/register');
        } 
        else 
        {

            // Get Post Data
            $username = $this->input->post('username');
            $password = $this->input->post('password');
            $enc_password = md5($password);

            $result = $this->User_model->login($username, $enc_password);

            if($result)
            {
                $user_data = array(
                    'user_id' => $result[0]['id'], 
                    'username' => $username,
                    'district' => $result[0]['district'],
                    'logged_in' => true
                );

                // Set Session Data
                $this->session->set_userdata($user_data);              

                // Create Message
                $this->session->set_flashdata('success', 'You are logged in');
                
                // Redirect to pages
                redirect('admin');

            }
            else
            {
                // Create Error
                $this->session->set_flashdata('error', 'Invalid Login');
                
                // Redirect to pages
                redirect('admin/users/login');

            }



        }

    }

Versuchen Sie diese Lösung, ich hoffe, dass dies funktionieren wird

0
Mohsin Mushtaq 18 Aug. 2020 im 08:29

Sie müssen die Sitzungsdaten in Ihrem Login-Controller festlegen:

$this->session->set_userdata('district', 'loaded_login['district']'); // replace loaded_login['district'] with your implemented access to that data

Zu Testzwecken können Sie Folgendes tun:

$this->session->set_userdata('district', '2 peachtree');

Bearbeiten:

Ich würde vorschlagen, dass Sie den Rückgabewert von $this->User_model->login($username, $enc_password); ändern, um die gesamte Benutzerdatenzeile anstelle nur der Benutzer-ID zurückzugeben. Danach können Sie dies tun:

...
$user_row = $this->User_model->login($username, $enc_password);

        if($user_row )
        {
            $user_data = array(
                'user_id' => $user_row['id'], 
                'username' => $user_row['user_name'], 
                'district' => $user_row['district'], 
                'logged_in' => true
            );

            // Set Session Data
            $this->session->set_userdata($user_data);

            // Create Message
            $this->session->set_flashdata('success', 'You are logged in');
            
            // Redirect to pages
            redirect('admin');

        }
...

Bearbeiten 2:

Ah ich sehe. Sie arbeiten mit Objektrückgabetypen aus Ihrer Datenbank. Mit

return $query->row()->id;

(in der Anmeldemethode User_model) Sie geben nur die ID Ihrer Datenbank-Anmeldezeile zurück. Das row() speichert jedoch alle Informationen Ihrer Datenbankzeile, auch den Distriktwert. Und dieser Distriktwert muss in Ihren Sitzungsdaten gespeichert sein, damit sich Ihre Website benutzerspezifisch verhält. Daher geben Sie die gesamte Zeile anstelle nur der ID zurück und schreiben die gesamten Zeileninformationen in Ihre Sitzung. Also ändern wir diese Zeile in

return $query->row();

Führen Sie dann in Ihrem Benutzer-Login-Controller Folgendes aus:

...
$user_row = $this->User_model->login($username, $enc_password); //here we now get the whole database row as object

        if($user_row )
        {
            $user_data = array(
                'user_id' => $user_row->id, //now you can access each database field to a variable in your session
                'username' => $user_row->user_name, 
                'district' => $user_row->district, 
                'logged_in' => true
            );

            // Set Session Data
            $this->session->set_userdata($user_data);

            // Create Message
            $this->session->set_flashdata('success', 'You are logged in');
            
            // Redirect to pages
            redirect('admin');

        }
...
0
Sam Tigle 18 Aug. 2020 im 07:26