Reputation:
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
Upvotes: 3
Views: 181
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
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
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
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;
}
Upvotes: 0