WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I am using a plugin (PHP code for Posts) that allows me to insert php code to my pages and posts. I have a table in my php code that I need to sort it using AJAX. What I have done so far is sorting the table by refreshing the page.

Here is how the PHP code is being imported:

Here is the plugin and its code:

Basicaly there is an SQL querry that fills the table with the data.

<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<?php

$choise=$_REQUEST['c'];

//Η τιμή που έχει σταλεί από τη javascript συνάρτηση μέσω URL και δείχνει ποιο εξάμηνο είναι επιλεγμένο
$sem=$_REQUEST['sem'];

//Η τιμή που έχει σταλεί από τη javascript συνάρτηση μέσω URL και δείχνει ο τρόπος ταξινόμησης που είναι επιλεγμένος
$order=$_REQUEST['o'];

//Βρίσκουμε το τρέχον εξάμηνο
$query_current="select * from current_semester";
$result_current=mysql_query($query_current);
$element_current=mysql_fetch_row($result_current);
$sem1=$element_current[0];

//Αν δεν έχει οριστεί η κατηγορία των πτυχιακών(διαθέσιμες/ενεργές/οι πτυχιακές μου) θεωρούμε by default τις διαθέσιμες
if(!isset($_REQUEST['c']))
{
    $choise='diath';
}

//Αν δεν έχει επιλεγεί κάποιο εξάμηνο θεωρούμε by default το τρέχον
if(!isset($_REQUEST['sem']))
{
$sem=$sem1;
}

//Αν δεν έχει οριστεί ο τρόπος ταξινόμησης θεωρούμε by default το asc
if(!isset($_REQUEST['o']))
{
    $order='asc';
}

//Αν έχει οριστεί ο τρόπος ταξινόμισης εκτελείται το else
else
{
    //Αν το URL λέει asc τότε στην μεταβλητή βάζουμε το αντίστροφο έτσι ώστε η επόμενη ταξινόμηση να γίνει desc
    if($order=='asc')
    {
        $order='desc';
    }

    //Αν το URL λέει desc τότε στην μεταβλητή βάζουμε το αντίστροφο έτσι ώστε η επόμενη ταξινόμηση να γίνει asc
    elseif($order=='desc')
    {
        $order='asc';
    }
}


//Για τις Διαθεσιμές ΠΕ, ελέγχουμε επίσης αν έχει επιλεχθεί ταξινόμηση, το πεδίο ταξινόμησης και ο τρόπος ταξινόμησης
if(!isset($_REQUEST['o']))
{
     $query_diss="select * from dissertations where status='0' order by dateassign desc, titlegr asc";
}
elseif($order=='asc')
{
    $query_diss="select * from dissertations where status='0' order by ".$_REQUEST['f']." desc";
}
elseif($order=='desc')
{
    $query_diss="select * from dissertations where status='0' order by ".$_REQUEST['f']." asc";
}
$result_diss=mysql_query($query_diss);
$num_row_diss=mysql_num_rows($result_diss);

//Αν βρέθηκαν ΠΕ σύμφωνα με τα κριτήρια/tabs που επιλέχθηκαν εκτελείται το if και εμφανίζονται οι ΠΕ
if($num_row_diss!=0)
{
    //Οι Πτυχιακές και τα στοιχεία τους θα εμφανίζονται μέσα σε πίνακα
    echo "<table id='thesis_table' width='100%' height='100%' class='sortable' style='overflow-x:auto'>";
    echo "<tr>";

    //Οι αναγνωριστικές στήλες του πίνακα ΠΕ - 3 από αυτές είναι links που λειτουργούν ως αλλαγή ταξινόμισης (καλούν javascript συνάρτηση)
    echo "<td style='color:black; background:#038a91'><b>ΑΑ</b></td><b>";
    ?>
    <td style='color:black; background:#038a91'><b><a href='#' id='titlegr' style='color: black' onclick='sort_diss_declar("<?php echo $choise;?>",this.id,"<?php echo $order;?>","<?php echo $sem;?>")'>Τίτλος</a></b></td>
    <td style='color:black; background:#038a91'><b><a href='#' id='semester' style='color: black' onclick='sort_diss_declar("<?php echo $choise;?>",this.id,"<?php echo $order;?>","<?php echo $sem;?>")'  >Εξάμηνο</a></b></td>
    <td style='color:black; background:#038a91'><b><a href='#' id='typeassign' style="color: black" onclick='sort_diss_declar("<?php echo $choise;?>",this.id,"<?php echo $order;?>","<?php echo $sem;?>")'>Τύπος Ανάθεσης</a></b></td>
    <?php
    echo "<td style='color:black; background:#038a91'><b>Ανάθεση</b></td><b>";
    ?>
    <td style='color:black; background:#038a91'><b><a href='#' id='sup_lastname' style="color: black" onclick='sort_diss_declar("<?php echo $choise;?>",this.id,"<?php echo $order;?>","<?php echo $sem;?>")'>Επιβλέπων</a></b></td>
    <?php
    echo "<td style='color:black; background:#038a91'><b>Προαπ/να</b></td></tr>";

    //Η διαδικασία γίνεται για όλες τις Πτυχιακές
    while ($row = mysql_fetch_array($result_diss))
    {
        //Βάση του supervisor στον πίνακα dissertations, βρίσκουμε το ονοματεπώνυμο του επιβλέποντα στον πίνακα professors
        $query_supervisor= "select * from professors where username='".$row['supervisor']."'";
        $result_supervisor=mysql_query($query_supervisor);
        $element_supervisor=mysql_fetch_row($result_supervisor);

        //Αν στη βάση είναι null ο πρώτος φοιτητής σημαίνει ότι δεν την έχει αναλάβει κανένας φοιτητής ακόμα
        //και αφήνουμε άδειες τις μεταβλητές που θα εμφανίζουν το ονοματεπώνυμο του φοιτητή
        if($row['student1']==null)
        {
            $first_name_first_student="";
            $last_name_first_student="";
        }

        //Αλλιώς με βάση τον ΑΜ βρίσκουμε το ονοματεπώνυμο του πρώτου φοιτητή και γεμίζουμε τις μεταβλητές
        else
        {
            $query_first_student= "select * from students where am='".$row['student1']."'";
            $result_first_student=mysql_query($query_first_student);
            $element_first_student=mysql_fetch_row($result_first_student);
            $first_name_first_student=$element_first_student[2];
            $last_name_first_student=$element_first_student[3];
        }

        //Αν στη βάση είναι null ο δεύτερος φοιτητής σημαίνει ότι δεν την έχει αναλάβει κανένας φοιτητής ακόμα
        //και αφήνουμε άδειες τις μεταβλητές που θα εμφανίζουν το ονοματεπώνυμο του φοιτητή
        if($row['student2']==null)
        {
            $first_name_second_student="";
            $last_name_second_student="";
        }

        //Αλλιώς με βάση τον ΑΜ βρίσκουμε το ονοματεπώνυμο του δεύτερου φοιτητή και γεμίζουμε τις μεταβλητές
        else
        {
            $query_second_student= "select * from students where am='".$row['student2']."'";
            $result_second_student=mysql_query($query_second_student);
            $element_second_student=mysql_fetch_row($result_second_student);
            $first_name_second_student=$element_second_student[2];
            $last_name_second_student=$element_second_student[3];
        }

        //------------------------------------------------------------------------------------------------------------------------------------------------------------------
        //Βρίσκουμε ποιά προαπαιτούμενα έχουν οριστεί και τα εμφανίζουμε με χρήση array για να μην υπάρχουν κενά σε περίπτωση λάθους εισαγωγής του καθηγητή
        $i=0;
        if(($row['course1']!="") && ($row['course1']!=NULL))
        {
            $courseArray_courses[$i] = $row['course1'];
            $i++;
        }
        if(($row['course2']!="") && ($row['course2']!=NULL))
        {
            $courseArray_courses[$i] = $row['course2'];
            $i++;
        }
        if(($row['course3']!="") && ($row['course3']!=NULL))
        {
            $courseArray_courses[$i] = $row['course3'];
            $i++;
        }
        if(($row['course4']!="") && ($row['course4']!=NULL))
        {
            $courseArray_courses[$i] = $row['course4'];
            $i++;
        }

        if($i==2)
        {
            $proap="1) ".$courseArray_courses[0]."</br>2) ".$courseArray_courses[1];
        }
        elseif($i==3)
        {
            $proap="1) ".$courseArray_courses[0]."</br>2) ".$courseArray_courses[1]."</br>3) ".$courseArray_courses[2];
        }
        else
        {
            $proap="1) ".$courseArray_courses[0]."</br>2) ".$courseArray_courses[1]."</br>3) ".$courseArray_courses[2]."</br>4) ".$courseArray_courses[3];
        }

        //------------------------------------------------------------------------------------------------------------------------------------------------------------------
        //Βρίσκουμε ποιά tags έχουν οριστεί και τα εμφανίζουμε με χρήση array για να μην υπάρχουν κενά σε περίπτωση λάθους εισαγωγής του καθηγητή
        $i=0;
        if(($row['tag1']!="") && ($row['tag1']!=NULL))
        {
            $courseArray_tags[$i] = $row['tag1'];
            $i++;
        }
        if(($row['tag2']!="") && ($row['tag2']!=NULL))
        {
            $courseArray_tags[$i] = $row['tag2'];
            $i++;
        }
        if(($row['tag3']!="") && ($row['tag3']!=NULL))
        {
            $courseArray_tags[$i] = $row['tag3'];
            $i++;
        }
        if(($row['tag4']!="") && ($row['tag4']!=NULL))
        {
            $courseArray_tags[$i] = $row['tag4'];
            $i++;
        }
        if($i==1)
        {
            $tags="1) ".$courseArray_tags[0];
        }
        elseif($i==2)
        {
            $tags="1) ".$courseArray_tags[0]."</br>2) ".$courseArray_tags[1];
        }
        elseif($i==3)
        {
            $tags="1) ".$courseArray_tags[0]."</br>2) ".$courseArray_tags[1]."</br>3) ".$courseArray_tags[2];
        }
        else
        {
            $tags="1) ".$courseArray_tags[0]."</br>2) ".$courseArray_tags[1]."</br>3) ".$courseArray_tags[2] ."</br>4) ".$courseArray_tags[3];
        }

        //------------------------------------------------------------------------------------------------------------------------------------------------------------------
        //Βρίσκουμε ποιoί τύποι έχουν οριστεί και τους εμφανίζουμε με χρήση array για να μην υπάρχουν κενά σε περίπτωση λάθους εισαγωγής του καθηγητή
        $i=0;
        if(($row['type1']!="") && ($row['type1']!=NULL))
        {
            $courseArray_types[$i] = $row['type1'];
            $i++;
        }
        if(($row['type2']!="") && ($row['type2']!=NULL))
        {
            $courseArray_types[$i] = $row['type2'];
            $i++;
        }
        if(($row['type3']!="") && ($row['type3']!=NULL))
        {
            $courseArray_types[$i] = $row['type3'];
            $i++;
        }

        if($i==1)
        {
            $types="1) ".$courseArray_types[0];
        }
        elseif($i==2)
        {
            $types="1) ".$courseArray_types[0]."</br>2) ".$courseArray_types[1];
        }
        elseif($i==3)
        {
            $types="1) ".$courseArray_types[0]."</br>2) ".$courseArray_types[1]."</br>3) ".$courseArray_types[2];
        }
        else
        {
            $types="";
        }

        //Βρίσκουμε αν η ΠΕ είναι με απευθείας ανάθεση ή με διαγωνισμό
        if($row['directassign']==1)
        {
            $assign="Απευθείας Ανάθεση";
        }
        else
        {
            $assign="Με διαγωνισμό";
        }

        //Χρησιμοποιούμε την μεταβλητή $aykswn για να αριθμούμε τα θέματα(ΠΡΟΣΟΧΗ δεν βάζουμε το id της ΠΕ γιατί δημιουργείται με auto increment
        //και αυτό δημιουργεί προβλήματα - θα υπάρχουν δηλαδή κενά αριθμών αν γίνουν διαγραφές θεμάτων)
        $aykswn++;

        //Εμφανίζουμε για κάθε Πτυχιακή τον αύξων αριθμό, τον τίτλο,ομαδική/ατομική, ον/μο επιβλέπων, προαπαιτούμενα, tags, τύπο, και περισσότερα
        //p=57 ειναι ο wordpress κωδικός της σελίδας 'Λεπτομέριες' για την πτυχιακή
        echo "<tr>
        <td>$aykswn</td>
        <td><a href='?p=57&diss_id=$row[id]'><font color='038a91'>$row[titlegr]</font></td>
        <td>$row[semester]</td>
        <td>$row[typeassign]</td>
        <td>$assign</td>
        <td>$element_supervisor[2]  $element_supervisor[1]</td>";
        echo "<td style='width:240px'>$proap</td>
        </tr>";


        //Μηδενίζουμε τα arrays για να χρησιμοποιηθούν για την επόμενη ΠΕ
        $courseArray_courses[0]="";$courseArray_courses[1]="";$courseArray_courses[2]="";$courseArray_courses[3]="";
        $courseArray_tags[0]="";$courseArray_tags[1]="";$courseArray_tags[2]="";
        $courseArray_types[0]="";$courseArray_types[1]="";$courseArray_types[2]="";$courseArray_types[3]="";$courseArray_types[4]="";$courseArray_types[5]="";
    }
//Εδώ τελειώνει ο πίνακας
echo "</table>";
}

