user6880811
user6880811

Reputation:

How will my wordpress plugin know who the student is with the user account and how will I be able to show the additional information?

I'm pretty new to making wordpress plugins and I've been trying to make a plugin that manages reviews for student. In the CMS of wordpress I made the CRUD for adding reviews. Now I'm trying to log a student in and make sure he sees his own reviews on the website.

I've been getting this error:

Fatal error: Call to a member function getDagopdracht() on null in D:\xammp\htdocs\ivs_website_kopie\wp-content\plugins\ivs-dagopdracht\includes\views\view_resultaat.php on line 34

I think this is because the website doesn't know what id it is. I know the person I currently logged in has student_id 4 and ID(wordpress) 4. But when I try to put in 4 it gives me the same error.

This the website code in view_resultaat.php:

// Create instance Beoordelinggeven class
$beoordelinggeven_class = new BeoordelingGeven();

?>

<body>
    <div class="container">
        <div class="row">
            <h3>Resultaten (BETA)</h3>
        </div>
        <div class="row">
            <table class="table table-striped table-bordered">
                <thead>
                    <tr>
                        <th>Dagopdracht</th>
                        <th>Beoordeling</th>
                        <th>Commentaar</th> 
                    </tr>
                </thead>
                <tbody>

                    <?php

                $user_id = get_current_user_id(); 
                if ($user_id == 0) {
                    echo 'You are currently not logged in.';
                    } else {

                    $leerling_id = $beoordelinggeven_class->getLeerlingIdByUserId($nummer, $user_id);


                    //view beoordelinggeven
                    $beoordelinggeven_objects = $beoordelinggeven_class->getBeoordelingLeerling($nummer, $user_id);
                    //if(leerling id){
                    foreach ($beoordelinggeven_objects as $id => $beoordelinggeven_object) {
                        echo '<tr>';
                        echo '<td>' . $beoordelinggeven_object->getDagopdracht() . '</td>';
                        echo '<td>' . $beoordelinggeven_object->getBeoordeling() . '</td>';
                        echo '<td>' . $beoordelinggeven_object->getComment() . '</td>';
                        ?>

                        <?php
                        echo '</tr>';
                    }
                    } 
                    //}
                    ?>
                </tbody>
            </table>
            <td><a href="<?php echo $base_url; ?>">Terug</a></td>
        </div>
    </div> <!-- /container -->
</body>
</html>

and this is the function it corresponds to in file BeoordelingGeven.php:

public function getLeerlingIdByUserId($nummer, $user_id){

    global $wpdb;
   echo $user_id;
    $id_query = "SELECT l.`nummer`, u.`ID`, d.`naam` d_naam, b.`naam` b_naam, g.`comment` FROM `wp_ivs_dagopdracht_db`.`wp_ivs_beoordeling` g 
        INNER JOIN `wp_ivs_dagopdracht_db`.`wp_ivs_dagopdracht` d ON g.`beoordeling_dagopdracht` = d.`dagopdracht_id`
        INNER JOIN `wp_ivs_dagopdracht_db`.`wp_ivs_leerlingen` l ON g.`beoordeling_leerling` = l.`nummer`
        INNER JOIN `wp_ivs_dagopdracht_db`.`wp_ivs_beoordeling_type` b ON g.`beoordeling_beoordeling` = b.`beoordeling_id`
        INNER JOIN `wp_ivs_dagopdracht_db`.`wp_users` u ON l.`leerling_user_id` = u.`ID`
        WHERE l.nummer = $nummer AND u.ID = $user_id";

     $id = $wpdb->get_results($id_query);
     print_r($id);
    return $id;
}

public function getBeoordelingLeerling($nummer, $user_id) {

global $wpdb;

$query = "SELECT l.`nummer`, u.`ID`, d.`naam` d_naam, b.`naam` b_naam, g.`comment` FROM `wp_ivs_dagopdracht_db`.`wp_ivs_beoordeling` g 
        INNER JOIN `wp_ivs_dagopdracht_db`.`wp_ivs_dagopdracht` d ON g.`beoordeling_dagopdracht` = d.`dagopdracht_id`
        INNER JOIN `wp_ivs_dagopdracht_db`.`wp_ivs_leerlingen` l ON g.`beoordeling_leerling` = l.`nummer`
        INNER JOIN `wp_ivs_dagopdracht_db`.`wp_ivs_beoordeling_type` b ON g.`beoordeling_beoordeling` = b.`beoordeling_id`
        INNER JOIN `wp_ivs_dagopdracht_db`.`wp_users` u ON l.`leerling_user_id` = u.`ID`
        WHERE l.nummer = $nummer AND u.ID = $user_id";

$result_array = $wpdb->get_results( $query, ARRAY_A);
//"WHERE d.dagopdracht_id = $id";
// For all database results:
$result = $result_array[self::RESULT_ARRAY_OFFSET];

// For all database results:
$this->setDagopdracht($result['beoordeling_dagopdracht']);
$this->setBeoordeling($result ['beoordeling_beoordeling']);
$this->setComment($result['comment']);


return $this;

}

What am I missing?

This is my very first question here, sorry if I made any mistakes.

Additional this is my database: student table student

user table user

reviews reviews

Upvotes: 3

Views: 181

Answers (4)

user6880811
user6880811

Reputation:

