Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπερα σε ολους,

 

η ερωτηση μου ειναι η εξης:στεκει η παρακατω εκφραση?

>
$var=$_POST['var'];
mysql_query = "SELECT * FROM tablename WHERE $var<=(0.2*column_name) and $var>=(0.2*column_name)";

 

δηλαδη θελω να μου επιστρψει ολες τις τιμες της βασεις που ειναι 20% μεγαλυτερες και 20% μικροτερες απο την τιμη που εισηγαγε ο χρηστης .

 

στεκει αυτο απο λογικη και προγραμματιστικη αποψη?

 

ευχαριστω πολυ

Δημοσ.

Καταρχάς, όχι γιατί το AND ψάχνει για όσες εγγραφές ικανοποιούν ΚΑΙ ΤΑ ΔΥΟ conditions. Οπότε σε πρώτη φάση το statement είναι ισοδύναμο με αυτό:

>
SELECT * FROM tablename WHERE $var = (0.2*column_name)

 

Επίσης, το

>
WHERE $var = (0.2*column_name)

δεν βγάζει νόημα. Αυτό που θες είναι:

>
WHERE column_name = (0.2*$var)

 

Στον μαθηματικό τομέα, το 0.2*$var δεν είναι το 20% μικρότερο/μεγαλύτερο του $var. Αυτό που θες είναι το 1.2*$var και το 0.8*$var

 

Άρα, συνοψίζοντας:

>
SELECT * FROM tablename WHERE column_name >= (0.8*$var) AND column_name <= (1.2*$var)

 

ΥΓ> Θέλω να πιστεύω πως το $var = $_GET['var'] είναι απλά για το παράδειγμα. Αν όχι, και το χρησιμοποιείς στο σκριπτ σου ακριβώς όπως το έχεις εδώ, άσε τον κώδικα και άρχισε να διαβάζεις περί SQL Injection.

Δημοσ.

Καταρχάς, όχι γιατί το AND ψάχνει για όσες εγγραφές ικανοποιούν ΚΑΙ ΤΑ ΔΥΟ conditions. Οπότε σε πρώτη φάση το statement είναι ισοδύναμο με αυτό:

>
SELECT * FROM tablename WHERE $var = (0.2*column_name)

 

Επίσης, το

>
WHERE $var = (0.2*column_name)

δεν βγάζει νόημα. Αυτό που θες είναι:

>
WHERE column_name = (0.2*$var)

 

Στον μαθηματικό τομέα, το 0.2*$var δεν είναι το 20% μικρότερο/μεγαλύτερο του $var. Αυτό που θες είναι το 1.2*$var και το 0.8*$var

 

Άρα, συνοψίζοντας:

>
SELECT * FROM tablename WHERE column_name >= (0.8*$var) AND column_name <= (1.2*$var)

 

ΥΓ> Θέλω να πιστεύω πως το $var = $_GET['var'] είναι απλά για το παράδειγμα. Αν όχι, και το χρησιμοποιείς στο σκριπτ σου ακριβώς όπως το έχεις εδώ, άσε τον κώδικα και άρχισε να διαβάζεις περί SQL Injection.

αρχικα,ναι αυτο το script το κανω sanitize πριν το ανεβασω στον server,γνωριζω για την SQLi :)

 

δευτερον,αρα με αυτο

>
SELECT * FROM tablename WHERE column_name >= (0.8*$var) AND column_name <= (1.2*$var)

ικανοποιειται αυτο που θελω,ετσι?δηλαδη το $var να ειναι μικροτερο κατα 20% απο την τιμη της στηλης και 20% μεγαλυτερο απο την τιμη της στηλης?

 

ακομη,εχεις κανα λινκ για αυτο με τα μαθηματικα που μου ειπες?καθως δεν ηξερα καν οτι δεν ισχυει με την καμια αυτο που ειχα γραψει,οποτε ισως ειναι και αλλα που θα επρεπε να ξερω..

 

ευχαριστω!

Δημοσ.

Αν κατάλαβα καλά εσύ θες όλες τις τιμές ανάμεσα στο +-20% της τιμής που έβαλε ο χρήστης. Άρα αν ο χρήστης έβαλε την τιμή 100, εσύ θες όλες τις τιμές από 80-120.

 

Τα μαθηματικά δεν είναι τίποτα σπουδαίο, απλή άλγεβρα του δημοτικού είναι. Στο ίδιο παράδειγμα, το 0.2*$var είναι ίσο με 20. Εσύ θες, όμως, τις τιμές που είναι +-20% και όχι τις τιμές που είναι 20%. Άρα πρέπει να προσθαφαιρέσεις αυτό το 20%. Ε, αυτό μεταφράζεται σε 80% εώς 120%. Άρα 0.8*$var εώς 1.2*$var.

 

ΥΓ> Δεν το πιστεύω πως έγραψα 2 παραγράφους γι αυτό. rolleyes.gif

Δημοσ.

Αν κατάλαβα καλά εσύ θες όλες τις τιμές ανάμεσα στο +-20% της τιμής που έβαλε ο χρήστης. Άρα αν ο χρήστης έβαλε την τιμή 100, εσύ θες όλες τις τιμές από 80-120.

 

Τα μαθηματικά δεν είναι τίποτα σπουδαίο, απλή άλγεβρα του δημοτικού είναι. Στο ίδιο παράδειγμα, το 0.2*$var είναι ίσο με 20. Εσύ θες, όμως, τις τιμές που είναι +-20% και όχι τις τιμές που είναι 20%. Άρα πρέπει να προσθαφαιρέσεις αυτό το 20%. Ε, αυτό μεταφράζεται σε 80% εώς 120%. Άρα 0.8*$var εώς 1.2*$var.

 

ΥΓ> Δεν το πιστεύω πως έγραψα 2 παραγράφους γι αυτό. rolleyes.gif

αααα μαλιστα!

σε ευχαριστω πολυ!

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...