הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   [PHP] תיקון קוד. (https://hosts.co.il/forums/showthread.php?t=70703)

Dodem 31-12-08 13:56

[PHP] תיקון קוד.
 
שלום לכולם,

כמו שכתבתי בפוסט הקודם, אני עובד על טופס של התחברות, שבודק אם השם משתמש וססמא קיימים במסד נתונים, במידה וכן הטופס נותן לך להתחבר. וכמובן יש אופציה של הרשמה.

בנתיים אני עובד על החלק של ההתחברות. יצרתי בעצם את ההתחברות אבל ראיתי שיש הרבה באגים.

להלן הקוד:
אם מישהו רואה טעות מסויימת, אני אשמח אם הוא יעזור ויתקן ויכתוב מה הייתה הטעות.

תודה מראש.

PHP קוד:

<html>
    <head> <title> Connect </title> </head>
    <body> <h1> connect to your editor </h1> 
    <?php
    $connection 
mysql_connect("DBNAME" "USERNAME" "PASSWORD") or die ("couldn't connect to the server");
    
mysql_select_db("DBNAME" $connection ) or die ("couldn't connect to the database");
    
    function 
connect() {
        
$connect = <<<EOF
        <FORM METHOD = "POST" ACTION="">
        <INPUT TYPE="TEXT" NAME="USERNAME"> <br><br>
        <INPUT TYPE="PASSWORD" Name="PASSWORD"> <br><br>
        <INPUT TYPE="SUBMIT" VALUE="התחבר" NAME="SUBMIT">
        </FORM>
        EOF;
    }
    
    if(isset($_POST'['SUBMIT'] {
    
    $q = mysql_query ("SELECT * FROM 'table1' WHERE 'USERNAME' = '
{$_POST['USERNAME']}' AND 'PASSWORD' = '{$_POST['PASSWORD']}' ");
    $r = mysql_num_rows ($q);
    if ($r > 0)
    {
        echo 'you are online, and you can use the editor';
    }
    
    else {
        echo 'bad username or password, please try again';
        connect();
    }
}    
                                             
    ?>
    </body>
    </html>


Xinxy 31-12-08 14:11

ה-EOF; צריך להיות בלי רווחים

עריכה:
PHP קוד:

if(isset($_POST'['SUBMIT] { 

??

Dodem 31-12-08 14:51

תודה,
אבל עדיין יש בעיה בקובץ. תוכל לראות את זה על השרת.

Xinxy 31-12-08 14:56

ציטוט:

נכתב במקור על ידי Dodem (פרסם 689883)
תודה,
אבל עדיין יש בעיה בקובץ. תוכל לראות את זה על השרת.

PHP קוד:

<html>
    <head> <title> Connect </title> </head>
    <body> <h1> connect to your editor </h1> 
    <?php
    $connection 
mysql_connect("DBNAME" "USERNAME" "PASSWORD") or die ("couldn't connect to the server");
    
mysql_select_db("DBNAME" $connection ) or die ("couldn't connect to the database");
    
    function 
connect() {
        
$connect = <<<EOF
        <FORM METHOD = "POST" ACTION="">
        <INPUT TYPE="TEXT" NAME="USERNAME"> <br><br>
        <INPUT TYPE="PASSWORD" Name="PASSWORD"> <br><br>
        <INPUT TYPE="SUBMIT" VALUE="התחבר" NAME="SUBMIT">
        </FORM>
EOF;
    }
    
    if(isset(
$_POST['SUBMIT'])) {
    
    
$q mysql_query ("SELECT * FROM 'table1' WHERE 'USERNAME' = '".$_POST['USERNAME']."' AND 'PASSWORD' = '".$_POST['PASSWORD']."'");
    
    
$r mysql_num_rows ($q);
    if (
$r 0)
    {
        echo 
'you are online, and you can use the editor';
    }
    
    else {
        echo 
'bad username or password, please try again';
        
connect();
    }
}    
                                             
    
?>
    </body>
    </html>


DvirCohen 31-12-08 15:03

זה מציג לך בכלל את הטופס?
בפונקציה connect אתה לא עושה return למשתנה connect$ ואז מדפיס את הפונקציה/אתה לא מדפיס את הטופס ישירות מתוך הפונקציה.

כלומר על הנייר זה לא אמור להציג לך את הטופס בכלל כי אתה פשוט מציב משתנה סטטי בפונקציה.

עוד דבר, בשאילתה.
שמות של שדות/טבלאות תוחמים ב`` ולא ב' '.
אפשר גם בלי ה` `, אבל מומלץ מאוד עם כדי למנוע מצב שיש לך שדות עם מילים שמורות של השפה ואז השאילתה תקרוס.

אממ סתם כמה דברים
1. סתם לייעל את הקוד. בשאילתה שלך אתה לא צריך לעשות * בשדות בחירה, מספיק שתבחר שדה אחד, סתם חבל על כל המידע שנשלף, תחשוב שאתה שולח 10 שדות ונכנסים לך 1000 משתמשים, במקום שישלפו 1000 שדות נשלפים 10,000.

2. שוב בשאילתה, עכשיו אתה רק לומד וזה בסדר, אבל אני הייתי מתחיל עם זה כבר עכשיו - תלמד לאבטח את הקלט. עם הקוד הזה אפשר בקלות לעשות SQL INJ.

intercooler3819 31-12-08 19:31

ציטוט:

<html>
<head> <title> Connect </title> </head>
<body> <h1> connect to your editor </h1>
<?php
$connection = mysql_connect("DBNAME" , "USERNAME" , "PASSWORD") or die ("couldn't connect to the server");
mysql_select_db("DBNAME" , $connection ) or die ("couldn't connect to the database");

function connect() {
return <<<EOF
<FORM METHOD = "POST" ACTION="">
<INPUT TYPE="TEXT" NAME="USERNAME"> <br><br>
<INPUT TYPE="PASSWORD" Name="PASSWORD"> <br><br>
<INPUT TYPE="SUBMIT" VALUE="התחבר" NAME="SUBMIT">
</FORM>
EOF; // dollarconnect is a local variable withing the function connect, this won't get you anything except headaches
}

if(isset($_POST'['SUBMIT'])) { // what about closing the if?

$q = mysql_query ("SELECT * FROM 'table1' WHERE 'USERNAME' = '{$_POST['USERNAME']}' AND 'PASSWORD' = '{$_POST['PASSWORD']}' ");
$r = mysql_num_rows ($q);
if ($r == 1) // if there are couple of users with the same name and password?
{
echo 'you are online, and you can use the editor';
}

else {
echo 'bad username or password, please try again';
echo "<br />" . connect(); // since i changed connect() i should echo the returned value too
}
}

?>
</body>
</html>
have fun pal

intercooler3819 31-12-08 19:32

ציטוט:

נכתב במקור על ידי DvirCohen (פרסם 689886)
זה מציג לך בכלל את הטופס?
בפונקציה connect אתה לא עושה return למשתנה connect$ ואז מדפיס את הפונקציה/אתה לא מדפיס את הטופס ישירות מתוך הפונקציה.

כלומר על הנייר זה לא אמור להציג לך את הטופס בכלל כי אתה פשוט מציב משתנה סטטי בפונקציה.

עוד דבר, בשאילתה.
שמות של שדות/טבלאות תוחמים ב`` ולא ב' '.
אפשר גם בלי ה` `, אבל מומלץ מאוד עם כדי למנוע מצב שיש לך שדות עם מילים שמורות של השפה ואז השאילתה תקרוס.

אממ סתם כמה דברים
1. סתם לייעל את הקוד. בשאילתה שלך אתה לא צריך לעשות * בשדות בחירה, מספיק שתבחר שדה אחד, סתם חבל על כל המידע שנשלף, תחשוב שאתה שולח 10 שדות ונכנסים לך 1000 משתמשים, במקום שישלפו 1000 שדות נשלפים 10,000.

2. שוב בשאילתה, עכשיו אתה רק לומד וזה בסדר, אבל אני הייתי מתחיל עם זה כבר עכשיו - תלמד לאבטח את הקלט. עם הקוד הזה אפשר בקלות לעשות SQL INJ.

למה בכלל לשלוף שדות? COUNT(*)


כל הזמנים הם GMT +2. הזמן כעת הוא 20:56.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