I finally got it working it seems one of the functions wasn't correctly written. Mainly the last part of getBeoordelingLeerling().

public function getLeerlingIdByUserId($user_id) {

    global $wpdb;

    $query = "SELECT nummer FROM `wp_ivs_leerlingen` WHERE leerling_user_id = $user_id";
    $result = $wpdb->get_results($query);
    $id = $result[0]->nummer;

    return $id;
}

public function getBeoordelingLeerling($nummer) {

    global $wpdb;

    $query = "SELECT l.`nummer`, d.`naam` d_naam, b.`naam` b_naam, g.`comment` FROM `wp_ivs_dagopdracht_db`.`wp_ivs_beoordeling` g 
            INNER JOIN `wp_ivs_dagopdracht_db`.`wp_ivs_dagopdracht` d ON g.`beoordeling_dagopdracht` = d.`dagopdracht_id`
            INNER JOIN `wp_ivs_dagopdracht_db`.`wp_ivs_leerlingen` l ON g.`beoordeling_leerling` = l.`nummer`
            INNER JOIN `wp_ivs_dagopdracht_db`.`wp_ivs_beoordeling_type` b ON g.`beoordeling_beoordeling` = b.`beoordeling_id`
            WHERE l.nummer = $nummer";

    $result_array = $wpdb->get_results( $query, ARRAY_A);
    //"WHERE d.dagopdracht_id = $id";
    // For all database results:
    foreach ($result_array as $idx => $array) {

        // New object
        $bl = new BeoordelingGeven();
        // Set all info
        $bl->setId($array['beoordeling_geven_id']);
        $bl->setDagopdracht($array['d_naam']);
        $bl->setBeoordeling($array['b_naam']);
        $bl->setComment($array['comment']);
        // Add new object to return array.
        $return_array[] = $bl;
    }
    return $return_array;
}

Now I get all the information I need :). Thank you for all the tips, and thank you sheetal for sticking with me.

Upvotes: 0

sheetal
sheetal

Reputation: 565

To get the current user id you can use this code snippet:

<?php
  $current_user = wp_get_current_user();
  $user_id = $current_user->ID;
?>

Let's make this code simple

view--

<?php
   $user_id = get_current_user_id(); 
   if ($user_id == 0) {
    echo 'You are currently not logged in.';
    } else {

        $nummer = $beoordelinggeven_class->getLeerlingIdByUserId($user_id);
        //view beoordelinggeven
        $beoordelinggeven_objects = $beoordelinggeven_class->getBeoordelingLeerling($nummer, $user_id);
        //if(leerling id){
        foreach ($beoordelinggeven_objects as $id => $beoordelinggeven_object) {
            echo '<tr>';
            echo '<td>' . $beoordelinggeven_object->getDagopdracht() . '</td>';
            echo '<td>' . $beoordelinggeven_object->getBeoordeling() . '</td>';
            echo '<td>' . $beoordelinggeven_object->getComment() . '</td>';
        ?>

        <?php
        echo '</tr>';
        }
    } 
    //}
    ?>

BeoordelingGeven.php-----

public function getLeerlingIdByUserId($user_id){

    global $wpdb;

    $query = "SELECT `nummer` FROM `wp_ivs_beoordeling` WHERE leerling_user_id = $user_id;
    $result = $wpdb->get_results($query);
    print_r($result);
    $id = $result[0]->nummer;
    echo $id;
    return $id;
}

public function getBeoordelingLeerling($nummer, $user_id) {

    global $wpdb;

    $query = "SELECT l.`nummer`, u.`ID`, d.`naam` d_naam, b.`naam` b_naam, g.`comment` FROM `wp_ivs_dagopdracht_db`.`wp_ivs_beoordeling` g 
            INNER JOIN `wp_ivs_dagopdracht_db`.`wp_ivs_dagopdracht` d ON g.`beoordeling_dagopdracht` = d.`dagopdracht_id`
            INNER JOIN `wp_ivs_dagopdracht_db`.`wp_ivs_leerlingen` l ON g.`beoordeling_leerling` = l.`nummer`
            INNER JOIN `wp_ivs_dagopdracht_db`.`wp_ivs_beoordeling_type` b ON g.`beoordeling_beoordeling` = b.`beoordeling_id`
            INNER JOIN `wp_ivs_dagopdracht_db`.`wp_users` u ON l.`leerling_user_id` = u.`ID`
            WHERE l.nummer = $nummer AND u.ID = $user_id";

    $result_array = $wpdb->get_results( $query, ARRAY_A);
    //"WHERE d.dagopdracht_id = $id";
    // For all database results:
    $result = $result_array[self::RESULT_ARRAY_OFFSET];

    // For all database results:
    $this->setDagopdracht($result['beoordeling_dagopdracht']);
    $this->setBeoordeling($result ['beoordeling_beoordeling']);
    $this->setComment($result['comment']);


    return $this;
}

Upvotes: 1

madankundu
madankundu

Reputation: 154

Please check this link and you can get all details of the logged-in user https://codex.wordpress.org/Function_Reference/wp_get_current_user

Upvotes: 0

Lakhan
Lakhan

Reputation: 13286

Please try this :

$user_id = get_current_user_id();
if ($user_id == 0) {
    echo 'You are currently not logged in.';
} else {
    echo 'You are logged in as user '.$user_id;
}

MORE DETAIL LINK

Upvotes: 0

Related Questions