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

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

Δημοσ. (επεξεργασμένο)

Αγαπητοι συμφορουμίτες.

Προσπαθω να αλλάξω μια λειτουργική php ιστοσελίδα που έχω και να την κάνω πιο σύγχρονη με js, jquery κλπ ωστε να μην φορτώνει όλη η σελίδα και για να έχει και πιο όμορφα url.

Έστω οτι η σελίδα μου έχει ένα nav με links Categories, Products, New Product. Μέχρι στιγμής εμφάνιζα τις κατηγορίες δυναμικά σε ένα dropdown menu και τα url τους ήταν του στυλ category?cat_id=1.

Έχω ένα products.php που εμφανίζει με ένα select όλα τα προιόντα, αν έχει παράμετρο ?cat_id=xx αποθηκευται το id σε μια μεταβλητή $id_from_url και εφαρμόζεται στο sql query ως WHERE cat_id=$id_from_url.

Επίσης αν πατήσει κάποιος επάνω σε ένα προιον της λιστας, φτιάχνεται ένα url product.php?prod_id=xx όπου ανοίγει η καρτέλα του προιόντος με ενα select WHERE pro_id=xx.

Το link new product πάει σε μια σελίδα new.php οπου υπάρχει μία φόρμα που κάνει $post τα πεδία της σε ένα insert.php και απο εκεί αποθηκεύονται στην βάση.

μέχρι στιγμής φαντάζομαι περιέγραψα ένα τυπικό δυναμικό php site.

Αρχή με Jquery

Ακολούθησα αυτό τον οδηγό και κατάφερα να φτιάξω ένα div στην αρχική με id="content" και μετά αν πατάω πχ. Products από το nav να μου ανοίγει χωρίς reload το products.php μέσα στο div. Αν πατάω New Product να μου ανοίγει το new.php μέσα στο div χωρίς reload.

Τα προβλήματα/απορίες τώρα........

1) ενώ στη φόρμα new.php όταν την ανοίγω παραδοσιακά (χωρίς να εμφανίζεται με jquery στο συγκεκριμένο div) δουλεύει μια χαρά. Όταν ανοίγει μέσα στο div με το js δεν δουλεύει το κουμπί και δεν κάνει redirect στο insert.php

2) με το παραπάνω τρόπο πως μπορώ να "στείλω" παράμετρο ωστέ να εισαχθεί στο sql query? Αφού ανοίγει μέσα στο div όλη την σελίδα σαν σύνολο. Δηλαδή αν θέλω να εμφανίσω λίστα με μια συγκεκριμένη κατηγορία, μέχρι τώρα τράβαγα από το url το ?cat_id=3, το αποθηκευα στην $catid και μετά έβαζα στο sql="SELECT * FROM products WHERE cat_id=$catid". Τώρα πως μπορώ να το κάνω αυτό αφού "δεν υπάρχουν" url και εμφανίζει την λίστα μέσα στο div σαν ένα ενιαίο αρχείο?

3) Υπάρχει καλύτερος τρόπος να γίνει αυτό που θέλω, από οτι στο παραπάνω βίντεο? Αν ναι μπορείτε να μου στείλετε το λινκ κάποιου βίντεο* γιατί δεν ξέρω πως να το ψάξω ακριβώς.

* Προτιμώ βίντεο γιατι τα καταλαβαίνω καλύτερα

Αυτά προς το παρόν με καίνε πιο πολύ!

 

 

Επεξ/σία από hdonoblepsias
Δημοσ.
Στις 7/8/2018 στις 7:49 ΜΜ, hdonoblepsias είπε

1) ενώ στη φόρμα new.php όταν την ανοίγω παραδοσιακά (χωρίς να εμφανίζεται με jquery στο συγκεκριμένο div) δουλεύει μια χαρά. Όταν ανοίγει μέσα στο div με το js δεν δουλεύει το κουμπί και δεν κάνει redirect στο insert.php

 

Θες να μου στείλεις τη σελίδα που δουλεύεις να την δω να σου πω τι μπορεί να φταίει; Γιατί έτσι στα λόγια δεν μπορώ να σου πω σίγουρα.

 

Στις 7/8/2018 στις 7:49 ΜΜ, hdonoblepsias είπε

3) Υπάρχει καλύτερος τρόπος να γίνει αυτό που θέλω, από οτι στο παραπάνω βίντεο? Αν ναι μπορείτε να μου στείλετε το λινκ κάποιου βίντεο* γιατί δεν ξέρω πως να το ψάξω ακριβώς.

