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

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

Jonathan Zeierman 21-06-08 17:41

Mysql בעיה
 
שלום חברים...
התחלתי ללמוד SQL,ויצרתי 2 טפסים כאלו:
טופס בוא נקרא לזה סתם הרשמה:
<
PHP קוד:

html>
<
head>
<
meta http-equiv="Content-Language" content="he"
<
meta http-equiv="Content-Type" content="text/html; charset=windows-1255">
<
title>&#1492;כנסת נתונים לתוך טבלה</title>
</head>
<
body>
<
form method="post" action="dbcreate.php">
<
p align="center" dir="rtl"><font size="6"><b>&#1492;כנסת נתונים לתוך טבלה דרך טופס:</b></font></p>
<p align="center" dir="rtl">&nbsp;</p>
<
p align="center" dir="rtl"><font size="4"><b>&#1513;ם פרטי: </b></font><font face="Arial"><input name="name" id="u1" style="font-weight: 700"></font></p>
<p align="center" dir="rtl"><font size="4"><b>&#1502;ספר: </b></font><font face="Arial">
<input name="number" id="u2" style="font-weight: 700" size="7"></font></p>
<
p align="center">
<
input type="submit" value="שלח" style="font-weight: 700"></p>
</
p>
</
body>
</
html

וטופס PHP שמבצע את הפעולות שנתבקשו:
PHP קוד:

<HTML>
    <HEAD>
        <TITLE>
            הצגת נתונים מתוך טבלה
        </TITLE>
    </HEAD>

    <BODY>
        <CENTER>
            <H1>הצגת נתונים מתוך טבלה</H1>

            <?php
                 $connection 
mysql_connect("localhost","DBNAME","DBPASS")
                     or die (
"Couldn't connect to server");

                 
$query "CREATE DATABASE IF NOT EXISTS DBNAME";
                 
$result mysql_query($query)
                      or die(
"Query failed: " mysql_error());

                 
$db mysql_select_db("DBNAME"$connection)
                     or die (
"Couldn't select database");

$name $_POST["name"]; 
$number $_POST["number"]; 

                 
$query "INSERT INTO reg (name, number) VALUES('$name', '$number')";
                 
$result mysql_query($query)
                      or die(
"Query failed: " mysql_error());

                 
$query "SELECT * FROM reg";
                 
$result mysql_query($query)
                      or die(
"Query failed: " mysql_error());

                 echo 
"<TABLE BORDER='1'>";
                 echo 
"<TR>";
                 echo 
"<TH>Name</TH><TH>Number</TH>";
                 echo 
"</TR>";

                 while (
$row mysql_fetch_array($result))
                 {
                     echo 
"<TR>";
                     echo 
"<TD>"$row['name'], "</TD><TD>"$row['number'], "</TD>";
                     echo 
"</TR>";
                 }

                 echo 
"</TABLE>";

                 
mysql_close($connection);

             
?>
         </CENTER>
    </BODY>
</HTML>

הכל עובד לי מצויין חוץ מחלק 1:
אחרי שנרשמים כאילו זה יציג לנו את השם ואת המספר שרשמנו...
אבל פה הבעיה שאם אני אעשה בדפדפן "רענן" לדף הוא יציג עוד פעם את אותם נתונים פעמיים על ידי זה שעשיתי "רענן" , אין לי מושג איך לפתור את זה O_O.
מי שיוכל לעזור אודה לו מאד,
יוני.

רומן 21-06-08 17:52

לא ממש הבנתי... נרשמים אלייך, ואחרי ההרשמה הם רואים את השם איתו נרשמו, ומה הבעיה?

Jonathan Zeierman 21-06-08 17:58

אחרי שאתה רואה את השם איתו נרשמת בדף שנקרא:
dbcreate.php
תעשה רענן ותראה את השם שלך עוד הפעם,הנה דוגמא:
http://half-life.co.il/sql/reg.html

Ron | CSite.co.il 21-06-08 19:40

ציטוט:

נכתב במקור על ידי FreshGame.Net (פרסם 643686)
אחרי שאתה רואה את השם איתו נרשמת בדף שנקרא:
dbcreate.php
תעשה רענן ותראה את השם שלך עוד הפעם,הנה דוגמא:
http://half-life.co.il/sql/reg.html

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

בניה 21-06-08 19:53

כמה עצות:
1. תשתמש ב mysql_fetch_assoc ולא array.

2. את הכנסת הנתונים לטבלה תעשה בתוך IF הגיעו נתונים מהטופס רק אז לנסות להכניס אותם.
ואם הגיעו נתונים להכנסה, תעשה redirect מחדש לדף ואז זה ימנע מהדפדפן לנסות לשלוח את נתוני הPOST מחדש בריענון.

3. תעשה mysql_real_escape_string לפני שאתה מכניס נתונים מהמשתמש לשאילתה

4. תשתמש ב HEREDOC שזה הדבר עם ה>>>

הקוד יראה משהו כזה:

PHP קוד:

<?php
                 $connection 
mysql_connect("localhost","DBNAME","DBPASS")
                     or die (
"Couldn't connect to server");

                 
$query "CREATE DATABASE IF NOT EXISTS DBNAME";
                 
$result mysql_query($query)
                      or die(
"Query failed: " mysql_error());

                 
$db mysql_select_db("DBNAME"$connection)
                     or die (
"Couldn't select database");

        if(isset(
$name) && isset($_POST["number"])) {

            
$name mysql_real_escape_string($_POST["name"]);
            
$number mysql_real_escape_string($_POST["number"]);

            
$query "INSERT INTO `reg` (name, number) VALUES('{$name}', '{$number}')";
            
$result mysql_query($query)
                   or die(
"Query failed: " mysql_error());
            
header("Location: ?");
            die();

        }
?>
<HTML>
    <HEAD>
        <TITLE>
            äöâú ðúåðéí îúåê èáìä
        </TITLE>
    </HEAD>

    <BODY>
        <CENTER>
            <H1>äöâú ðúåðéí îúåê èáìä</H1>

            <?php

                 $query 
"SELECT * FROM reg";
                 
$result mysql_query($query)
                      or die(
"Query failed: " mysql_error());

echo <<<HTML
<TABLE BORDER='1'>
<TR>
    <TH>Name</TH><TH>Number</TH>
</TR>

HTML;

                 while (
$row mysql_fetch_assoc($result))
                 {
echo <<<HTML
                     <TR>
<TD>
{$row['name']}</TD><TD>{$row['number']}</TD>
</TR>
HTML;
}

echo <<<HTML
</TABLE>
HTML;

                 
mysql_close($connection);

             
?>
         </CENTER>
    </BODY>
</HTML>


Jonathan Zeierman 21-06-08 21:30

יש בעיה עם התו הזה:
PHP קוד:



הנה השגיאה:
ציטוט:

Parse error: syntax error, unexpected '}' in /home/half/domains/half-life.co.il/public_html/sql/dbcreate.php on line 57
הקוד:
PHP קוד:

<?php 
                 $connection 
mysql_connect("localhost","DBNAME","DBPASS"
                     or die (
"Couldn't connect to server"); 

                 
$query "CREATE DATABASE IF NOT EXISTS DBNAME"
                 
$result mysql_query($query
                      or die(
"Query failed: " mysql_error()); 

                 
$db mysql_select_db("DBNAME"$connection
                     or die (
"Couldn't select database"); 

        if(isset(
$name) && isset($_POST["number"])) { 

            
$name mysql_real_escape_string($_POST["name"]); 
            
$number mysql_real_escape_string($_POST["number"]); 

            
$query "INSERT INTO `reg` (name, number) VALUES('{$name}', '{$number}')"
            
$result mysql_query($query
                   or die(
"Query failed: " mysql_error()); 
            
header("Location: ?"); 
            die(); 

        } 
?> 
<HTML> 
    <HEAD> 
        <TITLE> 
            שליפת נתונים מתוך טבלה 
        </TITLE> 
    </HEAD> 

    <BODY> 
        <CENTER> 
            <H1>שליפת נתונים מתוך טבלה</H1> 

            <?php 

                 $query 
"SELECT * FROM reg"
                 
$result mysql_query($query
                      or die(
"Query failed: " mysql_error()); 

echo <<<HTML
<TABLE BORDER='1'>
<TR> 
    <TH>Name</TH><TH>Number</TH> 
</TR> 

HTML; 

                 while ($row = mysql_fetch_assoc($result))
                 {
echo <<<HTML 
                     <TR> 
<TD>
{$row['name']}</TD><TD>{$row['number']}</TD> 
</TR> 
HTML;
}

echo <<<HTML
</TABLE> 
HTML;

                 
mysql_close($connection); 

             
?> 
         </CENTER> 
    </BODY> 
</HTML>


Megnum 21-06-08 21:42

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

בניה 21-06-08 22:19

1 קבצים מצורפים
אצלי לא.
תנסה להוריד את הקובץ ולשנות לו את הסיומת

Jonathan Zeierman 21-06-08 22:31

ציטוט:

נכתב במקור על ידי בניה (פרסם 643747)
אצלי לא.
תנסה להוריד את הקובץ ולשנות לו את הסיומת

אכן עובד:]
תודה רבה רבה רבה,אפשר לנעול.


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

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