codesix Δημοσ. 23 Μαρτίου 2016 Δημοσ. 23 Μαρτίου 2016 Καλησπερίζω το Forum.. Λοιπόν έχω μια βάση με παραγγελίες και προϊόντα όπου μέσα απο ένα textbox με την χρήση ajax τραβάω Ονομασία και Περιγραφή του προϊόντος με βάση τον κωδικό του όπου είναι 5 ψηφία. Έστω λοιπόν έχω ενα προϊόν με κωδικό 422 και ονομασία: XDC-398 και περιγραφή: Πληκτρολόγιοόταν το αναζητώ με βάση τον κωδικό μου το εμφανίζει κανονικά. Έχω όμως το εξής πρόβλημα Όταν στο textbox γράψω 00422 η 0422 πάλι μου το εμφανίζει. Αυτό οφείλεται σε θέμα της MySQL η απο τον τρόπο που καλώ τα δεδομένα ? Σας δίνω εικόνες με τα πεδια και τους τύπους δεδομένων του πίνακα. Τι μπορεί να φταίει ?
M2000 Δημοσ. 23 Μαρτίου 2016 Δημοσ. 23 Μαρτίου 2016 Αν το 00422 γίνεται αριθμός τότε το να μιλάμε για τη μορφοποίηση του, στο Textbox...αν θα ήταν με ένα ή με κανέvα μηδνικό δεν λέμε κάτι σχετικό για την εισαγωγή του αριθμού, αφού έχει χάσει τη μορφοποίηση. Αν όμως είχες ένα στάδιο ενδιάμεσο όπου το 00422 θα το έβλεπες ως αλφαριθμητικό με 5 χαρακτήρες απαραίτητα,για να είναι έγκυρο, τότε τα 00 θα έπαιζαν ρόλο, για να κάνουν ή όχι αποδεκτή την εισαγωγή. Πρέπει δηλαδή να κανονίσεις ένα τρόπο αποδοχής της τιμής από το Textbox πριν το δώσεις στο SQL ερώτημα.
Moderators Kercyn Δημοσ. 23 Μαρτίου 2016 Moderators Δημοσ. 23 Μαρτίου 2016 Άμα κάνεις parse το textbox ως int, τότε τα μηδενικά που έχεις στην αρχή τα παραβλέπει. Δε γνωρίζω καλά SQL για να σου πω κάποια εξωτική περίπτωση που θα μπορούσε να συμβαίνει, αλλά άμα το κάνεις parse ως int ίσως χάνεις τα μηδενικά.
M2000 Δημοσ. 23 Μαρτίου 2016 Δημοσ. 23 Μαρτίου 2016 Σε Java παράδειγμα http://www.sitepoint.com/forums/showthread.php?81403-Validate-Number-with-leading-zero-as-number Σε Php http://stackoverflow.com/questions/7649752/php-is-numeric-or-preg-match-0-9-validation Kercyn δεν έχει θέμα στην Php με την μετατροπή, το αντίθετο εδώ γίνεται παίρνει και το 00442 και το 442, και όπως καταλαβαίνω θα ήθελε ο OP μόνο μια εκδοχή να είναι σωστή!
defacer Δημοσ. 23 Μαρτίου 2016 Δημοσ. 23 Μαρτίου 2016 Σας δίνω εικόνες με τα πεδια και τους τύπους δεδομένων του πίνακα. Τι μπορεί να φταίει ? Δείξε τον κώδικα που κάνει query τη βάση. Θεωρώ δεδομένο ότι κάπου εκει μέσα θα έχει μια μεταβλητή της οποίας θα έχεις ήδη ελέγξει πως η τιμή είναι string "00422". Προφανώς αν η τιμή δεν είναι αυτή τότε κάπου μέσα στην PHP κάνεις κάποια μετατροπή η οποία σου χαλάει το γλυκό, οπότε ακολουθώντας την "πορεία" αυτής της μεταβλητής προς τα πίσω κάποια στιγμή θα περάσεις αναγκαστικά πάνω από τη μετατροπή.
codesix Δημοσ. 23 Μαρτίου 2016 Μέλος Δημοσ. 23 Μαρτίου 2016 Εδώ είναι το Script της JavaScript <script> function showUser(str) { if (str=="") { document.getElementById("txtHint").value= "0"; return; } if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else { // code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("txtHint").value=xmlhttp.responseText; } else { document.getElementById("txtHint").value= "Error"; } } xmlhttp.open("GET","system/getproduct.php?q="+str,true); xmlhttp.send(); } </script> Και εδώ ο κώδικας της PHP <?php $q = intval($_GET['q']); $con = mysqli_connect('localhost','root','','netosong'); if (!$con) { die('Could not connect: ' . mysqli_error($con)); } mysqli_select_db($con,"products"); mysqli_query($con,"set names 'utf8'"); $sql="SELECT product,description FROM products WHERE id = '".$q."'"; $result = mysqli_query($con,$sql); while($row = mysqli_fetch_array($result)) { echo "$row[0] - $row[1]"; } mysqli_close($con); ?>
M2000 Δημοσ. 23 Μαρτίου 2016 Δημοσ. 23 Μαρτίου 2016 Είναι φανερό, γίνεται ακέραιος η εισαγωγή στο 2 (Php) Δεν είναι απαραίτητο να γίνει αριθμός! Αλλά η εγκυρότητα χρειάζεται: http://stackoverflow.com/questions/7649752/php-is-numeric-or-preg-match-0-9-validation
defacer Δημοσ. 23 Μαρτίου 2016 Δημοσ. 23 Μαρτίου 2016 Εδώ είναι το Script της JavaScript Υποστηρίζει και IE6 το site σου; Και εδώ ο κώδικας της PHP You are doing it wrong. Ή για να το πω σωστότερα, τα μέρη από όπου πήρες τον κώδικα δεν είναι και τα ποιοτικότερα του internet. 1. Δεν δικαιολογείται με τίποτα να ψάχνει ο χρήστης με βάση το id που υπάρχει μόνο και μόνο για να είναι primary key. To id είναι κάτι που χρησιμοποιούν το πρόγραμμά σου και η βάση μεταξύ τους για να συνεννοούνται σε ποιό record αναφέρονται. Οι τιμές του δεν πρέπει να παίζουν κανένα απολύτως ρόλο στη χρήση της εφαρμογής. Αν θέλεις να έχεις κάποιο "id" για ανθρώπινη χρήση όπως μάλλον είναι το pid στη βάση σου τότε συνήθως δεν το κάνεις int γιατί δε βολεύει ιδιαίτερα από οργανωτικής άποψης. 2. Ποτέ, ποτέ, ποτέ δε γράφεις queries με απευθείας αντικατάσταση μεταβλητών, διαφορετικά είναι θέμα χρόνου να σε χακάρει κάποιος που βαριέται. Δες εδώ πώς πρέπει να το κάνεις και ρίξε μια ματιά στο σχετικό documentation για τυχόν παραλλαγές που μπορεί να σε βολεύουν. 3. To SET NAMES μας τελείωσε. Ο σωστός τρόπος είναι άλλος, για mysqli που χρησιμοποιείς εσύ είναι αυτός. Αν φτιάξεις αυτά τα πράγματα τότε βγάζεις και το intval (προφανώς αφού δε θα κάνεις query int column) και όλα δουλεύουν ρολόι. ΥΓ2 αν είχες κάνει debug τον κώδικά σου θα είχες δει αμέσως πού είναι το πρόβλημα -- και το κυριότερο, δε θα εξαρτώσουν από άλλους. 1
M2000 Δημοσ. 24 Μαρτίου 2016 Δημοσ. 24 Μαρτίου 2016 Λοιπόν δεν είναι θέμα ο Int που κάνει. H php δεν ξεχωρίζει αλφαριθμητικά από αριθμούς! Με την έννοια ότι μπορείς να δώσεις σε μια μεταβλητή με αλφαριθμητικό μια μεταβλητή αριθμητική! Το Int που έκανε απλά έκοψε δεκαδικά. Εγώ του πρότεινα να κάνει έλεγχο για συγκεκριμένο μήκος και ψηφία. Αυτό πώς το καταλαβαίνεις για injection σε Sql; Βγάζεις θεωρίες και λές κοτσάνες. Άντε να σε κρίνω και εγώ. Ας ξέρεις και πέντε πράγματα. Αν βιάζεσαι να βγάλεις συμπεράσματα και δεν έχεις αίσθηση του μέτρου...δικό σου πρόβλημα! Θα παρουσιάζω ότι θέλω δεν είσαι εκείνος που θα απαγορέψει σε μέλος του φόρουμ να παρουσιάζει τις ιδέες του. Το 3 να το σκεφτείς ξανά, βάλε και πράσινα άλογα μέσα! Δεν με ενδιαφέρει να με "εξετάσεις" τι έχω κάνει. Για το μόνο που θέλω να συζητώ για τα δικά μου πράγματα είναι η Μ2000. Για την php συζητάμε με τον OP. Αν δεν σου αρέσει, δεν ταιριάζει με τα γούστα σου...κάνε ότι άλλο θέλεις...μην με ζαλίζεις! Δεν χάθηκε ο κόσμος, θα περάσεις τις ιδέες σου στο επόμενο θέμα...να παίξει και κάτι σοβαρό! Να σε δυσκολέψει και λίγο!
t(o.ot) Δημοσ. 24 Μαρτίου 2016 Δημοσ. 24 Μαρτίου 2016 Λοιπόν δεν είναι θέμα ο Int που κάνει. H php δεν ξεχωρίζει αλφαριθμητικά από αριθμούς! Με την έννοια ότι μπορείς να δώσεις σε μια μεταβλητή με αλφαριθμητικό μια μεταβλητή αριθμητική! Το Int που έκανε απλά έκοψε δεκαδικά. Εγώ του πρότεινα να κάνει έλεγχο για συγκεκριμένο μήκος και ψηφία. Αυτό πώς το καταλαβαίνεις για injection σε Sql; http://opsdomain.com?q='%20OR%201%20=%201%23 1
Επισκέπτης Δημοσ. 24 Μαρτίου 2016 Δημοσ. 24 Μαρτίου 2016 Ο Μ2000 προφανώς δεν έχει ιδέα τι είναι το SQL injection. Στο μυαλό του θα είναι κάποια συνομωσία της Microsoft για να μας πουλήσει περισσότερο λογισμικό.
M2000 Δημοσ. 24 Μαρτίου 2016 Δημοσ. 24 Μαρτίου 2016 Βουλωμένο γράμμα διαβάζεις! Ξέρω τι είναι, αλλά δεν είναι το θέμα μας αυτό. Η χρήση του id, που αποδίδεται αυτόματα (αν γίνεται αυτό στην περίπτωσή του OP) δεν είναι προφανώς κωδικός προϊόντος. Κάτι άλλο χρειάζεται η βάση του και σίγουρα τώρα δεν είναι θέμα το Sql Injection. Είναι όμως της αρεσκείας σου να συζητάς για μένα...Τιμή μου. Και για το λόγο αυτό σου απαντώ!
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα