server side validation και ajax

Κώδικας, πληροφορίες, ερωτήσεις και απαντήσεις σχετικές με την JavaScript.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Serghio
Δημοσιεύσεις: 452
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

server side validation και ajax

Δημοσίευση από Serghio » 20 Σεπ 2013 16:26

Aφου γίνει το client-side validation τα δεδομένα πάνε στον server για validation εκεί.
Εδω θέλω να σταθώ και να κάνω 2 ερωτήσεις.

Να υποθέσω ότι αν ένα server-side validation αποτύχει το μύνημα οτι fail θα πρέπει να επιστρέψει στον client με ajax response.Σωστό αυτό?

Και τώρα ένα πρόβλημα που αντιμετωπίζω με την οργάνωση του κώδικα και τα status messages για όποια πιθανή αποτυχία των ajax requests...δείτε τον κώδικα παρακάτω:

Κώδικας: Επιλογή όλων

 if($url!=='')
          { 
              if((checkwww($url))&&( ajax_update_address($conn,$address, $city, $municipality, $url, $sessionml)))
              {$success='1';}
              elseif((checkwww($url)==false)&&( ajax_update_address($conn,$address, $city, $municipality, $url, $sessionml)))
              {$success='2';}
              elseif((checkwww($url)==false)&&( ajax_update_address($conn,$address, $city, $municipality, $url, $sessionml)==false))
              {$success='3';}
  
          }
        elseif($url=='')
        {  
         if(ajax_update_address($conn,$address, $city, $municipality, $url, $sessionml))     
                 {$success='1';}
                 else
                 {$success='0';}
                 echo $success;
        }
Στον παραπάνω κώδικα υπάρχουν 2 functions, η checkwww($url) κάνει url validation και η ajax_update_address απλώς βάζει κάποια δεδομένα στην βάση. Όπως βλέπετε παραπάνω στην success variable περνάει ένα string ανάλογα με το αν το url είναι valid ή όχι και ανάλογα αν τα δεδομένα της δεύτερης function περνάνε επιτυχώς.

Στο τελευταίο if statement το url validation δεν γίνεται εφόσον η url μεταβλητή είναι κενή---ο χρήστης δηλαδή δεν συμπλήρωσε το σχετικό πεδίο, καθώς είναι προαιρετικό αυτό.

Το ερώτημα ειναι αν ο παραπάνω κώδικας μπορεί να γραφτεί πιο "κάθαρα". Γίνεται μπέρδεμα λίγο η κατάσταση με τα status codes και μιλάμε μόνο για url validation εδώ---θα μπορούσαν να ήταν περισσότεροι οι έλεγχοι.
Προσπαθώ να δω πως μπορώ να εκμεταλλευτώ arrays/loops.

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

server side validation και ajax

Δημοσίευση από alou » 20 Σεπ 2013 17:26

Το πρώτο που θα πρέπει να επιβεβαιώσεις, είναι ότι το ποστ της φόρμας θα λειτουργεί και ΧΩΡΙΣ javascript και θα έχει κάποιο νόημα, έστω να ενημερώσει ότι δεν λειτουργεί χωρίς javascript.

Από εκεί και πέρα, αν αυτό που θες είναι να ενημερώσεις το χρήστη τι έγινε, μια προσέγγιση είναι αυτή:

Κώδικας: Επιλογή όλων

$ajReply = array();

$urlHasInput = (strlen($url) > 0) :true ? false;
$webIsOK = checkwww($url);
$addressOK = ajax_update_address($conn,$address, $city, $municipality, $url, $sessionml);

$ajReply['url'] = $urlHasInput;
$ajReply['www'] = $webIsOK;
$ajReply['address'] = $addressOK;

echo json_encode($ajReply);


//στη js function:
$.ajax....

