Πως να ελενξετε αν μια id υπαρχει στη βαση

Μια περιοχή όπου τα μέλη μας μπορούν να βάζουν τα PHP scripts που έχουν φτιάξει και θέλουν να τα μοιραστούν με τα υπόλοιπα μέλη.

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

Απάντηση
Άβαταρ μέλους
stevebat
Script Master
Δημοσιεύσεις: 307
Εγγραφή: 05 Αύγ 2009 15:54
Επικοινωνία:

Πως να ελενξετε αν μια id υπαρχει στη βαση

Δημοσίευση από stevebat » 18 Απρ 2010 21:47

Συγχωρέστε με αν υπάρχει κάτι τέτοιο, έκανα αναζήτηση αλλά δεν βρήκα τίποτα!!

Και τώρα στο θέμα
παρακάτω θα σας δείξω ένα σκριπτακι που έγραψα το οποίο δεν αφήνει τον χρήστη να βάλει στο λινκ id που δεν υπάρχει στη βάση για παράδειγμα index.php?id=897898455 ή id=0!!

θα χρειαστεί να κάνετε σύνδεση με τη βάση πρώτα

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

mysql_connect("localhost", "db_user", "db_pass")or die("cannot connect");
mysql_select_db("db")or die("cannot select DB"); // όπου db_user,db_pass,db βάζετε τα στοιχεία της βάσης σας
μετά θα χρειαστείτε μια μεταβλητή που θα παίρνει με get την id μπορείτε να χρησιμοποιείστε το παρακάτω

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

$id=$_GET[id];
$id = intval($id);
και μετά το script για να ελένξει αν υπάρχει η εγγραφή στη βάση σας

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

$id_exist = mysql_query("SELECT * FROM `o_pinakas_sas_edw` WHERE id = '".$id."' LIMIT 1");
$check_num = mysql_num_rows($id_exist);
if(!$check_num) {
echo"Η Σελίδα δεν υπάρχει";
}
τελικώς θα γίνει έτσι

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

<php
session_start&#40;&#41;;
mysql_connect&#40;"localhost", "db_user", "db_pass"&#41;or die&#40;"cannot connect"&#41;;
mysql_select_db&#40;"db"&#41;or die&#40;"cannot select DB"&#41;; // όπου db_user,db_pass,db βάζετε τα στοιχεία της βάσης σας
$id = $_GET&#91;id&#93;; //παίρνουμε την id με get
$id = intval&#40;$id&#41;; //προστασία sql injection
$id_exist = mysql_query&#40;"SELECT * FROM `o_pinakas_sas_edw` WHERE id =  '".$id."' LIMIT 1"&#41;;//αυτη η εντολη κανει την ερωτηση στη βάση
$check_num = mysql_num_rows&#40;$id_exist&#41;; // εδώ ελέγχουμε το αποτέλεσμα από την μεταβλητή $id_exist 
if&#40;!$check_num&#41; // αν το αποτέλεσμα βγει μεγαλύτερο του 0 τότε συνεχίζουμε αλλά άμα βγει ίσο με το 0 τότε εκτελεί την παρακάτω εντολή
 &#123;
echo"Η Σελίδα δεν υπάρχει"; //μπορείτε επίσης να βάλετε header&#40;"Location&#58; your_page"&#41;; αν θέλετε να κάνει redirect
&#125; ?>
Βάλτε αυτό τον κωδικά στην αρχή της σελίδας (δεν θα πρέπει να χρησιμοποιείτε και άλλη μεταβλητή για να παίρνετε την id)

Και μιας και το φερε η κουβέντα θα σας δείξω κάποιους τρόπους που θα αποφεύγετε τις sql injection όπως έχουν γράψει τα παιδιά εδώ μέσα στο φόρουμ και εκ της πήρας μου

Τι είναι sql injection?
Όπως δηλώνει και η λέξη "inject" είναι η εισαγωγή SQL statements που πάνε για εκτέλεση από το site επειδή αυτό δεν ελέγχει τις εισόδους του. Έστω ότι έχουμε ένα κομμάτι κώδικα, το που εμφανίζει από τη βάση ανάλογα με την id που παίρνει Αυτό το καλεί η δικτυακή μας εφαρμογή όταν ο χρήστης προσπαθεί να δει κάποια σελίδα. Αν λοιπόν ο χρήστης είναι κάποιος έμπειρος και βάλει στο λινκ αυτό ;delete from table; Έχει αδειάσει όλη τη βάση μας οπότε χρησιμοποιούμε τα παρακάτω προς αποφυγήν.

Πρώτα από όλα όπως προανέφερα πιο πάνω
όταν θα κάνετε

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

$_get&#91;kati&#93;;
θα το βάζετε πάντα σε intval() όποτε γίνετε πχ έτσι

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

intval&#40;$_get&#91;kati&#93;&#41;;
ώστε να επιτρέψουμε μόνο αριθμό στο get

Ένας άλλος τρόπος για να αποφεύγετε την sql injection είναι να εσωκλείσετε τις όλες μεταβλητές σε μονές αποστρόφους μέσα στο query πχ αν το query είναι έτσι

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

$sql = "SELECT * FROM table WHERE get=$get";
το κανετε έτσι

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

$sql = "SELECT * FROM table WHERE get='".$get."'";
δηλαδη την $get την κάνετε έτσι '".$get."'


Ελπίζω να βοήθησα!!!
Διορθώστε με αν έκανα λάθος!!!
Happy coding! :D
Τελευταία επεξεργασία από το μέλος stevebat την 26 Απρ 2010 17:03, έχει επεξεργασθεί 1 φορά συνολικά.

Άβαταρ μέλους
Basilakis
PHP Moderator
Δημοσιεύσεις: 8574
Εγγραφή: 17 Νοέμ 2003 13:03
Τοποθεσία: Womans' Brain
Επικοινωνία:

Πως να ελενξετε αν μια id υπαρχει στη βαση

Δημοσίευση από Basilakis » 26 Απρ 2010 01:05

Thx a lot man!

Προσθέτω 2 ακόμη tutorials που είναι για το SQL injection

Fixing a sql injection

Prevent SQL injection - PHP & MySQL security

2 καταπληκτικά άρθρα που έχουν γραφτεί στο freestuff.gr!

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Πως να ελενξετε αν μια id υπαρχει στη βαση

Δημοσίευση από Rapid-eraser » 26 Απρ 2010 13:05

TIP: από την στιγμή που γνωρίζεις ότι ψάχνεις μόνο 1 id καλό θα ήταν να βάλεις και LIMIT 1 στο query , επίσης σημαντικό το id από την στιγμή που είναι μοναδικό πρέπει να έχει οριστεί σαν primary key
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Άβαταρ μέλους
stevebat
Script Master
Δημοσιεύσεις: 307
Εγγραφή: 05 Αύγ 2009 15:54
Επικοινωνία:

Πως να ελενξετε αν μια id υπαρχει στη βαση

Δημοσίευση από stevebat » 26 Απρ 2010 17:06

@Basilakis ευχαριστούμε πολύ για αυτά τα δυο λινκ ξέχασα να τα ποστάρω χτες
και επίσης σε ευχαριστώ και εσένα @Rapid-eraser για τη συμβουλή έβαλα limit στα query!!
happy coding

Απάντηση

Επιστροφή στο “PHP τα δικά μας scripts”

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

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