PHP-Script.hu
Kiemelt hirdetés:
2018. augusztus 15. 12:36 szerda, ma Mária névnap van


grafika


Videóbázis


1 | 2Előre
Listázás:  Idő szerint:
Webprogramozás arr PHP info Kérlek segítsetek! PHP!
(#17) tothzsolt 2018.04.10. 17:08

tothzsolt
tothzsolt
Kezdő

Sziasztok. Most tanulom a programozást, és elakadtam 1 bejelentkezésnél php-ben, elkellene 1 kis segitség. Nem tudom hogy az alábbi kódrészlet miért nem hajtja végre a csatlakozást az adatbázissal. Előre is köszönöm a segitséget. Bemásolom az állományok tartalmát:

index.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" type="text/css" href="Stil.css">
<link rel="stylesheet" type="text/css" href="stil.css">
</head>
<body>
<?php
 
require_once("classes/logindb.php");
$login = new Login();
 
 
// ... ask if we are logged in here:
if ($login->isUserLoggedIn() == true) {
    require_once("classes/menu.php");
    // the user is logged in. you can do whatever you want here.
    // for demonstration purposes, we simply show the "you are logged in" view.
    include("classes/logged_in.php");
    echo "belepve2";
 
} else {
    // the user is not logged in. you can do whatever you want here.
    // for demonstration purposes, we simply show the "you are not logged in" view.
    include("classes/not_logged_in.php");
}
 
?>
 
 


logindb.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
 
<?php
 
define("DB_HOST", "localhost");
define("DB_NAME", "service");
define("DB_USER", "root");
define("DB_PASS", "");
 
/**
 * Class login
 * handles the user's login and logout process
 */
 
class Login
{
    /**
     * @var object The database connection
     */
    private $db_connection = null;
    /**
     * @var array Collection of error messages
     */
    public $errors = array();
    /**
     * @var array Collection of success / neutral messages
     */
    public $messages = array();
 
    /**
     * the function "__construct()" automatically starts whenever an object of this class is created,
     * you know, when you do "$login = new Login();"
     */
 
    public function __construct()
    {
        // create/read session, absolutely necessary
        session_start();
 
        // check the possible login actions:
        // if user tried to log out (happen when user clicks logout button)
        if (isset($_GET["logout"])) {
            $this->doLogout();
        }
        // login via post data (if user just submitted a login form)
        elseif (isset($_POST["login"])) {
            $this->dologinWithPostData();
 
        }
    }
 
    /**
     * log in with post data
     */
    private function dologinWithPostData()
    {
 
        // check login form contents
        if (empty($_POST['username'])) {
            $this->errors[] = "Username field was empty.";
        } elseif (empty($_POST['password'])) {
            $this->errors[] = "Password field was empty.";
        } elseif (!empty($_POST['username']) && !empty($_POST['password'])) {
 
            // create a database connection, using the constants from config/db.php (which we loaded in index.php)
            $this->db_connection = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
 
            // change character set to utf8 and check it
            if (!$this->db_connection->set_charset("utf8")) {
                $this->errors[] = $this->db_connection->error;
            }
 
            // if no connection errors (= working database connection)
            if (!$this->db_connection->connect_errno) {
 
                // escape the POST stuff
                $username = $this->db_connection->real_escape_string($_POST['username']);
 
                // database query, getting all the info of the selected user (allows login via email address in the
                // username field)
                $sql = "SELECT username, password
                        FROM users
                        WHERE username = '$username '
                        ";
                $result_of_login_check = $this->db_connection->query($sql);
 
                // if this user exists
                if ($result_of_login_check->num_rows == 1) {
 
                    // get result row (as an object)
                    $result_row = $result_of_login_check->fetch_object();
 
                    // using PHP 5.5's password_verify() function to check if the provided password fits
                    // the hash of that user's password
                    if (password_verify($_POST['password'], $result_row->password)) {
 
                        // write user data into PHP SESSION (a file on your server)
                        $_SESSION['username'] = $result_row->username;
                        $_SESSION['user_login_status'] = 1;
 
                    } else {
                        $this->errors[] = "Wrong password. Try again.";
                    }
                } else {
                    $this->errors[] = "This user does not exist.";
                }
            } else {
                $this->errors[] = "Database connection problem.";
            }
        }
    }
 
    /**
     * perform the logout
     */
    public function doLogout()
    {
        // delete the session of the user
        $_SESSION = array();
        session_destroy();
        // return a little feeedback message
        $this->messages[] = "You have been logged out.";
 
    }
 
    /**
     * simply return the current state of the user's login
     * @return boolean user's login status
     */
    public function isUserLoggedIn()
    {
 
        if (isset($_SESSION['user_login_status']) AND $_SESSION['user_login_status'] == 1) {
            return true;
        }
        // default return
        return false;
    }
}
    
?>
 


logged_in.php
1
2
3
4
5
6
7
8
9
10
 
<?php 
echo $_SESSION['username'];
?>. 
You are logged in.
Try to close this browser tab and open it again. Still logged in! ;)
 
