Πώς νά πάς εκεί πού θέλεις όταν δέν ξέρεις πού είσαι..

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

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

Απάντηση
Άβαταρ μέλους
nikirtsi
Δημοσιεύσεις: 169
Εγγραφή: 02 Ιουν 2006 16:35

Πώς νά πάς εκεί πού θέλεις όταν δέν ξέρεις πού είσαι..

Δημοσίευση από nikirtsi » 30 Αύγ 2007 13:06

Έστω η κάτωθι παραδειγματική δομή αρχείων ενός τόπου ...

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

Site
|
|-Login.php
|-Connect.php
|-inc
| |-ConnectionDB.php
|-Admin
| |-index.php

Άς ορίσουμε πώς η πρώτη σελίδα πού τρέχει είναι η LOGIN.PHP και ότι δέχεται
ένα αναγνωριστικό(Uid) και ένα πιστοποιητικό(Password) χρήστου
και κάτ' επέκτασιν μέσω τίς λογικής τής σελίδος CONNECT.PHP
άν τά εξής στοιχεία(Uid,Pwd) αντιστοιχούν σέ κάποιον υπαρκτό χρήστη
τότε μεταφέρεται στήν σελίδα ADMIN/INDEX.PHP ειδάλλως ξαναπηγαίνει στήν LOGIN.PHP.

Άς πούμε τώρα πώς μέσα στό αρχείο INC/CONNECTIONDB.PHP υπάρχει μία λογική
για τήν σύνδεση τών σελιδών με τήν βάση καί ότι επισυνάπτετε (require_once())
στην σελίδα CONNECT.PHP καί ADMIN/INDEX.PHP.

Ώς εδώ λοιπόν τα πράγματα φαντάζουν μιά χαρά.

Άς δούμε όμως ένα πρόβλημα και μακάρι από κάποιον για τό πώς μπορεί να λυθή.

Μέσα στήν σελίδα INC/CONNECTIONDB.PHP άς πούμε πώς θέλω να βάλω έναν
έλεγχο ο οποίος απλά θά ελέγχή άν η σύνδεσί με τήν βάση ήταν επίτυχής καί άν όχι
τότε να μάς ξαναμεταφέρει στήν σελίδα LOGIN.PHP
Επομένως θα μπορούσε κάτι τέτοιο να γραφότανε ώς εξής

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

if ( Is_SuccessConnection() ) 
{
//all its ok...
} else {
header("Location: Login.php?errCode=ConnectDB_Error");
}
Σωστά; OXI......

Στό εξής παράδειγμα η σελίδα INC/CONNECTIONDB.PHP ενσωματόνετε
(require_once()) στά αρχεία CONNECT.PHP και ADMIN/INDEX.PHP
και δημιουργείτε τό εξής πρόβλημα
πώς δέν μπορείς να πέις κάτι τέτοιο

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

header("Location: Login.php?errCode=ConnectDB_Error");
στό INC/CONNECTIONDB.PHP γιατί όταν ενσωματόνετε από τό CONNECT.PHP
όντως θά ήταν σωστό, αλλά όταν ενσωματόνετε από τό ADMIN/INDEX.PHP
Θα έπρεπε να ήταν έτσι

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

header('Location: ../Login.php?errCode=ConnectDB_Error");
Στό εξής παράδειγμα θα μπορούσες πχ να έλεγες μέσα στό
INC/CONNECTIONDB.PHP για να λύσεις τό πρόβλημα

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

if ( Is_SuccessConnection() ) 
{
//all its ok...
} else {
if (RunPage() = "Connect.php") 
    $redirectPATH = "Login.php?errCode=ConnectDB_Error";
else
   if (RunPage() = "Admin/index.php") 
     $redirectPATH = "../Login.php?errCode=ConnectDB_Error";
}
header("Location:".$redirectPATH);
}
Μία λύση όμως που δέν ενδίκνυτέ (σκεφτείτε πώς τό παράδειγμα είναι υποθετικό).

Πώς θα μπορούσε νά αντιμετωπιστή ένα τέτοιο πρόβλημα επομένως σέ
ένα τόπο ο οποίος περιέχει πολλά αρχεία αλλά ΚΑΙ σέ διαφορετικούς καταλόγους,
διαφορετικού βάθους ;
Ακόμα και ο ήλιος, στό αριστερό μελίγγι μου ανατέλλει καί στό ζερβό δύει.

