LINKS in SERVERSIDE

LINKS in SERVERSIDE

juvayusjuvayus Posts: 7Questions: 1Answers: 0

I have a table in mysql that contains a column with an id. I want to add in my table a link for each row with the same address that only depends on that id. How can I do it?

PHP

<?php
/* Database connection start */


$conn = mysqli_connect($servername, $username, $password, $dbname) or die("Connection failed: " . mysqli_connect_error());
mysqli_set_charset($conn, "utf8");
/* Database connection end */


// storing  request (ie, get/post) global array to a variable  
$requestData= $_REQUEST;


$columns = array( 
// datatable column index  => database column name
    0 =>'titulo',
    1 => 'descripcion'
);

// getting total number records without any search
$sql = "SELECT titulo, descripcion  ";
$sql.=" FROM ocios";
$query=mysqli_query($conn, $sql) or die("employee-grid-data.php: get employees");
$totalData = mysqli_num_rows($query);
$totalFiltered = $totalData;  // when there is no search parameter then total number rows = total number filtered rows.


if( !empty($requestData['search']['value']) ) {
    // if there is a search parameter
    $sql = "SELECT titulo, descripcion ";
    $sql.=" FROM ocios";
    $sql.=" WHERE titulo LIKE '".$requestData['search']['value']."%' ";
    // $requestData['search']['value'] contains search parameter
    $sql.=" OR descripcion LIKE '".$requestData['search']['value']."%' ";

    $query=mysqli_query($conn, $sql) or die("employee-grid-data.php: get employees");
    $totalFiltered = mysqli_num_rows($query); // when there is a search parameter then we have to modify total number filtered rows as per search result without limit in the query 

    $sql.=" ORDER BY ". $columns[$requestData['order'][0]['column']]."   ".$requestData['order'][0]['dir']."   LIMIT ".$requestData['start']." ,".$requestData['length']."   "; // $requestData['order'][0]['column'] contains colmun index, $requestData['order'][0]['dir'] contains order such as asc/desc , $requestData['start'] contains start row number ,$requestData['length'] contains limit length.
    $query=mysqli_query($conn, $sql) or die("employee-grid-data.php: get employees"); // again run query with limit
    
} else {    

    $sql = "SELECT titulo,  descripcion";
    $sql.=" FROM ocios";
    $sql.=" ORDER BY ". $columns[$requestData['order'][0]['column']]."   ".$requestData['order'][0]['dir']."   LIMIT ".$requestData['start']." ,".$requestData['length']."   ";
    $query=mysqli_query($conn, $sql) or die("employee-grid-data.php: get employees");
    
}

$data = array();
while( $row=mysqli_fetch_array($query) ) {  // preparing an array
    $nestedData=array(); 

    $nestedData[] = $row["titulo"];
    $nestedData[] = $row["descripcion"];

    $data[] = $nestedData;
    
}


$json_data = array(
            "draw"            => intval( $requestData['draw'] ),   // for every request/draw by clientside , they send a number as a parameter, when they recieve a response/data they first check the draw number, so we are sending same number in draw. 
            "recordsTotal"    => intval( $totalData ),  // total number of records
            "recordsFiltered" => intval( $totalFiltered ), // total number of records after searching, if there is no searching then totalFiltered = totalData
            "data"            => $data   // total data array
            );


echo json_encode($json_data);  // send data as json format


<?php
>
?>


HTML

<!DOCTYPE html>
<html>
    <title>Datatable Demo1 | CoderExample</title>
    <head>
        <link rel="stylesheet" type="text/css" href="css/jquery.dataTables.css">
        <script type="text/javascript" language="javascript" src="js/jquery.js"></script>
        <script type="text/javascript" language="javascript" src="js/jquery.dataTables.js"></script>
        <script type="text/javascript" language="javascript">
            $(document).ready(function() {
                var dataTable = $('#employee-grid').DataTable( {
                    "processing": true,
                    "serverSide": true,
                    "ajax":{
                        url :"employee-grid-data.php", // json datasource
                        type: "post",  // method  , by default get
                        error: function(){  // error handling
                            $(".employee-grid-error").html("");
                            $("#employee-grid").append('<class="employee-grid-error"><tr><th colspan="3">No data found in the server</th></tr>');
                            $("#employee-grid_processing").css("display","none");
                            
                        }
                    }
                } );
            } );
        </script>
        <style>
            div.container {
                margin: 0 auto;
                max-width:760px;
            }
            div.header {
                margin: 100px auto;
                line-height:30px;
                max-width:760px;
            }
            body {
                background: #f7f7f7;
                color: #333;
                font: 90%/1.45em "Helvetica Neue",HelveticaNeue,Verdana,Arial,Helvetica,sans-serif;
            }
        </style>
    </head>
    <body>
        <div class="header"><h1>DataTable demo (Server side) in Php,Mysql and Ajax </h1></div>
        <div class="container">
            <table id="employee-grid"  cellpadding="0" cellspacing="0" border="0" class="display" width="100%">
                    <thead>
                        <tr>
                            <th>Employee name</th>
                            <th>Employee name</th>
                        </tr>
                    </thead>
            </table>
        </div>
    </body>
</html>

Replies

  • kthorngrenkthorngren Posts: 20,667Questions: 26Answers: 4,836

    You can use columns.render. The doc shows an example of building a URL in a column.

    Kevin

  • juvayusjuvayus Posts: 7Questions: 1Answers: 0

    But, Can I use in my case?

    The example i see is

    $('#example').dataTable( {
      "columnDefs": [ {
        "targets": 0,
        "data": "download_link",
        "render": function ( data, type, row, meta ) {
          return '<a href="'+data+'">Download</a>';
        }
      } ]
    } );
    
  • kthorngrenkthorngren Posts: 20,667Questions: 26Answers: 4,836
    edited January 2018

    I'm not very familiar with PHP but it looks like you are returning title and description columns. You would need to return your id column also. It doesn't need to be in the table but can be accessed using the row parameter of the of the render function. You can you console.log(row); within the render function to see this.

    You will have to set the other parameters, such as targets, as appropriate for your table. And the return will need to be changed to reference the desired array element in row to build the URL.

    Here is a live example you can look at. Doesn't return a URL but it could.

    Kevin

This discussion has been closed.