<!-- because people were asking: "index.php?logout" is just my simplified form of "index.php?logout=true"
<a href="index.php?logout">Logout</a> -->
 


not_logged_in.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
<?php
// show potential errors / feedback (from login object)
if (isset($login)) {
    if ($login->errors) {
        foreach ($login->errors as $error) {
            echo $error;
        }
    }
    if ($login->messages) {
        foreach ($login->messages as $message) {
            echo $message;
        }
    }
}
?>
 


Zsolt
(#16) szaszekk56 2014.09.17. 09:01

szaszekk56
szaszekk56
Kezdő

Helló mindenkinek! Nem tudok kihez fordulni, így csak bízom benne, hogy itt valaki szaki tud majd segíteni.
Adott az SMF fórumom, amiben az adminba lépve bizonyos menüpontoknál hibát ír ki, miszerint a Manage Settings.php-ban a 360. sorbanbaj van: (ManageSettings.php on line 360)

A fenti sort bemásolom a 360-365-ig. Ez a telepített Arcade games-nek a hibája, csak nem tudom, hogy mi.
Íme:

1
2
3
4
5
6
7
8
9
10
11
        ),
    );
 
    // Anyone who would like to add a core feature?
        // arcade = arcade (makes sense, right?)
        'arcade' => array(
            'url' => 'action=admin;area=arcade',
            'settings' => array(
                'arcadeEnabled' => 1,
            ),
        ),  call_integration_hook('integrate_core_features', array(&$core_features));


Előre is köszönöm az építő jellegű hozzászólásokat.


Szasza
(#15) Viharkelto 2014.08.12. 18:48

Viharkelto
Viharkelto
Kezdő

Sziasztok!

Nem tudom ismeritek e ezt a sulit:
http://www.budapest-tanfolyam.hu/php-oop-tanfolyam

Több tanfolyamuk is van PHP témában, hátha érdekel valakit!

Szép napot!

(#14) rony 2014.01.18. 21:49

rony
rony
Kezdő

Sziasztok!
Nekem az lenne a nagy kérdésem, hogy az ftp belépést lehet-e blokkolni akár ip-re is.
de persze úgy, hogy akik megszeretnék nézni a weboldalam megtudják csak egy vagy kettő ip-ről lehessen belépni az ftp-re


Shanyii
(#13) Jedimaster válasza erre: (#12) anti 2014.01.14. 15:48

Jedimaster
Jedimaster
Kezdő

Így igaz, magam is erre gondoltam...
Meg konkrétan arra, hogy a Tutorialok részben is elhelyeztetném és akkor az OOP -t elejétől el tudnám magyarázni, mert nekem teljesen átformálta a webprogramozásról alkotott nézeteimet.

Amit tervezek:

- Két részes OOP PHP(kezdő és haladó szint),
- Saját template -ek meghatározása(MySQL_CLASS, HTML_CLASS, saját kivételkezelő osztály elkészítésének és működésének bemutatása),
- Egy saját MVC rendszer elkészítésének bemutatása, az MVC -k használatának bemutatása(még nincs kész...),
- Végül az ERP rendszermodulom elkészítésének bemutatása(ezt még meg kell beszélnem a volt főnökeimmel, mivel az eredeti nekik készült, bár az is igaz, hogy a szakdolgozatom épp erről szólt, ami a törvények értelmében publikus, ráadásul az új verziót egyfajta referenciamunkának is szánom; ennek ellenére lehet, hogy egy másik projektet mutatok inkább be, de nyugi: az is tele lesz mindenféle finomsággal ;) ).

(#12) anti válasza erre: (#11) Jedimaster 2014.01.13. 10:48

anti
anti
Kezdő

"Ha elkészülök vele, dokumentálom és közzéteszem, hátha segítek ezzel másoknak...:)"

Ezt nagyon támogatom. Sőt, ha van rá energiád és az oldal szerkesztői is lehetővé teszik, egy cikk formájában publikálhatnád a modul elkészítése során szerzett tapasztalataid, meglátásod. Segítség lehet azoknak, akik szintén most ismerkednek vele.

(#11) Jedimaster válasza erre: (#10) anti 2014.01.11. 17:24

Jedimaster
Jedimaster
Kezdő

Köszi a segítséget, végül egy, az MVC rendszerszemléletre hajazó megoldást találtam.
Igaz, így több fájlt kaptam, de azok lényegesen egyszerűbbek és rövidebbek, ezáltal könnyebben átláthatók lettek. :)

Eredetileg az okozta a hibát, hogy egyetlen MySQL osztállyal akartam az egész fórum minden DB műveletét megcsináltatni, az általánosság jegyében. Végül ez zavart be...

A megoldásom lényege, hogy van az index.php nevű oldal, ami meghív egy includeIndex.php oldalt. Ez tartalmazza az indexView, az indexController és az indexModel nevű PHP fájlhívást. Az azonos nevű osztály(IndexView) példányosítását és a form -ot kiírató metódus hívását maga az index.php tartalmazza. A form -on bevitt adatokat a nézetfájl átadja az indexController nevű fájlnak, ami az indexModel fájl azonos nevű osztályát meghívva, elvégzi a szükséges DB műveletet, majd visszatérési értékét visszaadja az indexControllernek, az pedig az indexView.php -nek, amit az index.php oldalon hívtunk meg...
A későbbiekre nézve jelentős könnyítést jelent ez, mivel egyetlen osztály mindig csak kevés műveletet végez el, ezzel csökkentve az erőforrásigényt és könnyebbé téve a leszármaztatást - tehát kevesebb kódot kell újra megírni, ami csökkenti a hibázás lehetőségét -.
Innen nézve felesleges bonyodalomnak tűnik, de a weboldalon több DIV is található, amik mind osztályokkal dolgoznak. Ahelyett, hogy egy oldalon egyetlen osztályt példányosítanék és vele végeztetnék el mindent, inkább puzzle-ként építem fel az oldalamat...
Sok mindenkinek egyértelmű lehet ez a szemléletmód, de -mint már mondtam- még kezdő vagyok, főleg OOP PHP területén...:)

Ez a fórum igazából egy összetettebb oldal modulja lesz(egy ERP rendszer egy fő moduljának része, amit egyszer már lefejlesztettem, akkor még procedurális szemléletben).
Ha elkészülök vele, dokumentálom és közzéteszem, hátha segítek ezzel másoknak...:)

Még egyszer köszi a segítségedet, Anti!
A te ötleted vezetett oda, hogy felismerjem, hogy a SELECT eredményét ne egy általános, minden más lekérdezésnél is használt metódussal adjam vissza, hanem írjak egy olyan, specifikus osztályt, ami megfelel a célomnak.

(#10) anti válasza erre: (#9) Jedimaster 2014.01.08. 21:16

anti
anti
Kezdő

Az eredetiben azért nem kellett tömb, mert a while rögtön egy string-be fűzi az eredményeket kiíratás előtt. Te ketté választottad az adatgyűjtést és a kiírást.

Én így módosítanék két függvényen:

1
2
3
4
5
6
7
8
9
10
11
public function setCat() {    
    $conn = new Connect();
    
    $query = "SELECT * FROM categories ORDER BY category_title ASC";
    $cat = $conn -> getSelect($query);
    
    if(!$cat)
        $cat = "<p>Nincsenek kategóriák!</p>";
    
    return $cat;
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
public function getSelect($query) {
    $ret = mysql_query($query);
 
    $categories = "";
    while($row = mysql_fetch_assoc($ret)) {
            $id = $row['id'];
            $title = $row['category_title'];
            $description = $row['category_description'];
            $categories .= "<a href="view_category.php?cid=".$id."" class="cat_links"><b>".$title.
                    "</b> - <font size="-1">".$description."</font></a>";
    }
 
    return $categories;
}

(#9) Jedimaster válasza erre: (#8) anti 2014.01.08. 20:37

Jedimaster
Jedimaster
Kezdő

Köszi, erre már gondoltam, de nem sikerült megoldanom. Az a baj, h az eredeti program szerint sem kellett tömböt használni.
Az eredeti kód(index.php -nek csak a lényegi része):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
<?php
    
    include_once("connect.php");
    
    $sql = mysql_query("SELECT * FROM categories ORDER BY category_title ASC");
    
    $categories = "";
    
    if(mysql_num_rows($sql) > 0) {
        while($row = mysql_fetch_assoc($sql)) {
            $id = $row['id'];
            $title = $row['category_title'];
            $description = $row['category_description'];
            $categories .= "<a href="view_category.php?cid=".$id."" class="cat_links"><b>".$title.
                    "</b> - <font size="-1">".$description."</font></a>";
        }
        
        echo $categories;
    } else {
        echo "<p>Nincsenek kategóriák!</p>";
    }
    
?>
 


Azt nem értem, hogy ugyanezek a while -ok és if -ek szerepelnek az én kódomban is, csak nem azonos fájlban.
Ráadásul ötször listázta ki a kategóriákat úgy, ahogy kell, csak minden kategória ugyanaz volt(rákattintva is ugyanazt az id-t küldte GET -tel).

Megtennéd, hogy leírod, hogy mit írnál át konkrétan?
Normál esetben nem lenne gáz, de reggel óta fel sem keltem a gép elöl (még a mai edzés is kimaradt, pedig nem szokásom kihagyni...) és már érzem, hogy egyszerűen nem fog az agyam...

Előre is köszi.

(#8) anti válasza erre: (#7) Jedimaster 2014.01.08. 19:19

anti
anti
Kezdő

A probléma egy illetve két helyen van.

1. A connect.php getSelect() függvényében a while()-on belül azonnal visszatérsz az első eredménnyel, ezért íródik ki csak egy kategória. Ehelyett ki kéne gyűjtened az eredményeket egy tömbbe és azt visszaadni.

2. Ha az 1. pont szerint cselekszel, akkor jön elő a második probléma. Jelenleg a class.php setCat() függvényében a $row-ot egyetlen rekordként kezeled, ami így jó is. Viszont amikor tömböt fogsz visszakapni, akkor egy foreach-csel végig kell menni a kapott tömbön és összefűzni a rekordokat egyetlen string-gé.

Listázás:  Idő szerint:
1 | 2Előre


© 2006-2018 PHP-Script.hu, Minden jog fenntartva!
Design: Rácz Gergely, Oldalmotor: Rácz Gergely
Impresszum - Oldaltörténet - Oldalszabályzat