//Αν δεν βρέθηκαν ΠΕ σύμφωνα με τα κριτήρια/tabs που επιλέχθηκαν εκτελείται το else και εμφανίζεται κατάλληλο μήνυμα
else    
{
    echo "<p><p>";echo "Δεν βρέθηκαν Διαθέσιμες Πτυχιακές του εξαμήνου '".$sem."'";
}
?>
</body>
</html>

Here is the JS function for sorting:

    function sort_diss_declar(c,f,o,sem)
    { 
    //p=22 wordpress id of the "declartion" page (first image)
    window.location = "?p=22&c=" + c + "&f=" + f + "&o=" + o + "&sem=" + sem;
    }
share|improve this question
    
What your doing is incredibly dangerous and insecure, what's to stop somebody putting a PHP shell in there and turning it into a zombie in a botnet? There's a reason shortcodes are in place instead of just writing PHP code directly into content, plugins that let you put raw PHP code into content stored in the database are horrifyingly insecure – Tom J Nowell 1 hour ago
    
Yes, I know. It's not my main concern right now, I am stuck with how to implement AJAX at the moment. Feel free to suggest another way to implement my PHP code. – Stamatia Ch 1 hour ago
    
To do it the correct way you're going to need the WordPress APIs, but since your code is being passed as a string to eval you can't just bootstrap WordPress to get the APIs, and you can't add a filter to recieve the request via WP AJAX, because that code only runs when your code is ran through eval on that page, same problem with register_rest_route. You're running down a dead end road at 60mph – Tom J Nowell 53 mins ago
    
As a sidenote, most of these snippets could be trivially converted into real shortcodes and .php files – Tom J Nowell 33 mins ago

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.