0

I've got a CV database, you can see the fields below and they are pretty standard. Retrieval is done by a simple form sending the information into an SQL database.

I was happy with my simple system till I was flooded with over 500 applicants in my inbox. My previous system allowed me to view the applicants only one by one which would have taken forever...

What I'm trying to achieve is a simple backend page similar to the phpmyadmin of the table view. (no i don't want to just use phpmyadmin as i'd like to give the CV sifting task to other employees)

Basically the concept is to display the table like an excel, allow sorting by clicking on headers, pagination [20 rows per page] and a check box to delete row.

I'm ok with asking for some help as I have put alot of effort into trying to figure this out ;)

So far what i've got is:

The sorting works no problem, clicking on one of the headers spits out localhost/mena/new3.php?sort=fname to the address bar and parses the correct Sql query and sorts the page.

The pagination so far does not work. The page displays all 815 candidates. It is providing the numbered links 1-42 that when clicked on result in the address bar changing to localhost/new3.php?page=2 but 0 change.

Also for the life of me i can't see how to include the php delete into this..

9 yo pseudo code idea of it is :

//Input the rows from SQL
While($row = mysqli_fetch_array($result))
  {
  echo "<tr>";
  echo "<td> $checkbox1
  if checkbox1=true then mysqli_query($con,"DELETE FROM cv WHERE .$row[].");
  echo "<td>" . $row['title'] . 

My code so far:

<?php
$con=mysqli_connect("localhost","root","","test_db-jil");
// Check connection
if (mysqli_connect_errno($con))
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

// Pagination  
if (isset($_GET["page"])) { $page  = $_GET["page"]; } else { $page=1; }; 
$start_from = ($page-1) * 20; 

// Sort, from headers.
if(isset($_REQUEST['sort'])){
    if($_GET['sort'] == "title"){
    $result = mysqli_query($con,"SELECT * FROM cv ORDER BY title");
    }
    elseif($_GET['sort'] == "fname"){
    $result = mysqli_query($con,"SELECT * FROM cv ORDER BY fname");
    }
    elseif($_GET['sort'] == "lname"){
    $result = mysqli_query($con,"SELECT * FROM cv ORDER BY lname");
    }
    elseif($_GET['sort'] == "gender"){
    $result = mysqli_query($con,"SELECT * FROM cv ORDER BY gender");
    }
    elseif($_GET['sort'] == "dob"){
    $result = mysqli_query($con,"SELECT * FROM cv ORDER BY dob");
    }
    elseif($_GET['sort'] == "nationality"){
    $result = mysqli_query($con,"SELECT * FROM cv ORDER BY nationality");
    }
    elseif($_GET['sort'] == "language"){
    $result = mysqli_query($con,"SELECT * FROM cv ORDER BY language");
    }
    elseif($_GET['sort'] == "phone"){
    $result = mysqli_query($con,"SELECT * FROM cv ORDER BY phone");
    }
    elseif($_GET['sort'] == "email"){
    $result = mysqli_query($con,"SELECT * FROM cv ORDER BY email");
    }
    elseif($_GET['sort'] == "uni"){
    $result = mysqli_query($con,"SELECT * FROM cv ORDER BY uni");
    }
    elseif($_GET['sort'] == "prog"){
    $result = mysqli_query($con,"SELECT * FROM cv ORDER BY prog");
    }
    elseif($_GET['sort'] == "graddate"){
    $result = mysqli_query($con,"SELECT * FROM cv ORDER BY graddate");
    }
    elseif($_GET['sort'] == "startdate"){
    $result = mysqli_query($con,"SELECT * FROM cv ORDER BY startdate");
    }
    elseif($_GET['sort'] == "grad"){
    $result = mysqli_query($con,"SELECT * FROM cv ORDER BY grad");
    }   
    else{
    $result = mysqli_query($con,"SELECT * FROM cv ORDER BY fname");
    }
}
else{ // Default if no parameters passed
    $result = mysqli_query($con,"SELECT * FROM cv");
    }


//Table of Content  
echo "<table border='1'>
<tr>
<th><a href=new3.php?sort=title>Title</a></th>

<th><a href=new3.php?sort=fname>First Name</a></th>

<th><a href=new3.php?sort=lname>Last Name</a></th>

<th><a href=new3.php?sort=gender>Gender</a></th>

<th><a href=new3.php?sort=dob>Date Of Birth</a></th>

<th><a href=new3.php?sort=nationality>Nationality</a></th>

<th><a href=new3.php?sort=language>Language</a></th>

<th><a href=new3.php?sort=phone>Phone No</a></th>

<th><a href=new3.php?sort=email>Email</a></th>

<th><a href=new3.php?sort=uni>University</a></th>

<th><a href=new3.php?sort=prog>Program</a></th>

<th><a href=new3.php?sort=graddate>Graduated</a></th>

<th><a href=new3.php?sort=startdate>Start Date</a></th>

<th><a href=new3.php?sort=grad>Applying for</a></th>

<th>CV File</th>

</tr>";

//Input the rows from SQL
While($row = mysqli_fetch_array($result))
  {
  echo "<tr>";
  echo "<td>" . $row['title'] . "</td>";
  echo "<td>" . $row['fname'] . "</td>";
  echo "<td>" . $row['lname'] . "</td>";
  echo "<td>" . $row['gender'] . "</td>";
  echo "<td>" . $row['dob'] . "</td>";
  echo "<td>" . $row['nationality'] . "</td>";
  echo "<td>" . $row['language'] . "</td>";
  echo "<td>" . $row['phone'] . "</td>";
  echo "<td>" . $row['email'] . "</td>";
  echo "<td>" . $row['uni'] . "</td>";
  echo "<td>" . $row['prog'] . "</td>";
  echo "<td>" . $row['graddate'] . "</td>";
  echo "<td>" . $row['startdate'] . "</td>";
  echo "<td>" . $row['grad'] . "</td>";
  echo "<td><a href=" . $row['cvfilename'] .">" . $row['cvfilename'] ."</a></td>";


  echo "</tr>";
  }
echo "</table>";

//Get total count of rows then ceil divide by 20 as pages
$sql = "SELECT COUNT(*) as 'num' FROM cv";
$total_pages = $con->query($sql) or die(mysqli_error($connection)); 
$row = $total_pages->fetch_assoc();
$total_pages  = ceil($row['num'] / 20);

for ($i=1; $i<=$total_pages; $i++) { 
            //Can I ?page= and ?sort= ??????
            echo "<a href='new3.php?page=".$i."'>".$i."</a> "; 
};

mysqli_close($con);
?>

Recap, please help me fix pagination, have it work with sort and finally add a delete check box to each row. :)

presdec
  • 3
  • 1
  • 3

1 Answers1

1

You know you can optimize that entire block of "else if" statements by just assigning the

$_GET to a variable: $type = $_GET;

Then use that in your mysqli: $result = mysqli_query($con, "SELECT * FROM cv ORDER BY $type");

To limit your results use LIMIT: $result = mysqli_query($con, "SELECT * FROM cv ORDER BY $type LIMIT 20, $page");

20 = how many to return $page = where you want the results to start from

Saucy
  • 26
  • 2
  • @your-common-sense however now i'm getting:( ! ) Notice: Undefined index: sort in C:\wamp\www\mena\index2.php on line 10 `$orders=array("title","fname","lname","gender","dob","nationality","language","phone","email","uni","prog","graddate","startdate","grad"); //field names $key = array_search($_GET['sort'],$orders); // see if we have such a name $orderby = $orders[$key]; //if not, first one will be set automatically. smart enuf :) $query = "SELECT * FROM cv ORDER BY $orderby"; //value is safe $result = mysqli_query($con,$query);` – presdec Jun 03 '13 at 17:26
  • line 10 : '$key = array_search($_GET['sort'],$orders); // see if we have such a name' – presdec Jun 03 '13 at 18:07