I have used jQuery datatable for my project.when i add the form validation it display error called "the page at localhost says Error adding/update data. when i run the code without form validations it works fine.i couldn't understand what is the issue with my code.
Controller
class User_controller extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->model('user_model','user_controller');
$this->load->library('form_validation');
}
public function index()
{
$this->load->helper('url');
$this->load->view('admin_include/header');
$this->load->view('admin_pages/user_view');
}
public function ajax_list()
{
$list = $this->user_controller->get_datatables();
$data = array();
$no = $_POST['start'];
foreach ($list as $person) {
$no++;
$row = array();
$row[] = $person->firstname;
$row[] = $person->lastname;
$row[] = $person->gender;
$row[] = $person->address;
$row[] = $person->contact_no;
//add html for action
$row[] = '<a class="btn btn-sm btn-primary" href="javascript:void()" title="Edit" onclick="edit_person('."'".$person->id."'".')"><i class="glyphicon glyphicon-pencil"></i> Edit</a>
<a class="btn btn-sm btn-danger" href="javascript:void()" title="Hapus" onclick="delete_person('."'".$person->id."'".')"><i class="glyphicon glyphicon-trash"></i> Delete</a>';
$data[] = $row;
}
$output = array(
"draw" => $_POST['draw'],
"recordsTotal" => $this->user_controller->count_all(),
"recordsFiltered" => $this->user_controller->count_filtered(),
"data" => $data,
);
//output to json format
echo json_encode($output);
}
public function ajax_edit($id)
{
$data = $this->user_controller->get_by_id($id);
echo json_encode($data);
}
public function ajax_add()
{
$this->form_validation->set_rules('firstname', 'First Name', 'required');
$this->form_validation->set_rules('lastname', 'Last Name', 'required');
$this->form_validation->set_rules('email', 'Email', 'required|valid_email');
$this->form_validation->set_rules('contact_no', 'Contact Number', 'required|numeric|max_length[10]|min_length[10]');
if ($this->form_validation->run() == FALSE){
echo'<div class="alert alert-danger">'.validation_errors().'</div>';
exit;
}
else{
$data = array(
'firstname' => $this->input->post('firstname'),
'lastname' => $this->input->post('lastname'),
'gender' => $this->input->post('gender'),
'address' => $this->input->post('address'),
'dob' => $this->input->post('dob'),
);
$insert = $this->user_controller->save($data);
echo json_encode(array("status" => TRUE));
}
}
public function ajax_update()
{
$this->form_validation->set_rules('firstname', 'First Name', 'required');
$this->form_validation->set_rules('lastname', 'Last Name', 'required');
$this->form_validation->set_rules('email', 'Email', 'required|valid_email');
$this->form_validation->set_rules('contact_no', 'Contact Number', 'required|numeric|max_length[10]|min_length[10]');
if ($this->form_validation->run() == FALSE){
echo'<div class="alert alert-danger">'.validation_errors().'</div>';
exit;
}else{
$data = array(
'firstname' => $this->input->post('firstname'),
'lastname' => $this->input->post('lastname'),
'gender' => $this->input->post('gender'),
'address' => $this->input->post('address'),
'dob' => $this->input->post('contact_no'),
);
$this->user_controller->update(array('id' => $this->input->post('id')), $data);
echo json_encode(array("status" => TRUE));
}
}
public function ajax_delete($id)
{
$this->user_controller->delete_by_id($id);
echo json_encode(array("status" => TRUE));
}
}
model
class User_model extends CI_Model {
var $table = 'user';
var $column = array('firstname','lastname','gender','address','contact_no');
var $order = array('id' => 'desc');
public function __construct()
{
parent::__construct();
$this->load->database();
}
private function _get_datatables_query()
{
$this->db->from($this->table);
$i = 0;
foreach ($this->column as $item)
{
if($_POST['search']['value'])
($i===0) ? $this->db->like($item, $_POST['search']['value']) : $this->db->or_like($item, $_POST['search']['value']);
$column[$i] = $item;
$i++;
}
if(isset($_POST['order']))
{
$this->db->order_by($column[$_POST['order']['0']['column']], $_POST['order']['0']['dir']);
}
else if(isset($this->order))
{
$order = $this->order;
$this->db->order_by(key($order), $order[key($order)]);
}
}
function get_datatables()
{
$this->_get_datatables_query();
if($_POST['length'] != -1)
$this->db->limit($_POST['length'], $_POST['start']);
$query = $this->db->get();
return $query->result();
}
function count_filtered()
{
$this->_get_datatables_query();
$query = $this->db->get();
return $query->num_rows();
}
public function count_all()
{
$this->db->from($this->table);
return $this->db->count_all_results();
}
public function get_by_id($id)
{
$this->db->from($this->table);
$this->db->where('id',$id);
$query = $this->db->get();
return $query->row();
}
public function save($data)
{
$this->db->insert($this->table, $data);
return $this->db->insert_id();
}
public function update($where, $data)
{
$this->db->update($this->table, $data, $where);
return $this->db->affected_rows();
}
public function delete_by_id($id)
{
$this->db->where('id', $id);
$this->db->delete($this->table);
}
}
view
<h3>Client Data</h3>
<br />
<button class="btn btn-success" onclick="add_person()"><i class="glyphicon glyphicon-plus"></i> Add Person</button>
<br />
<br />
<table id="table" class="table table-striped table-bordered" cellspacing="0" width="100%">
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Gender</th>
<th>Address</th>
<th>Contact No</th>
<th style="width:125px;">Action</th>
</tr>
</thead>
<tbody>
</tbody>
<tfoot>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Gender</th>
<th>Address</th>
<th>Date of Birth</th>
<th>Contact No</th>
</tr>
</tfoot>
</table>
</div>
<script src="<?php echo base_url('assets/jquery/jquery-2.1.4.min.js')?>"></script>
<script src="<?php echo base_url('assets/bootstrap/js/bootstrap.min.js')?>"></script>
<script src="<?php echo base_url('assets/datatables/js/jquery.dataTables.min.js')?>"></script>
<script src="<?php echo base_url('assets/datatables/js/dataTables.bootstrap.js')?>"></script>
<script type="text/javascript">
var save_method; //for save method string
var table;
$(document).ready(function() {
table = $('#table').DataTable({
"processing": true, //Feature control the processing indicator.
"serverSide": true, //Feature control DataTables' server-side processing mode.
// Load data for the table's content from an Ajax source
"ajax": {
"url": "<?php echo site_url('user_controller/ajax_list')?>",
"type": "POST"
},
//Set column definition initialisation properties.
"columnDefs": [
{
"targets": [ -1 ], //last column
"orderable": false, //set not orderable
},
],
});
});
function add_person()
{
save_method = 'add';
$('#form')[0].reset(); // reset form on modals
$('#modal_form').modal('show'); // show bootstrap modal
$('.modal-title').text('Add Person'); // Set Title to Bootstrap modal title
}
function edit_person(id)
{
alert(id);
save_method = 'update';
$('#form')[0].reset(); // reset form on modals
//Ajax Load data from ajax
$.ajax({
url : "<?php echo site_url('user_controller/ajax_edit/')?>/" + id,
type: "GET",
dataType: "JSON",
success: function(data)
{
$('[name="id"]').val(data.id);
$('[name="firstname"]').val(data.firstname);
$('[name="lastname"]').val(data.lastname);
$('[name="gender"]').val(data.gender);
$('[name="address"]').val(data.address);
$('[name="contact_no"]').val(data.contact_no);
$('#modal_form').modal('show'); // show bootstrap modal when complete loaded
$('.modal-title').text('Edit Person'); // Set title to Bootstrap modal title
},
error: function (jqXHR, textStatus, errorThrown)
{
alert('Error get data from ajax');
}
});
}
function reload_table()
{
table.ajax.reload(null,false); //reload datatable ajax
}
function save()
{
var url;
if(save_method == 'add')
{
url = "<?php echo site_url('user_controller/ajax_add')?>";
}
else
{
url = "<?php echo site_url('user_controller/ajax_update')?>";
}
// ajax adding data to database
$.ajax({
url : url,
type: "POST",
data: $('#form').serialize(),
dataType: "JSON",
success: function(data)
{
//if success close modal and reload ajax table
$('#modal_form').modal('hide');
reload_table();
},
error: function (jqXHR, textStatus, errorThrown)
{
alert('Error adding / update data');
}
});
}
function delete_person(id)
{
if(confirm('Are you sure delete this data?'))
{
// ajax delete data to database
$.ajax({
url : "<?php echo site_url('user_controller/ajax_delete')?>/"+id,
type: "POST",
dataType: "JSON",
success: function(data)
{
//if success reload ajax table
$('#modal_form').modal('hide');
reload_table();
},
error: function (jqXHR, textStatus, errorThrown)
{
alert('Error adding / update data');
}
});
}
}
</script>
<!-- Bootstrap modal -->
<div class="modal fade" id="modal_form" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h3 class="modal-title">Person Form</h3>
</div>
<div class="modal-body form">
<form action="#" id="form" class="form-horizontal">
<input type="hidden" value="" name="id"/>
<div class="form-body">
<div class="form-group">
<label class="control-label col-md-3">First Name</label>
<div class="col-md-9">
<input name="firstname" placeholder="First Name" class="form-control" type="text" >
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3">Last Name</label>
<div class="col-md-9">
<input name="lastname" placeholder="Last Name" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3">Gender</label>
<div class="col-md-9">
<select name="gender" class="form-control">
<option value="male">Male</option>
<option value="female">Female</option>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3">Address</label>
<div class="col-md-9">
<textarea name="address" placeholder="Address"class="form-control"></textarea>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3">Date of Birth</label>
<div class="col-md-9">
<input name="dob" placeholder="yyyy-mm-dd" class="form-control" type="text">
</div>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" id="btnSave" onclick="save()" class="btn btn-primary">Save</button>
<button type="button" class="btn btn-danger" data-dismiss="modal">Cancel</button>
i would prefer HTML 5 validation because its very easy way and HTML 5 validation will check on client side or it will check without refresh the page and codeigniter form validation will refresh the page then show then show error so its a long way...so please use HTML 5 validation
Related
For my website I want the admin to be emailed when data is added.
I can send emails using a link with this
<div class="p-6 bg-white border-b border-gray-200">
Let the Administrator know there is activity
<a href="{{route('activity')}}" class="inline-flex items-center px-4 py-2 bg-gray-800 border border-transparent rounded-md" >Notify Admin</a>
</div>
and using this route in web.php
Route::get('/activity', function(){
Mail::to('peterataliotis#gmail.com')->send(new Activity());
return redirect('/dashboard');
})->name('activity');
but I want for this email to send when data is added
using my crud page.
This is my crud view
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Comment Bank</title>
<meta name="csrf-token" content="{{ csrf_token() }}">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" >
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</head>
<body>
<x-app-layout>
<div class="container mt-2">
<x-slot name="header">
<h2 class="font-semibold text-xl text-gray-800 leading-tight">
{{ __('Dashboard') }}
</h2>
</x-slot>
<div class="row">
<div class="col-md-12 card-header text-center font-weight-bold">
<h2>Comment Bank</h2>
</div>
<div id="message"></div>
<div class="col-md-12 mt-1 mb-2"><button type="button" id="addNewCommentUser" class="btn btn-success">Add</button></div>
<div class="col-md-12">
<table id="Table1" class="table">
<thead>
<tr>
<th scope ="col">Message Select</th>
<th scope="col">#</th>
<th scope="col">Comment Body</th>
<th scope="col">First Name</th>
<th scope="col">Last Name</th>
<th scope="col">Email</th>
<th scope="col">Comment Tone</th>
<th scope="col">Comment Type</th>
<th scope="col">Verified Status</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
<input id = "btnGet" type="button" value="Get Selected" />
</div>
</div>
<div><textarea id="messageList" rows="10" cols="100">Selection</textarea> <button type="button" id="copy">Copy</button></div>
</div>
<!-- boostrap model -->
<div class="modal fade" id="comments-crud-model" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="commentsCrudModel"></h4>
</div>
<div class="modal-body">
<ul id="msgList"></ul>
<form action="javascript:void(0)" id="addEditCommentFormUser" name="addEditCommentFormUser" class="form-horizontal" method="POST">
<input type="hidden" name="id" id="id">
<div class="form-group">
<label for="name" class="col-sm-4 control-label">Comment Body</label>
<div class="col-sm-12">
<textarea class="form-control" id="comment_body" name="comment_body" rows="4" cols="10" placeholder="Enter Comment Body"></textarea>
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label">First Name</label>
<div class="col-sm-12">
<input type="text" class="form-control" id="first_name" name="first_name" placeholder="Enter First Name" value="" required="">
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label">Last Name</label>
<div class="col-sm-12">
<input type="text" class="form-control" id="last_name" name="last_name" placeholder="Enter Last Name" value="" required="">
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label">Email</label>
<div class="col-sm-12">
<input type="text" class="form-control" id="email" name="email" placeholder="Enter Email" value="" required="">
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label">Comment Tone</label>
<div class="col-sm-12">
<select name="comment_tone" id="comment_tone" class="form-control">
<option value="1">Positive</option>
<option value="0">Negative</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label">Comment Type</label>
<div class="col-sm-12">
<select name="comment_type" id="comment_type">
<option value="CO">Conclusion Comments</option>
<option value="RO">Results Comments</option>
</select>
</div>
</div>
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-primary" id="btn-add" value="addNewCommentUser">Save
</button>
<button type="submit" class="btn btn-primary" id="btn-save" value="UpdateCommentUser">Save changes
</button>
</div>
</form>
</div>
<div class="modal-footer">
</div>
</div>
</div>
</div>
</x-app-layout>
<!-- end bootstrap model -->
<script>
$(document).ready(function($){
fetchCommentUser(); // Get the table from the dB to start
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
function fetchCommentUser()
{
// ajax
$.ajax({
type:"GET",
url: "fetch-comments-user",
dataType: 'json',
success: function(res){
// console.log(res);
$('tbody').html("");
$.each(res.comments, function (key, item) {
$('tbody').append('<tr>\
<td><input type="checkbox" name="comments_to_copy" id="comments_to_copy' +item.id+'"/></td>\
<td>' + item.id + '</td>\
<td>' + item.comment_body + '</td>\
<td>' + item.first_name + '</td>\
<td>' + item.last_name + '</td>\
<td>' + item.email + '</td>\
<td>' + item.comment_tone + '</td>\
<td>' + item.comment_type + '</td>\
</tr>');
});
},
complete: function(){
isChecked();
}
});
}
$('#addNewCommentUser').click(function (evt) {
evt.preventDefault();
$('#addEditCommentFormUser').trigger("reset");
$('#commentsCrudModel').html("Add Comment");
$('#btn-add').show();
$('#btn-save').hide();
$('#comments-crud-model').modal('show');
});
$('body').on('click', '#btn-add', function (event) {
event.preventDefault();
var comment_body = $("#comment_body").val();
var first_name = $("#first_name").val();
var last_name = $("#last_name").val();
var email = $("#email").val();
var comment_tone = $("#comment_tone").val();
var comment_type = $("#comment_type").val();
var verified_status = 0
$("#btn-add").html('Please Wait...');
$("#btn-add").attr("disabled", true);
// ajax
$.ajax({
type:"POST",
url: "save-comment-user",
data: {
comment_body:comment_body,
first_name:first_name,
last_name:last_name,
email: email,
comment_tone: comment_tone,
comment_type: comment_type,
verified_status: verified_status,
},
dataType: 'json',
success: function(res){
console.log(res);
if (res.status == 400) {
$('#msgList').html("");
$('#msgList').addClass('alert alert-danger');
$.each(res.errors, function (key, err_value) {
$('#msgList').append('<li>' + err_value + '</li>');
});
$('#btn-save').text('Save changes');
} else {
$('#message').html("");
$('#message').addClass('alert alert-success');
$('#message').text(res.message);
fetchCommentUser();
}
},
complete: function(){
$("#btn-add").html('Save');
$("#btn-add").attr("disabled", false);
$("#btn-add").hide();
$('#comments-crud-model').modal('hide');
$('#message').fadeOut(4000);
}
});
});
$('body').on('click', '.edit', function (evt) {
evt.preventDefault();
var id = $(this).data('id');
// ajax
$.ajax({
type:"GET",
url: "edit-comment-user/"+id,
dataType: 'json',
success: function(res){
console.dir(res);
$('#commentsCrudModel').html("Edit Comment");
$('#btn-add').hide();
$('#btn-save').show();
$('#comments-crud-model').modal('show');
if (res.status == 404) {
$('#msgList').html("");
$('#msgList').addClass('alert alert-danger');
$('#msgList').text(res.message);
} else {
// console.log(res.book.xxx);
$('#comment_body').val(res.comment.comment_body);
$('#first_name').val(res.comment.first_name);
$('#last_name').val(res.comment.last_name);
$('#email').val(res.comment.email);
$('#comment_tone').val(res.comment.comment_tone);
$('#comment_type').val(res.comment.comment_type);
$('#verified_status').val(res.comment.verified_status);
$('#id').val(res.comment.id);
}
}
});
});
$('body').on('click', '.delete', function (evt) {
evt.preventDefault();
if (confirm("Delete Comment?") == true) {
var id = $(this).data('id');
// ajax
$.ajax({
type:"DELETE",
url: "delete-comment-user/"+id,
dataType: 'json',
success: function(res){
// console.log(res);
if (res.status == 404) {
$('#message').addClass('alert alert-danger');
$('#message').text(res.message);
} else {
$('#message').html("");
$('#message').addClass('alert alert-success');
$('#message').text(res.message);
}
fetchCommentUser();
}
});
}
});
$('body').on('click', '#btn-save', function (event) {
event.preventDefault();
var id = $("#id").val();
var comment_body = $("#comment_body").val();
var first_name = $("#first_name").val();
var last_name = $("#last_name").val();
var email = $("#email").val();
var comment_tone = $("#comment_tone").val();
var comment_type = $("#comment_type").val();
var verified_status = $("#verified_status").val();
// alert("id="+id+" title = " + title);
$("#btn-save").html('Please Wait...');
$("#btn-save").attr("disabled", true);
// ajax
$.ajax({
type:"PUT",
url: "update-comment-user/"+id,
data: {
comment_body:comment_body,
first_name:first_name,
last_name:last_name,
email: email,
comment_tone: comment_tone,
comment_type: comment_type,
verified_status: verified_status,
},
dataType: 'json',
success: function(res){
console.log(res);
if (res.status == 400) {
$('#msgList').html("");
$('#msgList').addClass('alert alert-danger');
$.each(res.errors, function (key, err_value) {
$('#msgList').append('<li>' + err_value + '</li>');
});
$('#btn-save').text('Save changes');
} else {
$('#message').html("");
$('#message').addClass('alert alert-success');
$('#message').text(res.message);
fetchCommentUser();
}
},
complete: function(){
$("#btn-save").html('Save changes');
$("#btn-save").attr("disabled", false);
$('#comments-crud-model').modal('hide');
$('#message').fadeOut(4000);
}
});
});
$("#btnGet").click(function () {
var message = "";
//Loop through all checked CheckBoxes in GridView.
$("#Table1 input[type=checkbox]:checked").each(function () {
var row = $(this).closest("tr")[0];
// message += row.cells[2].innerHTML;
message += " " + row.cells[2].innerHTML;
// message += " " + row.cells[4].innerHTML;
message += "\n-----------------------\n";
});
//Display selected Row data in Alert Box.
$("#messageList").html(message);
return false;
});
$("#copy").click(function(){
$("#messageList").select();
document.execCommand("copy");
alert("Copied On clipboard");
});
function isChecked(){
$("#Table1 input[type=checkbox]").each(function () {
if ($(this).val() == 1)
{
$(this).prop("checked", true);
}
else
{
$(this).prop("checked", false);
}
});
}
});
</script>
</body>
</html>
and my CommentController
<?php
namespace App\Http\Controllers;
use App\Models\Comment;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Auth;
class CommentController extends Controller
{
/**
* Display a listing of the resource.
*
* #return \Illuminate\Http\Response
*/
public function index()
{
if(Auth::user()->hasRole('user')){
return view('user-view');
}elseif(Auth::user()->hasRole('administrator')){
return view('comments-crud');
}
}
public function fetchComment()
{
$comments = Comment::all();
return response()->json([
'comments'=>$comments,
]);
}
/**
* Store a newly created resource in storage.
*
* #param \Illuminate\Http\Request $request
* #return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'comment_body'=>'required',
'first_name'=>'required',
'last_name'=>'required',
'email'=>'required',
'comment_tone'=>'required',
'comment_type'=>'required',
'verified_status'=>'required',
]);
if($validator->fails())
{
return response()->json([
'status'=>400,
'errors'=>$validator->messages()
]);
}
else
{
$comment = new Comment;
$comment->comment_body = $request->input('comment_body');
$comment->first_name = $request->input('first_name');
$comment->last_name = $request->input('last_name');
$comment->email = $request->input('email');
$comment->comment_tone = $request->input('comment_tone');
$comment->comment_type = $request->input('comment_type');
if ($request->has('verified_status')){
$comment->verified_status = 1;
}
else{
$comment->verified_status = 0;
}
$comment->save();
return response()->json([
'status'=>200,
'message'=>'Comment Added Successfully.'
]);
}
}
/**
* Show the form for editing the specified resource.
*
* #param \App\Product $product
* #return \Illuminate\Http\Response
*/
public function edit($id)
{
$comment = Comment::find($id);
if($comment)
{
return response()->json([
'status'=>200,
'comment'=> $comment,
]);
}
else
{
return response()->json([
'status'=>404,
'message'=>'No Comment Found.'
]);
}
}
/**
* Update an existing resource in storage.
*
* #param \Illuminate\Http\Request $request
* #param \App\Product $product
* #return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$validator = Validator::make($request->all(), [
'comment_body'=>'required',
'first_name'=>'required',
'last_name'=>'required',
'email'=>'required',
'comment_tone'=>'required',
'comment_type'=>'required',
'verified_status'=>'required',
]);
if($validator->fails())
{
return response()->json([
'status'=>400,
'errors'=>$validator->messages()
]);
}
else
{
$comment = comment::find($id);
if($comment)
{
$comment->comment_body = $request->input('comment_body');
$comment->first_name = $request->input('first_name');
$comment->last_name = $request->input('last_name');
$comment->email = $request->input('email');
$comment->comment_tone = $request->input('comment_tone');
$comment->comment_type = $request->input('comment_type');
$comment->verified_status = $request->input('verified_status');
$comment->update();
return response()->json([
'status'=>200,
'message'=>'Comment with id:'.$id. ' Updated Successfully.'
]);
}
else
{
return response()->json([
'status'=>404,
'message'=>'No Comment Found.'
]);
}
}
}
/**
* Remove the specified resource from storage.
*
* #param \App\Product $product
* #return \Illuminate\Http\Response
*/
public function destroy($id)
{
$comment = Comment::find($id);
if($comment)
{
$comment->delete();
return response()->json([
'status'=>200,
'message'=>'Comment Deleted Successfully.'
]);
}
else
{
return response()->json([
'status'=>404,
'message'=>'No Comment Found.'
]);
}
}
///////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
//USER FUNCTIONS
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
public function fetchCommentUser()
{
$comments = Comment::where('verified_status', 1)->get();
return response()->json([
'comments' => $comments,
]);
}
/**
* Store a newly created resource in storage.
*
* #param \Illuminate\Http\Request $request
* #return \Illuminate\Http\Response
*/
public function storeUser(Request $request)
{
$validator = Validator::make($request->all(), [
'comment_body'=>'required',
'first_name'=>'required',
'last_name'=>'required',
'email'=>'required',
'comment_tone'=>'required',
'comment_type'=>'required',
'verified_status'=>'required',
]);
if($validator->fails())
{
return response()->json([
'status'=>400,
'errors'=>$validator->messages()
]);
}
else
{
$comment = new Comment;
$comment->comment_body = $request->input('comment_body');
$comment->first_name = $request->input('first_name');
$comment->last_name = $request->input('last_name');
$comment->email = $request->input('email');
$comment->comment_tone = $request->input('comment_tone');
$comment->comment_type = $request->input('comment_type');
if ($request->has('verified_status')){
$comment->verified_status = 0;
}
else{
$comment->verified_status = 1;
}
$comment->save();
return response()->json([
'status'=>200,
'message'=>'Comment Added Successfully.'
]);
}
}
/**
* Update an existing resource in storage.
*
* #param \Illuminate\Http\Request $request
* #param \App\Product $product
* #return \Illuminate\Http\Response
*/
public function updateUser(Request $request, $id)
{
$validator = Validator::make($request->all(), [
'comment_body'=>'required',
'first_name'=>'required',
'last_name'=>'required',
'email'=>'required',
'comment_tone'=>'required',
'comment_type'=>'required',
'verified_status'=>'required',
]);
if($validator->fails())
{
return response()->json([
'status'=>400,
'errors'=>$validator->messages()
]);
}
else
{
$comment = comment::find($id);
if($comment)
{
$comment->comment_body = $request->input('comment_body');
$comment->first_name = $request->input('first_name');
$comment->last_name = $request->input('last_name');
$comment->email = $request->input('email');
$comment->comment_tone = $request->input('comment_tone');
$comment->comment_type = $request->input('comment_type');
$comment->verified_status = $request->input('verified_status');
$comment->update();
return response()->json([
'status'=>200,
'message'=>'Comment with id:'.$id. ' Updated Successfully.'
]);
}
else
{
return response()->json([
'status'=>404,
'message'=>'No Comment Found.'
]);
}
}
}
/**
* Show the form for editing the specified resource.
*
* #param \App\Product $product
* #return \Illuminate\Http\Response
*/
public function editUser($id)
{
$comment = Comment::find($id);
if($comment)
{
return response()->json([
'status'=>200,
'comment'=> $comment,
]);
}
else
{
return response()->json([
'status'=>404,
'message'=>'No Comment Found.'
]);
}
}
}
I understand this may be easiest to accomplish in the controller but i don't know how
the best way to do this is by using Observers, when any record is added to your model the method created in the Observer model will trigger
check this
https://laravel.com/docs/9.x/eloquent#observers
I hope it's helpful
On your comment model,
class Comment extends Model {
public static function boot(){
parent::boot();
static::created(function ($instance){
// If you want to trigger the email on only new comments add it here.
Mail::to('peterataliotis#gmail.com')->send(new Activity());
});
static::updated(function ($instance){
// If you want to trigger it on update also
Mail::to('peterataliotis#gmail.com')->send(new Activity());
});
}
}
Just put this code to where you want to send email:
Mail::to('peterataliotis#gmail.com')->send(new Activity());
You say you want to put this "when data is added", maybe put this code on store and storeUser method in the controller
I'm using codeigniter 3 and I've got issue here, how to fix my code if i use CSRF. because I want only have one page action to view in codeigniter.
Here's my controller code :
public function index()
{
# code untuk menampilkan Database Rotator
$this->data['partial_head'] = '
<!-- DataTables -->
<link rel="stylesheet" href="'.base_url('assets').'/plugins/datatables-bs4/css/dataTables.bootstrap4.min.css">
<link rel="stylesheet" href="'.base_url('assets').'/plugins/datatables-responsive/css/responsive.bootstrap4.min.css">
<link rel="stylesheet" href="'.base_url('assets').'/plugins/datatables-buttons/css/buttons.bootstrap4.min.css">';
$this->data['partial_body'] = '
<!-- DataTables & Plugins -->
<script src="'.base_url('assets').'/plugins/datatables/jquery.dataTables.min.js"></script>
<script src="'.base_url('assets').'/plugins/datatables-bs4/js/dataTables.bootstrap4.min.js"></script>
<script src="'.base_url('assets').'/plugins/datatables-responsive/js/dataTables.responsive.min.js"></script>
<script src="'.base_url('assets').'/plugins/datatables-responsive/js/responsive.bootstrap4.min.js"></script>
<!-- jquery-validation -->
<script src="'.base_url('assets').'/plugins/jquery-validation/jquery.validate.min.js"></script>
<script src="'.base_url('assets').'/plugins/jquery-validation/additional-methods.min.js"></script>
<!-- Custom JS -->
<script src="'.base_url('assets').'/dist/js/customJs/rotator-admin.js"></script>
';
$this->data['content'] = 'rotator/index';
$this->template->_render_page('layout/main',$this->data);
}
public function get_dataTable()
{
# code untuk menampilkan tabel ajax
$draw = intval($this->input->get("draw"));
$start = intval($this->input->get("start"));
$length = intval($this->input->get("length"));
$query = $this->model->getAllData('rotator');
$data = [];
$no = 1;
foreach($query->result() as $row) {
$data[] = array(
$no++,
'+'.htmlentities($row->nomor_hp, ENT_QUOTES, "UTF-8"),
htmlentities($row->pesan, ENT_QUOTES, "UTF-8"),
htmlentities($row->jml_perulangan, ENT_QUOTES, "UTF-8").' kali',
($row->status_aktif==1)?
'<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input btn-aktif" name="aktif" id="'.encryptor('encrypt', $row->id_rotator).'" checked>
<label class="custom-control-label label-aktif" for="'.encryptor('encrypt', $row->id_rotator).'">Aktif</label>
</div>':'<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input btn-aktif" name="aktif" id="'.encryptor('encrypt', $row->id_rotator).'">
<label class="custom-control-label label-aktif" for="'.encryptor('encrypt', $row->id_rotator).'">Non Aktif</label>
</div>',
'<i class="fas fa-edit"></i>
<i class="fas fa-trash"></i>'
);
}
$result = array(
'draw' => $draw,
'recordsTotal' => $query->num_rows(),
'recordsFiltered' => $query->num_rows(),
'data' => $data
);
echo json_encode($result);
exit();
}
public function getByDataId($id = null)
{
# code untuk menampilkan Data Himpunan jika tombol edit di klik
$where = ['id_rotator' => encryptor('decrypt', $id)];
$hasil = $this->model->whereData($where, 'rotator')->row();
$data = [
'handphone' => $hasil->nomor_hp,
'pesan' => $hasil->pesan,
'isAktif' => $hasil->status_aktif,
'diulang' => $hasil->jml_perulangan,
'id' => $id
];
echo json_encode($data);
}
public function tambah_data()
{
# code untuk menambahkan data baru
$this->form_validation->set_rules('handphone', 'Nomor Handphone', 'trim|required|is_numeric|is_unique[rotator.nomor_hp]');
$this->form_validation->set_rules('pesan', 'Pesan', 'trim|required');
$this->form_validation->set_rules('diulang', 'Jumlah Perulangan', 'trim|required|is_numeric');
$this->form_validation->set_rules('isAktif', 'is Aktif', 'trim|numeric');
if ($this->form_validation->run() == FALSE) {
echo json_encode([
'alert_error' => validation_errors()
]);
} else {
$nomorHp = $this->input->post('handphone', true);
$pesan = $this->input->post('pesan', true);
$perulangan = $this->input->post('diulang', true);
$isAktif = !empty($this->input->post('isAktif', true)) ? 1 : 0;
$data = [
'nomor_hp' => $nomorHp,
'pesan' => $pesan,
'status_aktif' => $isAktif,
'jml_perulangan' => $perulangan,
];
if ($this->model->insertData($data, 'rotator')) {
echo json_encode([
'alert_success' => 'Data berhasil ditambahkan!',
'status' => TRUE
]);
} else {
echo json_encode([
'alert_success' => 'Data gagal ditambahkan!',
'status' => FALSE
]);
}
}
}
public function edit_data()
{
# code untuk mengubah Data
$this->form_validation->set_rules('handphone', 'Nomor Handphone', 'trim|required|is_numeric');
$this->form_validation->set_rules('pesan', 'Pesan', 'trim|required');
$this->form_validation->set_rules('diulang', 'Jumlah Perulangan', 'trim|required|is_numeric');
$this->form_validation->set_rules('isAktif', 'is Aktif', 'trim|numeric');
if ($this->form_validation->run() == FALSE) {
echo json_encode([
'alert_error' => validation_errors()
]);
} else {
$nomorHp = $this->input->post('handphone', true);
$pesan = $this->input->post('pesan', true);
$perulangan = $this->input->post('diulang', true);
$isAktif = !empty($this->input->post('isAktif', true)) ? 1 : 0;
$data = [
'nomor_hp' => $nomorHp,
'pesan' => $pesan,
'status_aktif' => $isAktif,
'jml_perulangan' => $perulangan,
];
$id = $this->input->post('idRotator', true);
if($this->model->updateData(['id_rotator' => encryptor('decrypt', $id) ], $data, 'rotator')){
echo json_encode([
'alert_success' => 'Data berhasil diubah!',
'status' => TRUE
]);
} else {
echo json_encode([
'alert_error' => 'Data Gagal diubah!',
'status' => FALSE
]);
}
}
}
public function hapus_data($id = null)
{
# code untuk menghapus Data Himpunan
$where = ['id_rotator' => encryptor('decrypt', $id)];
$this->model->deleteData($where, 'rotator');
echo json_encode([
'status' => TRUE
]);
}
public function aktif_handphone($id = null)
{
# code untuk mengaktifkan handphone
$this->form_validation->set_rules('aktif', 'Aktif Handphone', 'trim|is_numeric');
if ($this->form_validation->run() == FALSE) {
echo json_encode([
'alert_error' => validation_errors()
]);
} else {
$data = [
'status_aktif' => $this->input->post('aktif',true)
];
if($this->model->updateData(['id_rotator' => encryptor('decrypt', $id)], $data, 'rotator')){
echo json_encode([
'alert_success' => 'Data berhasil diubah!',
'status' => TRUE
]);
}
}
}
Here's my table in view code:
<table class="table table-bordered table-sm table-striped table-hover" id="dataTable"
width="100%" cellspacing="0">
<thead>
<tr>
<th>No.</th>
<th>Nomor HP</th>
<th>Pesan</th>
<th>Jumlah Diulang</th>
<th>Status</th>
<th width="12%">#</th>
</tr>
</thead>
</table>
Here's my modal in view code:
<!-- modal -->
<div class="modal fade" id="exampleModal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title"></h4>
<button type="button" class="close btn-tutup" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<form class="form-horizontal" action="" id="myForm" method="post" accept-charset="utf-8">
<div class="modal-body">
<div class="form-group row">
<label for="handphone" class="col-sm-4 col-form-label">Nomor Hp</label>
<div class="col-sm-8 inputan">
<input id="handphone" name="handphone" type="text" pattern="\d*" maxlength="13"
onkeypress="return isNumber(event)" class="form-control">
</div>
</div>
<div class="form-group row">
<label for="pesan" class="col-sm-4 col-form-label">Pesan Untuk Admin</label>
<div class="col-sm-8 inputan">
<textarea name="pesan" id="pesan" cols="30" rows="3" class="form-control"
style="resize: none;" maxlength="256"></textarea>
</div>
</div>
<div class="form-group row">
<label for="diulang" class="col-sm-4 col-form-label">Diulang Sebanyak</label>
<div class="col-sm-4 inputan">
<input id="diulang" name="diulang" type="text" pattern="\d*" maxlength="2" minlength="1"
min="1" max="10" onkeypress="return isNumber(event)" class="form-control">
</div>
<span class="col-sm-4 col-form-label">(x) kali</span>
</div>
<div class="form-group row">
<div class="col-4"></div>
<div class="col-8 inputan">
<div class="custom-control custom-checkbox custom-control-inline">
<input name="isAktif" id="checkbox_0" type="checkbox" class="custom-control-input"
value="1" required="required">
<label for="checkbox_0" class="custom-control-label">is Aktif</label>
</div>
</div>
</div>
<input id="idRotator" name="idRotator" type="hidden">
</div>
<div class="modal-footer justify-content-between">
<button type="button" class="btn btn-default btn-tutup" data-dismiss="modal">Tutup</button>
<button type="submit" class="btn btn-primary">Simpan</button>
</div>
</form>
</div>
<!-- /.modal-content -->
</div>
<!-- /.modal-dialog -->
</div>
<!-- /.modal -->
and here's my script code:
//tampilkan data di datatables
$(document).ready(function() {
resetForm()
table = $('#dataTable').DataTable({
"ajax": {
url: 'rotator/get-dataTable',
type: 'POST'
},
})
})
$(function () {
// validasi form sebelum di kirim
$('#myForm').validate({
rules: {
handphone: {
required: true,
},
pesan: {
required: true,
},
diulang: {
required: true,
min: 1,
max: 10
},
isAktif: {
required: false
}
},
messages: {
handphone: {
required: "Pastikan masukan nomor telp dengan kode negara, misal 62xxxxxxxxxxx"
},
pesan: {
required: "Inputan pesan tidak boleh kosong!"
},
diulang: {
required: "Input angka 1 sampai 10",
min: "Input angka minimal 1",
max: "Input angka maksimal 10"
}
},
errorElement: 'span',
errorPlacement: function (error, element) {
error.addClass('invalid-feedback');
element.closest('.inputan').append(error);
},
highlight: function (element, errorClass, validClass) {
$(element).addClass('is-invalid');
},
unhighlight: function (element, errorClass, validClass) {
$(element).removeClass('is-invalid');
},
// jika form di submit
submitHandler: function() {
var data = $('#myForm').serialize()
$('.btn-simpan').text('simpan...') //ganti text button
$('.btn-simpan').attr('disabled', true) //set button disable
var url
if (save_method == 'add') {
url = "rotator/tambah-data"
} else {
url = "rotator/edit-data"
}
$.ajax({
url: url,
type: 'POST',
data: data,
dataType: 'JSON',
success: function(data) {
if (data.status) {
toastr.success(data.alert_success)
$('#exampleModal').modal('hide')
reload_table()
resetForm()
} else {
var messages = data.alert_error.split("\n")
for(var i=0; i<messages.length - 1; i++)
toastr.error(messages[i])
}
$('.btn-simpan').text('Simpan') //ganti text button
$('.btn-simpan').attr('disabled', false) //set button enable
},
error: function(jqXHR, textStatus, errorThrown) {
toastr.error('Error ' + save_method + ' data')
$('.btn-simpan').text('Simpan') //ganti text button
$('.btn-simpan').attr('disabled', false) //set button enable
}
})
}
})
})
//fungsi jika tombol tutup di klik
$('.btn-tutup').on("click", function(e) {
e.preventDefault()
resetForm()
})
//fungsi jika tombol tambah di klik
$('.btn-tambah').on('click',function (e) {
e.preventDefault()
$('.modal-title').text('Tambah Data')
resetForm()
save_method = 'add'
})
//fungsi jika tombol edit di klik
$('#dataTable').on('click', '.btn-edit', function() {
$('.modal-title').text('Edit Data')
var url = "rotator/getByDataId/"
var id = this.id
save_method = 'update'
resetForm()
$.ajax({
url: url + id,
type: 'POST',
dataType: 'JSON',
success: function(data) {
$.each(data, function() {
$('[name="handphone"]').val(data.handphone)
$('[name="pesan"]').text(data.pesan)
$('[name="diulang"]').val(data.diulang)
if(data.isAktif>0){
$('input[name=isAktif]').attr('checked', 'checked')
} else {
$('input[name=isAktif]').removeAttr('checked')
}
$('[name="idRotator"]').val(data.id)
$('[name="idRotator"]').attr('readonly', true)
//console.log(data)
})
},
error: function(jqXHR, textStatus, errorThrown) {
//toastr.error('Gagal baca data dari ajax')
return false
}
})
})
//fungsi jika tombol hapus di klik
$('#dataTable').on('click', '.btn-hapus', function() {
var url = "rotator/hapus-data/"
var id = this.id
Swal.fire({
title: 'Yakin akan menghapus data?',
icon: 'question',
showDenyButton: true,
showCancelButton: false,
confirmButtonText: `Ya, Hapus`,
denyButtonText: `Tidak`,
}).then((result) => {
if (result.isConfirmed) {
$.ajax({
url: url + id,
type: 'POST',
dataType: 'JSON',
success: function(data) {
Swal.fire('Dihapus!', 'data berhasil dihapus.', 'success')
reload_table()
resetForm()
},
error: function(xhr, ajaxOptions, thrownError) {
Swal.fire('Hapus Gagal!', 'Coba lagi', 'error')
}
})
} else if (result.isDenied) {
Swal.fire('Aman..!', 'Data tidak jadi dihapus.', 'info')
}
})
})
//fungsi untuk aktivasi handphone
$('#dataTable').on('click', '.btn-aktif', function() {
var url = "rotator/aktif-handphone/"
var id = this.id
var aktif = $('input#'+ id +':checked').val() ? '1' : '0'
$.ajax({
url: url + id,
type: 'POST',
dataType: 'JSON',
data : {aktif:aktif},
success: function(data) {
toastr.success(data.alert_success)
reload_table()
},
error: function(xhr, ajaxOptions, thrownError) {
toastr.error(data.alert_error)
return false
}
})
})
//fungsi untuk reload dataTabel
function reload_table() {
table.ajax.reload(null, false)
}
//fungsi untuk cek hanya angka yang diinput
function isNumber(evt) {
evt = (evt) ? evt : window.event;
var charCode = (evt.which) ? evt.which : evt.keyCode;
if (charCode > 31 && (charCode < 48 || charCode > 57)) {
return false
}
return true
}
//fungsi untuk reset form
function resetForm() {
$('#myForm').find('input:checkbox').removeAttr('checked') //kosongkan chekbox
$('#myForm').find('input:text').val('') //kosongkan form input
$('#myForm').find('textarea').text('') //kosongkan text area
}
if I try to setting my $config['csrf_protection'] = TRUE; will be error and showing notification, Where location we must locate <?= $this->security->get_csrf_token_name(); ?> and <?php echo $this->security->get_csrf_hash(); ?> to fix all ajax using csrf in one page..?
i come across this issue and if are you use multi form see this answer
https://stackoverflow.com/a/69407364/6559546
I have three Dynamic Dependant Dropdown Lists in Codeigniter:-
One of them represents company names
According to the company I choose I want to show that particular company's managers on one of my other dropdown
The company's staffs are shown on my third dropdown.
Both manager and staff are saved in same column called role_name in role_settings table of database.
So far i proceed my code to get list of managers on dropdown, but when i run my code nothing happens, and I actually dont know how to get staff's list on my other dropdown. Here is my code.
Project.php Controller:-
<?php
class Project extends CI_controller
{
function __construct()
{
parent::__construct();
// if(!$this->session->userdata('admin'))
// redirect('admin');
$this->load->model('project_model');
}
function index ()
{
$data['project'] = $this->project_model->getProjectDetails();
$this->load->view('admin/project/index',$data);
}
function add()
{
$this->form_validation->set_rules('Pname', 'Project Name', 'required');
$this->form_validation->set_rules('Cname', 'Client Name' , 'required');
$this->form_validation->set_rules('PassignTo', 'Company', 'required');
$this->form_validation->set_rules('manager', 'Manager' , 'required');
$this->form_validation->set_rules('staff', 'Support Staff', 'required');
$data['company_name'] = $this->project_model->getAllCompanyName();
$data['project'] = $this->project_model->getProjectDetails();
if ($this->form_validation->run() ==true)
{
$this->project_model->add();
$this->session->set_flashdata ('success','Project Added Sucessfully');
redirect('admin/project/index',$data);
}
else{
$this->load->view('admin/project/add',$data);
}
}
function edit($id)
{
$data['project'] = $this->project_model->getById($id);
$data['company_name'] = $this->project_model->getAllCompanyName();
$this->load->view('admin/project/edit', $data);
}
function update($id)
{
$this->project_model->update($id);
$this->session->set_flashdata ('success','Project updated Sucessfully');
redirect('admin/project/index');
}
function delete($id)
{
$this->project_model->delete($id);
$this->session->set_flashdata ('success','Project Deleted Sucessfully');
redirect('admin/project/index');
}
function getAllManger()
{
print_r($_REQUEST);
die;
if ($this->input->post('company_id'))
{
echo $this->project_model->
getAllManger($this->input->post('company_id'));
}
}
}
Project_model.php Model Code:-
<?php
class Project_model extends CI_Model
{
function getProjectDetails()
{
//table (projects)
return $this->db->get('projects')->result();
}
function getById($id)
{
return $this->db->get_where('projects',array('id'=>$id))->row();
}
function add()
{
$arr['project_name'] = $this->input->post('Pname');
$arr['client_name'] = $this->input->post('Cname');
$arr['company'] = $this->input->post('PassignTo');
$arr['project_manager'] = $this->input->post('manager');
$arr['support_staff'] = $this->input->post('staff');
$this->db->insert('projects',$arr);
}
function update($id)
{
$arr['project_name'] = $this->input->post('Cname');
$arr['client_name'] = $this->input->post('regNo');
$arr['company'] = $this->input->post('company');
$arr['project_manager'] = $this->input->post('manager');
$arr['support_staff'] = $this->input->post('staff');
$this->db->update('projects',$arr);
}
function delete($id)
{
$this->db->where(array('id'=>$id));
$this->db->delete('projects');
}
function getAllCompanyName()
{
$this->load->model('company_model');
$this->company_model->getCompanyDetails();
$this->db->order_by('company_name', 'ASC');
$query = $this->db->get('company_details');
//$query = $this->db->query('SELECT company_name FROM company_details');
return $query->result();
}
function getAllManger($company_id)
{
$this->db->where('id',$company_id);
$this->db->oredr_by('role_name', 'ASC');
$query = $this->db->get('roles_settings');
$output = '<option value="">Select Mangaer</option>';
foreach($query->result() as $row)
{
$output .= '<option value=" '.$row->manager_id.'">'.$row->project_manager. '</option>';
}
return $output;
}
function getAllStaff()
{
}
}
add.php View
<?php
$this->load->view('admin/header');
?>
<div class="main-sec">
<div class="row">
<div class="col-md-8">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item">Home</li>
<li class="breadcrumb-item">Projects</li>
<li class="breadcrumb-item active">Add Projects</li>
</ol>
</nav>
</div>
<div class="col-md-4">
<!-- <button class="btn btn-outline-primary float-right" id="addProjects"><i class="fa fa-plus-circle" aria-hidden="true"></i> Add Projects</button> -->
<?php
if($this->session->flashdata('success'))
{
?>
<div class="alert alert-success" role="alert">
<?php
echo $this->session->flashdata('success');
?>
</div>
<?php
}?>
</div>
</div>
<div class="main-sec-contant">
<div class="ProjectsAdd" >
<h2 class="heading">Add Project</h2>
<?php echo form_open('project_add'); ?>
<div class="row">
<div class="form-group col-md-4">
<label for="text">Project Name</label>
<input type="text" class="form-control" id="Pname" placeholder="Name" name="Pname" value="<?php echo set_value('Pname'); ?>">
<div class="alert-danger"><?php echo form_error('Pname'); ?></div>
</div>
<div class="form-group col-md-4">
<label for="pwd">Client Name</label>
<input type="text" class="form-control" id="Cname" placeholder="Client Name" name="Cname" value="<?php echo set_value('Cname'); ?>">
<div class="alert-danger"><?php echo form_error('Cname'); ?></div>
</div>
<div class="form-group col-md-4">
<label for="pwd">Project Assign To</label>
<select class="form-control" id="company" name="PassignTo" value="<?php echo set_value('PassignTo'); ?>">
<div class="alert-danger"><?php echo form_error('PassignTo'); ?></div>
<?php
foreach($company_name as $row )
{
echo '<option value="'.$row->id.'">'.$row->company_name.'</option>';
}
?>
</select>
</div>
<div class="form-group col-md-4">
<label for="pwd">Project Manager</label>
<select class="form-control" id="manager" name="manager" value="<?php echo set_value('manager'); ?>">
<div class="alert-danger"><?php echo form_error('manager'); ?></div>
<option value="">Select Mangaer</option>
</select>
</div>
<div class="form-group col-md-4">
<label for="pwd">Add Support Staff</label>
<select id="addStaffMulti" multiple="multiple" name="staff" value="<?php echo set_value('staff'); ?>">
<div class="alert-danger"><?php echo form_error('staff'); ?></div>
<option value="">Select Staff</option>
</select>
</div>
<div class="col-md-12">
<div class="btn-section float-right">
<button class="btn btn-outline-primary" type="submit" name="create" ><i class="fa fa-plus-circle" aria-hidden="true"></i> Create</button>
<a href="<?php echo site_url ('project');?>"> <button class="btn btn-danger float-right" id="cancelProjects" type="button" name="cancel" onClick="window.location.href=admin/project" ><i class="fa fa-plus-circle" aria-hidden="true"></i> Cancel</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<?php
$this->load->view('admin/footer');
?>
JQUERY AJAX CODE:-
<script>
$(document).ready(function()
{
$('#company').change(function(){
var company_id = $('#company').val();
if(company_id != '')
{
$.ajax({
url:"<?php echo base_url();?>
project/getAllManger",
method:"POST",
data:{company_id:company_id },
success:function(data)
{
$('#manager').html(data);
$('#addStaffMulti').html(' <option value="">Select Staff</option>');
}
});
}
else
{
$('#manager').html('<option value="">Select Mangaer</option>');
$('#addStaffMulti').html('<option value="">Select Staff</option>');
}
});
$()
});
});
</
<script>
And image below is image of role_settings table in database, I am basically trying to display all managers from role_name column in my Select Manager dropdown list and display the rest of the role_name column datas on Add stuff dropdown.
Solved the problem by making below changes in my code,also proceeded the form validation.
Project.php controller
<?php
class Project extends CI_controller
{
function __construct()
{
parent::__construct();
// if(!$this->session->userdata('admin'))
// redirect('admin');
$this->load->model('project_model');
}
public function index ()
{
$data['company_name'] = $this->project_model->getAllCompanyName();
$data['project'] = $this->project_model->getProjectDetails();
$this->load->view('admin/project/index',$data);
}
function add()
{
$this->form_validation->set_rules('Pname', 'Project Name', 'required');
$this->form_validation->set_rules('Cname', 'Client Name' , 'required');
$this->form_validation->set_rules('PassignTo', 'Company', 'required');
$this->form_validation->set_rules('manager', 'Manager' , 'required');
$this->form_validation->set_rules('staff', 'Support Staff', 'required');
$data['company_name'] = $this->project_model->getAllCompanyName();
$data['project'] = $this->project_model->getProjectDetails();
if ($this->form_validation->run() ==true)
{
$this->project_model->add();
$this->session->set_flashdata ('success','Project Added Sucessfully');
redirect('admin/project/index',$data);
}
else{
$this->load->view('admin/project/add',$data);
}
}
function edit($id)
{
$data['project'] = $this->project_model->getById($id);
$data['company_name'] = $this->project_model->getAllCompanyName();
$this->load->view('admin/project/edit', $data);
}
function update($id)
{
$this->project_model->update($id);
$this->session->set_flashdata ('success','Project updated Sucessfully');
redirect('admin/project/index');
}
function delete($id)
{
$this->project_model->delete($id);
$this->session->set_flashdata ('success','Project Deleted Sucessfully');
redirect('admin/project/index');
}
public function getManager()
{
//echo json_encode ("sdf"); die;
//print_r($_REQUEST);
//die;
$company_name = $this->input->post('company_name');
$getallmanager = $this->project_model->get_manager_query($company_name);
$getallstaff = $this->project_model->get_all_staff($company_name);
$all_the_mangers = '';
$all_the_staffs = '';
if(count($getallmanager)>0)
{
foreach ($getallmanager as $manager){
$all_the_mangers .='<option value="' .$manager->role.'">'.$manager->first_name.'</option>';
}
}
if(count($getallstaff)>0)
{
foreach ($getallstaff as $staff){
$all_the_staffs .='<option value="' .$staff->role.'">'.$staff->first_name.'</option>';
}
}
$result = array('manager'=>$all_the_mangers,'staffs'=>$all_the_staffs);
echo json_encode($result);die;
}
}
And added below javaScript at the end of my project.php view .
<script type="text/javascript">
$(document).ready(function(){
$('#company').on('change' , function() {
var company_name = $(this).val();
if(company_name == '')
{
$('#manager').prop('disabled', true);
$('#addStaffMulti').prop('disabled', true);
}
else
{
$('#manager' ).prop('disabled', false);
$('#addStaffMulti').prop('disabled', false);
//var url = "<?php echo base_url()?>getManager";
//alert(url);
//return false;
$.ajax({
url:"<?php echo base_url()?>getManager",
type: "POST",
data: { 'company_name' : company_name},
dataType:'json',
success: function(data){
//alert('ok');
console.log(data);
$('#manager').html(data.manager);
$('#addStaffMulti').html(data.staffs);
$('#addStaffMulti').multiselect('rebuild');
},
error: function(event){
console.log(event);
alert('Error occur...');
}
});
}
});
});
</script>
I am having a login modal form which is correctly validating but i am having a small problem that it is nt returning false statement on login modal such as Invalid user or password. Whereas in response i see wrong password entered and all html . But no message is printing on form.
here is my view:
Sign In / Order |
<div class="modal fade" id="loginmodel" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content martop105">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title text_center" id="exampleModalLabel">Login</h4>
</div>
<div class="modal-body">
<form >
<div class="row margin0 text_center">
<div class=" col-md-12 col-sm-12 col-xs-12" >
<input type="email" id="email" placeholder="Email*" class="form-control">
</div>
<br>
<div class="col-md-12 col-sm-12 col-xs-12 martop20">
<input type="Password" id="password" placeholder="Password*" class="form-control">
</div>
<br>
<div class="checkbox col-md-12 col-sm-12 col-xs-12 pull-left martop20" >
<label class="pull-left"><input name="remember" type="checkbox" value="Remember Me"> Remember Me</label>
</div>
<div class=" col-md-12 col-sm-12 col-xs-12 pull-left text_blue martop20" >
<a href="#" class="text_blue pull-left">
Forgot password?
</a>
</div>
</div>
<br>
<div class="row margin0 ">
<button type="button" onclick="save();" class="btn btn-info btn-lg marleft20 active">Login</button>
</div>
</form>
</div>
<div class="modal-footer">
</div>
</div>
</div>
</div>
<script>
function save(){
// alert('ddsfsf');
var email=$('#email').val();
var password=$('#password').val();
// alert(email);
//alert(gender);
$.ajax({
url: '<?php echo base_url();?>Choice/login',
type: 'POST',
data: {
email: email,
password:password
},
dataType: 'text',
success: function(data) {
// console.log(data);
// alert(data);
// alert("Succesfully Saved");
// location.reload(false);
}
});
}
</script>
controller
class Choice extends CI_Controller {
function __construct(){
parent::__construct();
$this->load->library('form_validation');
$this->load->helper('form');
$this->load->database();
$this->load->model('login_model','login_model');
$this->load->library('session');
$this->load->library('eway');
$this->load->model('Catering_model','catering_model');
// $this->load->helper('utility');
$this->load->helper('url');
}
public function login()
{
$this->form_validation->set_rules('email','Email','required|valid_email|is_unique[choicelunchuser.email]');
$this->form_validation->set_rules('password','Password','required|callback_basisdata_cek');
if($this->form_validation->run()==false)
{
$this->load->view('ChoiceLaunch/index');
}
else{
if($this->session->userdata('logged_in'))
{
$session_data = $this->session->userdata('logged_in');
$data['id'] = $session_data['id'];
$data['email'] = $session_data['email'];
$this->load->view('ChoiceLaunch/index',$data);
}
else{
$this->load->view('ChoiceLaunch/index');
}
}
}
public function basisdata_cek()
{
$username= $this->input->post('email');
$password=$this->input->post('password');
// echo $username.' '.$password;
$result=$this->login_model->loginemail($username,$password);
// echo ('fsf'.$result[0]);
// echo ('fsf'.$result[1]);
if($result)
{
$sess_array = array();
foreach ($result as $row)
{
$sess_array = $arrayName = array('id' => $row->id,'email'=> $row->email);
$this->session->set_userdata('logged_in',$sess_array);
// $ci = & get_instance();
//$ci->session->set_userdata("logged_in",$sess_array);
}
return true;
}
else{
//echo $username.' '.$password;
$this->form_validation->set_message('basisdata_cek','Invalid user or password');
return false;
}
}
}
for illustration kindly see pic:
You should add <?php echo validation_errors(); ?> to your view
You can use flash data to print your error message. In your controller
Change
else{
$this->load->view('ChoiceLaunch/index');
}
To
else{
$this->session->set_flashdata('yes', 'Invalid username or password');
redirect('ChoiceLaunch/index');
}
In your login view page add
<?php if($this->session->flashdata('yes')){ ?>
<span style="color:red;"><?php echo $this->session->flashdata('yes'); ?></span>
<?php } ?>
You should load library session.
$this->load->library('session');
Make sure have set base url in config.php
$config['base_url'] = 'http://localhost/projectname/';
dataType to json
function save(){
var email=$('#email').val();
var password=$('#password').val();
$.ajax({
url: "<?php echo base_url('choice/login');?>",
type: 'POST',
data: {
email: email,
password:password
},
dataType: 'json',
success: function(data) {
if ($data['success'] == false) {
// $('#somediv').text($data['error']);
$('#somediv').html($data['error']);
}
if ($data['success'] == true) {
alert('yes')
}
}
});
}
Controller
public function login() {
$data = array();
$this->form_validation->set_rules('email','Email','required|valid_email|is_unique[choicelunchuser.email]');
$this->form_validation->set_rules('password','Password','required|callback_basisdata_cek');
if ($this->form_validation->run() == false) {
$data['success'] = false;
$data['error'] = validation_errors();
} else {
// Set the session data
$data['success'] = true;
}
echo json_encode($data);
}
Then You will need to create another ajax function so when click login button to load model will display it.
I'm new to CodeIgniter and need some help :).
I managed to build a CRUD functions with ajax over some tutorials and I can Edit, Add new, Delete all user shown on my page. What I want now is when i Login with a user I just want the Logged in Profile to be Edited, not others. Please if someone can help me how can I manage to do that. Thank You in Advance.
Employee.php Controller
<?php
defined('BASEPATH') OR exit('No direct sripct access allowed');
Class Employee extends CI_Controller
{
function __construct()
{
parent::__construct();
$this->load->model('Employee_m', 'm');
}
function index()
{
$this->load->view('employee/index');
}
public function showAllEmployee()
{
$result = $this->m->showAllEmployee();
echo json_encode($result);
}
public function add_user()
{
$result = $this->m->add_user();
$msg['success'] = false;
$msg['type'] = 'add';
if ($result) {
$msg['success'] = true;
}
echo json_encode($msg);
}
public function edit_user()
{
$result = $this->m->edit_user();
echo json_encode($result);
}
public function update_user()
{
$result = $this->m->update_user();
$msg['success'] = false;
$msg['type'] = 'update';
if ($result) {
$msg['success'] = true;
}
echo json_encode($msg);
}
public function delete_user()
{
$result = $this->m->delete_user();
$msg['success'] = false;
if ($result) {
$msg['success'] = true;
}
echo json_encode($msg);
}
Employee_m Model
<?php defined('BASEPATH') OR exit('No direct sripct access allowed');
class Employee_m extends CI_Model
{
public function showAllEmployee()
{
$query = $this->db->get('users');
if ($query->num_rows() > 0){
return $query->result();
}
else
{
return false;
}
}
public function add_user()
{
$field = array(
'firstname' => $this->input->post('txtFirstName'),
'lastname' => $this->input->post('txtLastName'),
'username' => $this->input->post('txtUsername'),
'user_email' => $this->input->post('txtUserEmail'),
'user_password' => $this->input->post('txtUserPassword')
);
$this->db->insert('users',$field);
if ($this->db->affected_rows() > 0){
return true;
}else{
return false;
}
}
public function get_id(){
$id = $this->input->get('id');
$this->db->where('id',$id);
$query = $this->db->get('users');
if ($query->num_rows() > 0){
return $query->result();
}
else
{
return false;
}
}
public function update_user()
{
$id = $this->input->post('txtId');
$field = array(
'firstname' => $this->input->post('txtFirstName'),
'lastname' => $this->input->post('txtLastName'),
'username' => $this->input->post('txtUsername'),
'user_email' => $this->input->post('txtUserEmail'),
'user_password' => $this->input->post('txtUserPassword')
);
$this->db->where('id',$id);
$this->db->update('users',$field);
if ($this->db->affected_rows() > 0){
return true;
}else{
return false;
}
}
function delete_user()
{
$id = $this->input->get('id');
$this->db->where('id',$id);
$this->db->delete('users');
if ($this->db->affected_rows() > 0){
return true;
}else{
return false;
}
}
}
Index View
<?php $this->load->view('components/page_head'); ?>
<?php
if (isset($this->session->userdata['logged_in'])) {
$username = ($this->session->userdata['logged_in']['username']);
$id = ($this->session->userdata['logged_in']['id']);
} else {
header("location: user_authentication");
}
?>
<div class="col-sm-9">
<div class="alert alert-success" style="display: none;">
</div>
<button id="btnAdd" class="btn btn-success">Add New</button>
<table class="table table-bordered table-responsive" style="margin-top: 20px;">
<thead>
<tr>
<td>ID</td>
<td>First Name</td>
<td>Last Name</td>
<td>Username</td>
<td>e-Mail</td>
<td>Actions</td>
</tr>
</thead>
<tbody id="showdata">
</tbody>
</table>
<div id="myModal" class="modal fade" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title">Modal title</h4>
</div>
<div class="modal-body">
<form id="myForm" action="" method="post" class="form-horizontal">
<input type="hidden" name="txtId" value="0">
<div class="form-group">
<label class="label-control col-md-4">First Name</label>
<div class="col-md-6">
<input type="text" name="txtFirstName" class="form-control">
</div>
</div>
<div class="form-group">
<label class="label-control col-md-4">Last Name</label>
<div class="col-md-6">
<input type="text" name="txtLastName" class="form-control">
</div>
</div>
<div class="form-group">
<label class="label-control col-md-4">Username</label>
<div class="col-md-6">
<input type="text" name="txtUsername" class="form-control">
</div>
</div>
<div class="form-group">
<label class="label-control col-md-4">e-Mail</label>
<div class="col-md-6">
<input type="email" name="txtUserEmail" class="form-control">
</div>
</div>
<div class="form-group">
<label class="label-control col-md-4">Password</label>
<div class="col-md-6">
<input type="password" name="txtUserPassword" class="form-control" placeholder="******">
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" id="btnSave" class="btn btn-primary">Save changes</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
<div id="deleteModal" class="modal fade" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title">Confirm Delete</h4>
</div>
<div class="modal-body">
Do you want to delete this record?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" id="btnDelete" class="btn btn-danger">Delete</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
<script>
$(function () {
showAllEmployee();
// Add New
$('#btnAdd').click(function () {
$('#myModal').modal('show');
$('#myModal').find('.modal-title').text('Add new user');
$('#myForm').attr('action','<?php echo base_url() ?>employee/add_user');
});
$('#btnSave').click(function () {
// alert('test');
var url = $('#myForm').attr('action');
var data = $('#myForm').serialize();
// validate the form
var firstname = $('input[name=txtFirstName]');
var lastname = $('input[name=txtLastName]');
var username = $('input[name=txtUsername]');
var user_email = $('input[name=txtUserEmail]');
var user_password = $('input[name=txtUserPassword]');
var result = '';
if (firstname.val()==''){
firstname.parent().parent().addClass('has-error');
}else {
firstname.parent().parent().removeClass('has-error');
result +='1';
}
if (lastname.val()==''){
lastname.parent().parent().addClass('has-error');
}else {
lastname.parent().parent().removeClass('has-error');
result +='2';
}
if (username.val()==''){
username.parent().parent().addClass('has-error');
}else {
username.parent().parent().removeClass('has-error');
result +='3';
}
if (user_email.val()==''){
user_email.parent().parent().addClass('has-error');
}else {
user_email.parent().parent().removeClass('has-error');
result +='4';
}
if (user_password.val()==''){
user_password.parent().parent().addClass('has-error');
}else {
user_password.parent().parent().removeClass('has-error');
result +='5';
}
if(result == '12345'){
$.ajax({
type: 'ajax',
method: 'post',
url: url,
data: data,
async: false,
dataType: 'json',
success: function (response) {
if (response.success){
$('#myModal').modal('hide');
$('#myForm')[0].reset();
if(response.type=='add'){
var type = 'added'
}else if(response.type=='update'){
var type ="updated"
}
$('.alert-success').html('User '+type+' successfully').fadeIn().delay(4000).fadeOut('slow');
showAllEmployee();
}else{
alert('Error');
}
},
error: function () {
alert('Could not add Data ');
}
});
}
});
//edit
$('#showdata').on('click', '.item-edit', function() {
var id = $(this).attr('data');
$('#myModal').modal('show');
$('#myModal').find('.modal-title').text('edit user');
$('#myForm').attr('action','<?php echo base_url() ?>employee/update_user');
$.ajax({
type: 'ajax',
method: 'get',
url: '<?php echo base_url() ?>employee/edit_user',
data: {id: id},
async: false,
dataType: 'json',
success: function(data) {
$('input[name=txtFirstName]').val(data.firstname);
$('input[name=txtLastName]').val(data.lastname);
$('input[name=txtUsername]').val(data.username);
$('input[name=txtUserEmail]').val(data.user_email);
$('input[name=txtUserPassword]').val(data.user_password);
$('input[name=txtId]').val(data.id);
},
error: function() {
alert('Could not Edit Data');
}
});
});
//delete
$('#showdata').on('click', '.item-delete', function () {
var id = $(this).attr('data');
$('#deleteModal').modal('show');
$('#btnDelete').unbind().click(function () {
$.ajax({
type: 'ajax',
method: 'get',
async: false,
url: '<?php echo base_url() ?>employee/delete_user',
data: {id: id},
dataType: 'json',
success: function (response) {
if(response.success){
$('#deleteModal').modal('hide');
$('.alert-success').html('User deleted successfully').fadeIn().delay(4000).fadeOut('slow');
showAllEmployee();
}else{
alert('Error');
}
},
error: function () {
alert('Error deleting');
}
});
});
});
//function
function showAllEmployee() {
$.ajax({
type: 'ajax',
url: '<?php echo base_url() ?>employee/showAllEmployee',
async: false,
dataType: 'json',
success: function (data) {
var html = '';
var i;
for (i = 0; i < data.length; i++) {
html += '<tr>' +
'<td>'+data[i].id+'</td>'+
'<td>' + data[i].firstname + '</td>' +
'<td>' + data[i].lastname + '</td>' +
'<td>' + data[i].username + '</td>' +
'<td>' + data[i].user_email + '</td>' +
'<td>' +
'Edit' +
'Delete' +
'</td>' +
'</tr>';
}
$('#showdata').html(html);
},
error: function () {
alert('Could not get Data from Database');
}
});
}
});
</script>
</div>
<div class="col-sm-3">
<?php
echo "Hello <b id='welcome'><i>" . $username . "</i> !</b>";
echo "<br/>";
echo "Your ID is " . $id;
echo "<br/>";
?>
Logout
</div>
<?php $this->load->view('components/page_tail'); ?>
You need to fetch that user details to index page to avoid edting for other or need to set some condition such as passing users id on edit check if it same as edit id and then proceed for edit opertaion or else return some message