success(function(data){
  var enimerosiXristi;
  if(data.url) {enimerosiXristi += 'To URL ΟΚ' } else {...}
  if(data.www) {enimerosiXristi += '...' } else {...}
  if(data.address) {enimerosiXristi += '...' } else {...}
  $&#40;body&#41;.prepend&#40;'<div class="message">' + enimerosiXristi + '</div>'&#41;
&#125;&#41;
...

Serghio
Δημοσιεύσεις: 452
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

server side validation και ajax

Δημοσίευση από Serghio » 20 Σεπ 2013 18:00

alou έγραψε:Το πρώτο που θα πρέπει να επιβεβαιώσεις, είναι ότι το ποστ της φόρμας θα λειτουργεί και ΧΩΡΙΣ javascript και θα έχει κάποιο νόημα, έστω να ενημερώσει ότι δεν λειτουργεί χωρίς javascript.
To έχω υπόψη αυτό.
Από εκεί και πέρα, αν αυτό που θες είναι να ενημερώσεις το χρήστη τι έγινε, μια προσέγγιση είναι αυτή:

Κώδικας: Επιλογή όλων

$ajReply = array&#40;&#41;;

$urlHasInput = &#40;strlen&#40;$url&#41; > 0&#41; &#58;true ? false;
$webIsOK = checkwww&#40;$url&#41;;
$addressOK = ajax_update_address&#40;$conn,$address, $city, $municipality, $url, $sessionml&#41;;

$ajReply&#91;'url'&#93; = $urlHasInput;
$ajReply&#91;'www'&#93; = $webIsOK;
$ajReply&#91;'address'&#93; = $addressOK;

echo json_encode&#40;$ajReply&#41;;


//στη js function&#58;
$.ajax....

success&#40;function&#40;data&#41;&#123;
  var enimerosiXristi;
  if&#40;data.url&#41; &#123;enimerosiXristi += 'To URL ΟΚ' &#125; else &#123;...&#125;
  if&#40;data.www&#41; &#123;enimerosiXristi += '...' &#125; else &#123;...&#125;
  if&#40;data.address&#41; &#123;enimerosiXristi += '...' &#125; else &#123;...&#125;
  $&#40;body&#41;.prepend&#40;'<div class="message">' + enimerosiXristi + '</div>'&#41;
&#125;&#41;
...
[/quote]

Το json_encode δεν το έχω χρησιμοποιήσει ποτέ και η ερώτηση που θέλω να κάνω είναι αν θα μπορούσε να γινει δουλειά και χωρίς αυτό.

Στον client επίσης κοιτάω αν τα άλλα πεδία(εκτός του url) είναι κενά, και αν όντως είναι αποτρέπω το submit της φορμάς.
Μήπως το σχετικό έλεγχο πρέπει να τον κάνω και server side?
Εν ολίγοις τα addres,city,municipality είναι υποχρεωτικά αλλά αυτόν τον έλεγχο τον κάνω μόνο στον cleint.

Kαι κάτι τελευταίο.Το url είναι προαιρετικό...νομίζω ότι με τον κώδικα σου το κάνεις να φαίνεται υποχρεωτικό. Υπόθεση κάνω.

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

server side validation και ajax

Δημοσίευση από dva_dev » 20 Σεπ 2013 18:13

Αν ο browser δεν υποστηρίζει javascript ή ο χρήστης την έχει απενεργοποιημένη;

Βγάλε τουλάχιστον ένα μήνυμα ότι χωρίς javascript ας πάει να δει τηλεόραση καλύτερα.

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

server side validation και ajax

Δημοσίευση από alou » 20 Σεπ 2013 18:25

Δεν κατάλαβα αν κάνεις τον έλεγχο server ή client side γιατί τη μια λες έτσι και την άλλη αλλιώς, αλλά δεν έχει σημασία. Πάντα κάνεις client side, καλύτερα να κάνεις ΚΑΙ server side. Κανόνας, πάντα, παντού.

Σε αυτό που σου έγραψα, απλά ενημερώνω τι έγινε τον χρήστη, υποθέτοντας ότι τα function σου (και ένα shorthand conditional που έβαλα) κάνουν ότι κάνουν και επιστρέφουν true / false.

Το json encode είναι υποχρεωτικό αν θες να επιστρέψεις array / object και είναι πολλές οι φορές που θα σε βοηθήσει να απαντήσεις έτσι.

Serghio
Δημοσιεύσεις: 452
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

server side validation και ajax

Δημοσίευση από Serghio » 23 Σεπ 2013 14:02

alou έγραψε:Δεν κατάλαβα αν κάνεις τον έλεγχο server ή client side γιατί τη μια λες έτσι και την άλλη αλλιώς, αλλά δεν έχει σημασία. Πάντα κάνεις client side, καλύτερα να κάνεις ΚΑΙ server side. Κανόνας, πάντα, παντού.

  • Μιλάμε πάντα για server-side validation-για αυτό γίνεται αυτό το post.

  • Γιατί γίνεται αυτό όμως το server-side validation;Για την περίπτωση που ό χτήστης δεν έχει ενεργοποιημένη την js ή και για άλλους λόγους. Πρέπει να είναι και για άλλους λόγους γιατί το response γίνεται με ajax βλέπω και εδώ.Οπότε χρειάζεται η js και εδώ.Το ερώτημα για την χρησιμότητα του server-side το είχα πάντα...

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

server side validation και ajax

Δημοσίευση από alou » 23 Σεπ 2013 14:20

Ασφάλεια ότι δεν θα γίνουν μαντάρα τα δεδομένα σου, στην περίπτωση που απενεργοποιήσει κάποιος την js (ή γίνει κάποιο conflict / error και δεν λειτουργήσει ένα script) και στείλει κάποιος μια φόρμα. Ασφάλεια και ότι δέχεσαι / δε δέχεσαι post / get από οπουδήποτε (csrf) και με οποιοδήποτε τρόπο (sql injections κλπ).

Και ανάλογα την περίπτωση, υπάρχουν πολλά που μπορείς να διασφαλίσεις.

Για την ajax: την χρησιμοποιείς όταν τρέχει και το client side κομμάτι. Όμως μια φόρμα, μπορεί να σταλλεί και χωρίς ajax, άσχετα με το τι έχεις ζητήσει εσύ μέσω javascript. Σε αυτή την περίπτωση, φροντίζεις να υπάρχει κάποια ασφαλής και λογική ανταπόκριση.

Serghio
Δημοσιεύσεις: 452
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

server side validation και ajax

Δημοσίευση από Serghio » 23 Σεπ 2013 14:51

$urlHasInput = (strlen($url) > 0) :true ? false;

Μια ερώτηση σχετικά με τον παραπάνω κώδικα...με καλύπτει σε περίπτωση που ο χρήστης εισάγει στο πεδίο απλώς white space;

Νομίζω ότι ο κώδικας θέλει και άλλη δουλειά...όχι από μέρους σου αλλά από μέρους μου.
Πρέπει να γίνει και χρήση sanitize filters....αυτά που έχει ήδη η php

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

server side validation και ajax

Δημοσίευση από alou » 23 Σεπ 2013 15:42

$urlHasInput = strlen(trim($url)) > 0;

Αν θες true / false σε καλύπτει αυτό όπως είναι αλλιώς δώσε τιμές που θες εσύ

$urlHasInput = (strlen(trim($url)) > 0) : 'εχει τιμη' ? ΄δεν εχει τιμη΄;

Για τα υπόλοιπα τι να σου πω? φυσικά και χρειάζεται ένα κάρο δουλειά για να εξασφαλίσεις μια υποτυπώδη ασφάλεια αλλά εσύ θα το κρίνεις.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

server side validation και ajax

Δημοσίευση από korgr » 23 Σεπ 2013 17:42

Κάπου τα έχεις μπερδεμένα στο μυαλό σου!
Το server-side validation δεν έχει σχέση με οποιαδήποτε μορφή ajax γιατί ένας κύριος λόγος που το χρησιμοποιούμε, είναι το να εξασφαλιστεί το validation και χωρίς js.

Η λογική λέει πως κάθε φόρμα σου όταν την δημιουργείς θα πρέπει να έχει τιμές στα πεδία της (ακόμα και πριν το submit) ώστε αν ένα πεδίο δεν συμπληρωθεί αφού γίνει submit με server-side validation να εμφανίσεις ξανά την φόρμα έχοντας εξασφαλίσει πως όλα τα σωστά πεδία θα συνεχίσουν να περιέχουν το input του χρήστη.

παράδειγμα πεδίου μιας τέτοιας φόρμας:

Κώδικας: Επιλογή όλων

<input type="text" name="var1" value="<?php echo $val1;?>">
Πριν σταλεί η φόρμα η $var1 δεν έχει τιμή οπότε δεν εμφανίζει κάτι.
Αν όμως είμαστε μετά το submit η $var1 έχει το input του χρήστη οπότε δεν χάνεις την τιμή του αν εμφανίσεις ξανά την φόρμα (λόγω ελλείψεων σε άλλα πεδία).

Φυσικά οι τιμές των πεδίων θα πρέπει μετά το submit να περνούν από sanitization πριν τις "τυπώσει" η php ως value του πεδίου

Serghio
Δημοσιεύσεις: 452
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

server side validation και ajax

Δημοσίευση από Serghio » 23 Σεπ 2013 17:45

οπότε το server-side validation γίνεται για την περίπτωση που είναι απενεργοποιημένη η js. Αυτό λες με άλλα λόγια;

Άβαταρ μέλους
Khronos
Δημοσιεύσεις: 754
Εγγραφή: 11 Δεκ 2006 14:43
Τοποθεσία: Ηράκλειο

server side validation και ajax

Δημοσίευση από Khronos » 23 Σεπ 2013 18:01

ΟΧΙ.

Το server side validation είναι υποχρεωτικό (αν δε θες να βάζεις στη βάση σκουπίδια, να στέλνεις ανούσια emails κτλ.)

Το client side validation (javascript) είναι καθαρά για καλύτερο user experience.

Serghio
Δημοσιεύσεις: 452
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

server side validation και ajax

Δημοσίευση από Serghio » 23 Σεπ 2013 18:02

Khronos έγραψε:ΟΧΙ.

Το server side validation είναι υποχρεωτικό (αν δε θες να βάζεις στη βάση σκουπίδια, να στέλνεις ανούσια emails κτλ.)

Το client side validation (javascript) είναι καθαρά για καλύτερο user experience.
KATANOHTON

Άβαταρ μέλους
Khronos
Δημοσιεύσεις: 754
Εγγραφή: 11 Δεκ 2006 14:43
Τοποθεσία: Ηράκλειο

server side validation και ajax

Δημοσίευση από Khronos » 23 Σεπ 2013 18:04

Πάλι καλά! :P

Serghio
Δημοσιεύσεις: 452
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

server side validation και ajax

Δημοσίευση από Serghio » 26 Σεπ 2013 15:05

ωραία τον κώδικα τον έφτιαξα....πως τον τεστάρω όμως?

Από την στιγμή που η js θα είναι ενεργοποιημένη πως μπορώ να προκαλέσω την "πυροδότηση" του server-side validation?

Το server-side ναι μεν τρέχει έτσι και αλλιώς, εγώ όμως θέλω όμως να "πάρω"
και το fail του validation...αυτό βέβαια δεν μπορεί να γίνει τώρα γιατί το client side αν το validation απλώς δεν αφήνει τον server-side κώδικα να τρέξει...

Πρέπει λοιπόν με κάποιο τρόπο να τρέξει ο server-side κώδικας αλλά με το validation να αποτυγχάνει ώστε να δοκιμάσω στην πράξη τον κώδικα που έχω γράψει.

Απάντηση

Επιστροφή στο “JavaScript και Frameworks”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 2 επισκέπτες