Άβαταρ μέλους
Alice_Cooper
Δημοσιεύσεις: 1947
Εγγραφή: 11 Μάιος 2007 00:33
Τοποθεσία: Ioannina
Επικοινωνία:

Πώς νά πάς εκεί πού θέλεις όταν δέν ξέρεις πού είσαι..

Δημοσίευση από Alice_Cooper » 30 Αύγ 2007 22:11

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

if ( Is_SuccessConnection() )
{
//all its ok...
} else {
$nasynexiso='oxi';
}
kai sta files

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

if ($nasynexiso=='oxi') header('Location: /Login.php?errCode=ConnectDB_Error");
h

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

if ($nasynexiso=='oxi') header('Location: ../Login.php?errCode=ConnectDB_Error");
ego malon kati tetoio tha ekana me mia proth skepsh...
an skefto kati allo to leo...

edit: sostos o cpulse.
(diorthothike)
Τελευταία επεξεργασία από το μέλος Alice_Cooper την 31 Αύγ 2007 03:02, έχει επεξεργασθεί 1 φορά συνολικά.

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Πώς νά πάς εκεί πού θέλεις όταν δέν ξέρεις πού είσαι..

Δημοσίευση από cpulse » 31 Αύγ 2007 00:04

==

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Πώς νά πάς εκεί πού θέλεις όταν δέν ξέρεις πού είσαι..

Δημοσίευση από dva_dev » 31 Αύγ 2007 01:00

Δεν ξέρω αν είναι καλή τακτική να χρησιμοποιείς το ../ στα paths.
Γιατί δεν δοκιμάζεις να πάψεις να ασχολείσαι με το που βρίσκεται η σελίδα που θέλεις σε σχέση με αυτή που την καλεί και να ασχοληθείς με το που βρίσκεται σε σχέση με το site.

Αντί να έχεις "../../dir1/file.php" να βάλεις "/some path/dir1/file.php"

Άβαταρ μέλους
tix-3-
Δημοσιεύσεις: 827
Εγγραφή: 25 Μαρ 2004 05:12
Τοποθεσία: Θεσσαλονικη-Καβαλα-βεροια(το τριγωνο της καταρας)
Επικοινωνία:

Πώς νά πάς εκεί πού θέλεις όταν δέν ξέρεις πού είσαι..

Δημοσίευση από tix-3- » 31 Αύγ 2007 01:58

Βασικα οπως ειπε και ο dva_dev ποιο λογικο ειναι να τα βαζεις ολα σε ενα φακελο ας πουμε includes το οποιο θα ειναι ιδανικο απο το html public folder και το path του θα το παιρνεις απο το config σου.
Αν δεν υπήρχανε οι κνίτες κι'η ηρωίνη...

Άβαταρ μέλους
nikirtsi
Δημοσιεύσεις: 169
Εγγραφή: 02 Ιουν 2006 16:35

Πώς νά πάς εκεί πού θέλεις όταν δέν ξέρεις πού είσαι..

Δημοσίευση από nikirtsi » 31 Αύγ 2007 10:20

Alice_Cooper
Δέν μπορώ νά καταλάβω τί εννοείς...
Ρίξε μια πιό προσεκτική ματιά στό ότι είπα...
Δέν μπορώ να καταλάβω δηλαδή που θα βοηθούσε αυτό που μου λές.
Γίνε άν θέλης πιο αναλυτικός.


dva_dev
Ναι θα μπορούσα να μετατεθόμουνά μέσω της πλήρης διαδρομής
στήν σελίδα πού θά ήθελα..
Ώς αναφέρεις δηλαδή θά μπορούσα νά έλεγα κάτι τέτοιο
/CMS/Login.php?errCode=ConnectDB_Error
Αυτό όμως θα υποχρέωνε τόν καθένα που θέλει νά εγκαταστήσει τό έν λόγω τόπο
να τό τοποθετήσει στήν ρίζα (root) του HTDOCS με όνομα φακέλου(CMS) όπου τό περιέχει .
και κάτι τέτοιο είναι πολλή περιοριστικό στήν πλευρά τού πελάτου ειδικά σέ σχεδιάσεις
πού δέν απευθύνονται καί μόνον σέ έναν (πελάτη), να τόν εξαναγκάζεις να κάνει τήν εγκατάσταση εκεί που θέλεις.
Δέν είναι λίγο "σκληρό" αυτό;


tix-3-
Ναί όντως φίλε μου, άν όλες οι σελίδες πού επισυνάπταν (στό αρχικό μου παράδειγμα)
τό INC/CONNECTION_DB.PHP βρισκόντουσάν σέ έναν φάκελο ώς λες, δέν θά υπήρχε
αυτό τό πρόβλημα γιά αυτό κιόλας ανέφερά
Πώς θα μπορούσε νά αντιμετωπιστή ένα τέτοιο πρόβλημα επομένως σέ
ένα τόπο ο οποίος περιέχει πολλά αρχεία αλλά ΚΑΙ σέ διαφορετικούς καταλόγους,
διαφορετικού βάθους ;

Υπάρχει τελικώς κάποια ουσιαστική λύσι γιά αυτό τό πρόβλημα, πέρα τής πατέντας.
Κάποια τεχνική. Έχει φροντίσει καθόλου η PHP για αυτό τό πρόβλημα;
Ακόμα και ο ήλιος, στό αριστερό μελίγγι μου ανατέλλει καί στό ζερβό δύει.

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Πώς νά πάς εκεί πού θέλεις όταν δέν ξέρεις πού είσαι..

Δημοσίευση από cpulse » 31 Αύγ 2007 10:36

Η κάθε λύση έχει τα υπέρ της και τα κατά της. Πρέπει να επιλέξεις που θα κερδίσεις και που θα χάσεις.

Το καλύτερο για μένα είναι τα absolute paths, όπως τα περιέγραψε ο dva_dev. Για να μην υπάρξει ο περιορισμός στον οποίο αναφέρεσαι μπορείς να έχεις ένα configuration file το οποίο να κρατάει ένα prefix για όλα τα URL σου.

Στα δικά μου προγράμματα πάντα καλώ ένα initialization file με relative path, και αυτό με την σειρά του συγκρατεί το absolute path των scripts. Μετά καλεί κι ένα configuration file και γενικώς όλα πάνε αυτόματα μετά.

page1.php

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

require('./initialize.php');

header($url_prefix . '/Login.php?errCode=ConnectDB_Error');

initialize.php

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

$script_path = dirname(__FILE__) . '/';
require($script_path . 'inc/configuration.php');
require($script_path . 'inc/db.php');

... κτλ ...

inc/configuration.php

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

$url_prefix = '/CMS';

Άβαταρ μέλους
nikirtsi
Δημοσιεύσεις: 169
Εγγραφή: 02 Ιουν 2006 16:35

Πώς νά πάς εκεί πού θέλεις όταν δέν ξέρεις πού είσαι..

Δημοσίευση από nikirtsi » 31 Αύγ 2007 10:56

Alice_Cooper
Τώρα σε κατάλαβά...
Τελικά ξέρεις τί λένε ;
H ευφυία πηγάζει από τήν απλότητα , πόσο χαζός νιώθω τώρα μέ όλοιν αυτήν τήν
πολυπλοκότητά μου.
Δώστε λίγο προσοχή στήν τόσο όμορφος λύσι τού Alice_Cooper.
Ευχαριστώ.....

Cpulse
Τελικά στήν δικιά μου περίπτωσι (στήν περίτπωσι δηλαδή τού έργου όπου έχω αναλάβει)
είναι προτιμότερο νά βάλω μιά επιπρόσθετος γραμμή κώδικα (βάση τής παραθέσεως του Alice_Cooper)
σέ κάθε αρχείο όπου επισυνάπτει τήν λογική του INC/CONNECTION_DB.PHP
παρά να ενημερώνω κάθε φορά σέ κάθε εγκατάστασί έστω και για μιά φορά ένα αρχείο
ρυθμίσεων.
Καλώς ήλθες Cpulse.
Ακόμα και ο ήλιος, στό αριστερό μελίγγι μου ανατέλλει καί στό ζερβό δύει.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

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

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