A: 

There is nothing inside your <p class="p_error"></p> so nothing can be displayed. If you want individual errors shown, you should use

<?php echo form_error('your_field'); ?>

and for styling

<?php echo form_error('your_field', '<p class="p_error">', '</p>'); ?>

Important note: insde your view, $this is not working since it needs the a class context in order to work.

DrColossos
+1  A: 

Simply, <p> cannot wrap <p>. So the browser will get super confused if you give it <p><p>content</p></p>. The options are either to use the built-in wrapper arguments:

<?= form_error('lastname_error', '<p class="p_error">', '</p>'); ?>

Or to wrap the whole thing in an element that can wrap <p>, like <div>.

<div class="p_error"><?php print $this->validation->lastname_error;?></div>

Of course, you'll have to style the div instead of the p.

Steven Xu
A: 

By default, the system adds a paragraph tag (<p>) around each error message shown. You can easily change these delimiters with this code, placed in your controller:
$this->validation->set_error_delimiters('<div class="error">', '</div>');

for Ref: http://codeigniter.com/user_guide/libraries/validation.html>

ASD