Ναι, ρίξε μια ματιά σε ιστοσελίδες τύπου udemy, coursera και τα λοιπά. Και θα δεις πολύ χρήσιμα μαθήματα με λίγα ευρώ που έχουν πολύ υλικό. Μην βιαστείς να αγοράσεις, ψάξε καλά πριν πάρεις οτιδήποτε και διάβασε και κριτικές για να μην πετάς λεφτά

Δημοσ.
Στις 7/8/2018 στις 7:49 ΜΜ, hdonoblepsias είπε

Έχω ένα products.php που εμφανίζει με ένα select όλα τα προιόντα, αν έχει παράμετρο ?cat_id=xx αποθηκευται το id σε μια μεταβλητή $id_from_url και εφαρμόζεται στο sql query ως WHERE cat_id=$id_from_url. 

FWIW, αυτό είναι τελείως λάθος προγραμματιστικά κι είσαι ανοιχτός σε sql injection.

Δημοσ. (επεξεργασμένο)
6 λεπτά πριν, elorant είπε

FWIW, αυτό είναι τελείως λάθος προγραμματιστικά κι είσαι ανοιχτός σε sql injection.

Ακομα και αν το id που τραβαω το κανω πρωτα int και μετα το βαζω στο sql query;

Επεξ/σία από hdonoblepsias
Δημοσ.

Δεν έχει σημασία αν το input είναι string ή αριθμός. Μπορώ κάλλιστα να σου περάσω αριθμό μαζί με ένα string που θα κάνει το ένα query δύο και το δεύτερο θα κάνει πράγματα στην database σου που δεν τα ελέγχεις. Ψάξτο λίγο, δεν είναι τόσο απλό όσο νομίζεις. Και ποτέ δεν περνάμε queries κατευθείαν από input. Πάντα και παντού να χρησιμοποιείς stored procedures, ως ένα ελάχιστο μέτρο προστασίας.

Δημοσ.
8 ώρες πριν, elorant είπε

Δεν έχει σημασία αν το input είναι string ή αριθμός. Μπορώ κάλλιστα να σου περάσω αριθμό μαζί με ένα string που θα κάνει το ένα query δύο και το δεύτερο θα κάνει πράγματα στην database σου που δεν τα ελέγχεις. Ψάξτο λίγο, δεν είναι τόσο απλό όσο νομίζεις. Και ποτέ δεν περνάμε queries κατευθείαν από input. Πάντα και παντού να χρησιμοποιείς stored procedures, ως ένα ελάχιστο μέτρο προστασίας.

Εάν π.χ. εγώ κάνω το $papaki = (int) $_GET['papaki'] μπορείς να κάνεις αυτό που λες;;;

Δημοσ.

Πιθανότατα όχι. Δεν ξέρω τι επιστρέφει η int αν της περάσεις string literal γιατί έχω μαύρα μεσάνυχτα από php. Ενδεχομένως απλά να μην λειτουργήσει το query που έχεις καθόλου ή να επιστρέφει μια default τιμή. Αλλά όπως και να 'χει καλό είναι να υιοθετείς βέλτιστες πρακτικές. Κάνε τα query parameterized.

Δημοσ.
13 ώρες πριν, elorant είπε

Δεν έχει σημασία αν το input είναι string ή αριθμός. Μπορώ κάλλιστα να σου περάσω αριθμό μαζί με ένα string που θα κάνει το ένα query δύο και το δεύτερο θα κάνει πράγματα στην database σου που δεν τα ελέγχεις. Ψάξτο λίγο, δεν είναι τόσο απλό όσο νομίζεις. Και ποτέ δεν περνάμε queries κατευθείαν από input. Πάντα και παντού να χρησιμοποιείς stored procedures, ως ένα ελάχιστο μέτρο προστασίας.

Εγω λεω αν κανω πχ

$tempip=$GET[‘prod_id’];

$id=(int)$tempip;

$sql=“............. WHERE id=$id”;

Μπορει να γινει ζημια με αυτο;;;

Δημοσ.

Από injection είσαι safe έτσι, αλλά γενικά αυτός δεν είναι ο ενδεδειγμένος τρόπος να γίνουν τα πράγματα, γιατί μπορεί να κάνεις λάθος εκ παραδρομής και γιατί έτσι κι αλλιώς μόλις χρειαστείς string input αυτό πλέον δε δουλεύει. Δες για prepared statements και bound parameters.

Για το πρόβλημα με το κουμπί που δεν δουλεύει πρέπει πρώτα να καταλάβεις (και εμείς το ίδιο) ακριβώς γιατί δεν δουλεύει. Γενικά για να δουλέψει θα πρέπει να έχεις κάποια JavaScript που όταν πατάς το κουμπί να κάνει post τα στοιχεία της φόρμας. Πώς το κάνεις αυτό;

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

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

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

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

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

Σύνδεση

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

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