Project

General

Profile

Actions

Χρήσιμες συναρτήσεις βιβλιοθήκης

include/main_lib.php

Το αρχείο main_lib.php γίνεται αυτόματα include.

Είσοδος τιμών από το χρήστη (GET, POST)

$user_id = intval($_GET['user_id']);

Για την είσοδο πολλαπλών τιμών που έρχονται με POST, έχουμε την παρακάτω κλήση:

register_posted_variables($var_array, $what = 'all', $callback = null);

Για παράδειγμα: Θέλουμε να ορίσουμε τις global μεταβλητές string $name και $description, οι οποίες περιέχουν τις τιμές των αντίστοιχων τιμών του POST με αυτόματο escaping/quoting, και τις ακέραιες μεταβλητές $student_id και $group_id. Η τιμή description είναι προαιρετική.

$form_ok = register_posted_variables(
                array('name' => true, 'description' => false),
                'all', 'quote') &&
           register_posted_variables(
                array('student_id' => true, 'group_id' => true),
                'all', 'intval');

Η $form_ok θα είναι αληθής αν οι παράμετροι name, student_id και group_id έχουν λάβει μη μηδενικές/κενές τιμές στο POST.

Rich text (HTML) – αποφυγή XSS

Κατά την είσοδο κειμένου rich text που περιέχει formatting (πχ. από σελίδες που χρησιμοποιούν το TinyMCE), το κείμενο πρέπει να περνάει από purify() για να καθαριστεί από σφάλματα και κώδικα JavaScript που επιτρέπει επιθέσεις XSS (Cross Site Scripting).

Παράδειγμα: έστω μια φόρμα από την οποία έρχονται με POST οι τιμές title (plain tex) και description (rich text).

$title = $_POST['title'];
$descr = purify($_POST['description']);
db_query("INSERT INTO posts
                 SET title = " . quote($title) . ",
                     description = " . quote($descr));

Εμφάνιση τιμών – απλό κείμενο

Το απλό κείμενο (plain text) κατά την εμφάνιση στο χρήστη πρέπει να γίνεται escape μέσω της κλήσης q() (ουσιαστικά πρόκειται για alias της htmlspecialchars() με πιο σύντομο όνομα).

$tool_content .= "<t1>" . q($title) . "</t1>";

Εμφάνιση κειμένου με μορφοποίηση (Rich Text – HTML)

Όπως αναφέρθηκε πιο πανω, το rich text κατά την εισαγωγή στη βάση πρέπει να έχει περάσει από την purify(). Στην περίπτωση αυτή, όταν το παίρνουμε από τη βάση και το εμφανίζουμε, αρκεί να το περάσουμε από την standard_text_escape() η οποία αυτή τη στιγμή χειρίζεται τα εξής:

  • Μαθηματικοί τύποι (πχ: [m]y = y^2[/m])
  • Λέξεις γλωσσαρίου (που επεκτείνονται όπου εμφανίζονται σε συνδέσμους με τον ορισμό τους)
$tool_content .= '<div>' . standard_text_escape($descr) . '</div>';

Στην περίπτωση που εμφανίζουμε μια τιμή που δεν έχει περάσει από purify() στην είσοδο, για παράδειγμα αν ξαναδείξουμε στο χρήστη κείμενο που έδωσε, δεν παραλείπουμε το purify():

$tool_content .= standard_text_escape(purify($_POST['descr']));

Εμφάνιση τιμών για χρήση από JavaScript

String που χρησιμοποιούνται σε κώδικα JavaScript πρέπει να γίνονται escape με τη συνάρτηση js_escape(). Για παράδειγμα:

$head_content .= " 
<script type="text/javascript">
var langConfirmDelete = '" . js_escape($langConfirmDelete)  . "';
</script>
";

Πεδία για φόρμες

  • selection($entries, $name, $default = '', $extra = '')
  • multiselection($entries, $name, ...)
    όπου: $entries = array('id1' => 'value1', 'id2' => 'value2' ...)
  • text_area($name, $rows, $cols, $text, $extra = '')
  • rich_text_editor($name, $rows, $cols, $text, $extra = '')

Η παράμετρος $name περιέχει το όνομα του πεδίου στη φόρμα. Η παράμετρος $extra περιέχει πρόσθετες ιδιότητες (πχ. κλάση, id, JavaScript) που θα προστεθούν στο HTML element του πεδίου.

Eμφάνιση ικονιδίων από template/<theme>/img/

icon($name, $title = null, $link = null, $attrs = null, $format = 'png', $link_attrs = '')

Παράδειγμα: εμφάνιση του εικονιδίου cunregister.png το οποίο έχει title/alt text το μήνυμα $langUnregCourse, τον σύνδεσμο της τρίτης παραμέτρου, και την πρόσθετη ιδιότητα JavaScript onClick της τετάρτης παραμέτρου:

$tool_content = icon(
    'cunregister',
    $langUnregCourse,
    "unreg.php?course=$course_code&amp;unregister=$id",
    "onClick=\"return confirmation('" . js_escape($langDeleteUser) . "');\"");

Εμφάνιση χρήστη με link στο προφίλ

Γίνεται με την κλήση display_user($user_id).

Παράδειγμα:

$query = db_query("SELECT * FROM user WHERE id = $user_id");
$user_info = mysql_fetch_assoc($query);
display_user($user_info);

Στοιχεία χρήστη

  • uid_to_username($uid)
  • uid_to_name($uid)
  • uid_to_surname($uid)
  • uid_to_email($uid)
  • uid_to_am($uid)

Updated by Αλέξανδρος Διαμαντίδης over 5 years ago · 3 revisions