freestuff.gr αρχική σελίδα
 FAQFAQ    ΑναζήτησηΑναζήτηση   Λίστα ΜελώνΛίστα Μελών   Ομάδες ΜελώνΟμάδες Μελών   <b>Εγγραφή Μέλους</b>Εγγραφή Μέλους 
 ΠροφίλΠροφίλ   Επιλογές μέλους Επιλογές   Τα bookmarks μου Τα bookmarks μου   Προσωπικά μηνύματαΠροσωπικά μηνύματα 
  διαφήμιση  

Καλώς ήρθατε στο forum μας! Για να συμμετάσχετε στις συζητήσεις θα πρέπει να είσαστε μέλος. Γίνετε μέλος τώρα!.

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


 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » PHP Προγραμματισμός και εφαρμογές » PHP τα δικά μας scripts
Moderators:  PHP Moderators, Super-Moderators, WebDev Moderators
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [4 Μηνύματα]      Bookmarks Tags: βάση Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
ΑποστολέαςΜήνυμα
stevebat
Script Master

Μέλος από: 05 Αυγ 2009
Βοηθήματα: 3
Νέα: 1
Scripts: 2
Μηνύματα: 256+


View users profile
twitter friendfeed deviantART 
ΜήνυμαΣτις: 18 Απρ 2010 20:47    Θέμα: Πως να ελενξετε αν μια id υπαρχει στη βαση Απάντηση με παράθεση  Mark this post and the followings unread

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

Και τώρα στο θέμα
παρακάτω θα σας δείξω ένα σκριπτακι που έγραψα το οποίο δεν αφήνει τον χρήστη να βάλει στο λινκ 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();
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 βάζετε τα στοιχεία της βάσης σας
$id = $_GET[id]; //παίρνουμε την id με get
$id = intval($id); //προστασία sql injection
$id_exist = mysql_query("SELECT * FROM `o_pinakas_sas_edw` WHERE id =  '".$id."' LIMIT 1");//αυτη η εντολη κανει την ερωτηση στη βάση
$check_num = mysql_num_rows($id_exist); // εδώ ελέγχουμε το αποτέλεσμα από την μεταβλητή $id_exist
if(!$check_num) // αν το αποτέλεσμα βγει μεγαλύτερο του 0 τότε συνεχίζουμε αλλά άμα βγει ίσο με το 0 τότε εκτελεί την παρακάτω εντολή
 {
echo"Η Σελίδα δεν υπάρχει"; //μπορείτε επίσης να βάλετε header("Location: your_page"); αν θέλετε να κάνει redirect
} ?>


Βάλτε αυτό τον κωδικά στην αρχή της σελίδας (δεν θα πρέπει να χρησιμοποιείτε και άλλη μεταβλητή για να παίρνετε την id)

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

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

Πρώτα από όλα όπως προανέφερα πιο πάνω
όταν θα κάνετε
κώδικας:
$_get[kati];
θα το βάζετε πάντα σε intval() όποτε γίνετε πχ έτσι
κώδικας:
intval($_get[kati]);

ώστε να επιτρέψουμε μόνο αριθμό στο get

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

κώδικας:
$sql = "SELECT * FROM table WHERE get=$get";

το κανετε έτσι
κώδικας:
$sql = "SELECT * FROM table WHERE get='".$get."'";

δηλαδη την $get την κάνετε έτσι '".$get."'


Ελπίζω να βοήθησα!!!
Διορθώστε με αν έκανα λάθος!!!
Happy coding!

Last edited by stevebat on 26 Απρ 2010 16:03, edited 1 time in total
Basilakis
PHP Moderator

Μέλος από: 17 Νοε 2003
Βοηθήματα: 68
Νέα: 7
Templates: 3
Scripts: 3
Μηνύματα: 256+

Περιοχή: Womans' Brain
View users profile Send email to user Visit posters website
blog deviantART flickr myspace facebook linkedin 
hi5 sync twitter deviantART skype 
ΜήνυμαΣτις: 26 Απρ 2010 00:05    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

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

Μέλος από: 05 Απρ 2003
Βοηθήματα: 2
Νέα: 2
Μηνύματα: 256+

Περιοχή: Πειραιάς
View users profile
portfolio facebook twitter skype 
ΜήνυμαΣτις: 26 Απρ 2010 12:05    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

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

Μέλος από: 05 Αυγ 2009
Βοηθήματα: 3
Νέα: 1
Scripts: 2
Μηνύματα: 256+


View users profile
twitter friendfeed deviantART 
ΜήνυμαΣτις: 26 Απρ 2010 16:06    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

@Basilakis ευχαριστούμε πολύ για αυτά τα δυο λινκ ξέχασα να τα ποστάρω χτες
και επίσης σε ευχαριστώ και εσένα @Rapid-eraser για τη συμβουλή έβαλα limit στα query!!
happy coding
Εμφάνιση Μηνυμάτων:   
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [4 Μηνύματα] Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » PHP Προγραμματισμός και εφαρμογές » PHP τα δικά μας scripts
Τώρα είναι 09 Δεκ 2016 05:51 | All times are UTC + 2


Email This Page to Someone! add to Favorites

     Powered by p h p B B © 2001,2005 p h p B B Group
Για άμεση επικοινωνία με τον διαχειριστή του freestuff.gr στο email: freestuff.gr(παπάκι)gmail.com


Copyright © 1999-2013 Freestuff.gr All Rights Reserved  
Version Aegean, designed by N. Tsaganos