2010/03/09

PHP: Using HTML form

Бүхий л dynamic web application-уудад html form хэрэглэгддэг. Жишээлбэл энэ бичлэгийн доор comment бичих талбар, google.com-ээс хайлт хийхэд хайлтыхаа текстийг бичээд Google Search, I'm feeling Lucky товчнуудыг дарах сонголтууд зэргийг дурьдаж болох юм. PHP дээр form боловсруулах тун хялбархан хоёр жишээг сонирхуулъя.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
          <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
          <title>Loop - Form Example</title>
    </head>
<body>
    <form action="Looped1.php" method="post" name="form">
        &#1069;&#1085;&#1101; form 
        <input name="Text" value="" type="text">
        &#1090;&#1077;&#1082;&#1089;&#1090;&#1080;&#1081;&#1075;
        <input name="num" value="" type="text">
        &#1091;&#1076;&#1072;&#1072; 
        &#1076;&#1101;&#1083;&#1075;&#1101;&#1094;&#1101;&#1085;&#1076; 
        &#1093;&#1101;&#1074;&#1083;&#1101;&#1085;&#1101;.
        <button value="go" name="go">Go</button>
    </form>
</body>
</html>
Харагдах хэлбэр нь:
Энэ form

текстийг

удаа
дэлгэцэнд
хэвлэнэ.
<from> тагд action="Looped1.php" гэж зааж өгсөн байгаа нь энэ form нь submit хийгдэх үед Looped1.php хуудсыг дуудна гэдгийг заана. Харин method="post" бичиглэл нь Looped1.php дээр $_POST[] үйлдлийн тусламжтай боловсруулагдана хэмээн ойлгож болох юм.

Looped1.php нь дараах байдалтай байна.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head>
  
  <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
  <title>Loop</title>
</head><body>
<?php 
    $text = $_POST['Text'];
    $num = $_POST['num'];
    for($i = 0; $i < $num; $i++){
        echo "$text<br>";
    }
?>
</body></html>
Энд $text = $_POST['Text']; $num = $_POST['num']; $_POST[] үйлдлийн тусламжтай $text $num хувьсагчуудад өмнөх source code-ын Text, num хэмээн нэрлэгдсэн text field-үүдэд бичигдсэн утгуудыг оноож байна.

Hello Form, 8 гэсэн утгуудыг бөглөж өгөөд ажилуулбал дараах байдалтай мэдээллийг хэвлэж байна :) Жишээг энд дарж харна уу

Одоо харин Database-д үйлчлүүлэгчдийн мэдээллийг хадгалдаг, тэдний бүх бүртгэлийг дэлгэцэнд хэвлэдэг form бүхий хуудсыг хийе. example_db нэртэй database-д customer нэртэй table-ийн дараад байдалтай үүсгэ.
CREATE TABLE `example_db`.`customer` (
`name` VARCHAR( 50 ) NOT NULL ,
`last_name` VARCHAR( 50 ) NOT NULL ,
`mail` VARCHAR( 50 ) NOT NULL ,
`phone` VARCHAR( 50 ) NOT NULL ,
`age` INT NOT NULL
) ENGINE = MYISAM ;

Reg.php-ийн source code:
<?php
<html>
    <head><TITLE>Registration Form</TITLE></head>
<body>
<a href='show.php'>Show Table</a>

<p>
<FORM action="save.php" method="POST">
<table>
<TR><TD>User name:</TD><TD><INPUT type="text" name="user_name"><br /></TD></tr>
<tr><TD>Last Name:</TD><TD><INPUT type="text" name="last_name"><br /></TD></tr>
<tr><TD>E  - mail:</TD><TD><INPUT type="text" name="mail"><br /></TD></TR>
<tr><TD>Phone num:</TD><td><INPUT type="text" name="phone"><br /></td></tr>
<tr><TD>Age:</TD><td><INPUT type="text" name="age"><br /></td></tr>
<tr><TD><input type="submit" value="Save and Show table" /></TD></tr>
</table>

</FORM>
</p>
</body>
</html>
?>

save.php-ийн source code:

<?php
    $db_host='localhost';
    $db_database='example_db';
    $db_username='root';
    $db_password='';

    $db_conn = mysql_connect($db_host, $db_username, $db_password);
    
    if (!$db_conn){
        die ("DB connection not successful <br />". mysql_error());
    }else{
        echo "Connection successful <br />";
    }
    
    $db_select = mysql_select_db($db_database);
    
    if (!$db_select){
        die ("DB selection not successful <br />". mysql_error());
    }else{
        echo "DB selection successful<br />";
    }
    
    $un = $_POST['user_name'];
    $ln = $_POST['last_name'];
    $ml = $_POST['mail'];
    $ph = $_POST['phone'];
    $ag = $_POST['age'];
    
    $q = "INSERT INTO `customer` VALUES ('$un','$ln','$ml','$ph',$ag);";
    

    $r = mysql_query( $q);
    
    if (!$r){
        die ("Could not query the database: <br />". mysql_error());
    }else{
        echo "Query executed <br />";
    }
    echo "<a href='show.php'>Shoe table</a>";
    mysql_close($db_conn);
?>

show.php-ийн source code:

<?php
    $db_host='localhost';
    $db_database='example_db';
    $db_username='root';
    $db_password='';

    $db_conn = mysql_connect($db_host, $db_username, $db_password);
    
    if (!$db_conn){
        die ("DB connection not successful <br />". mysql_error());
    }else{
        echo "Connection successful <br />";
    }
    
    $db_select = mysql_select_db($db_database);
    
    if (!$db_select){
        die ("DB selection not successful <br />". mysql_error());
    }else{
        echo "DB selection successful<br />";
    }
    

    $query2 = "select * from `customer`";
    
    $result = mysql_query( $query2 );
    
    if (!$result){
        die ("Could not query2 the database: <br />". mysql_error());
    }

    while ($row = mysql_fetch_row($result)){
               echo "<br />$row[0]<br />"."$row[1]<br />"
        ."$row[2]<br />"."$row[3]<br />"."$row[4]<br />";
    }
    mysql_close($db_conn);
?>

Ажиллууж байгаа жишээг эндээс үзээрэй :)


6 comments:

  1. Justfree хир вэ?

    Дээр ёстой авууштай, яг л нээх их шүүслэг алим шиг нийтлэл байна даа :q (амаа долоов)

    ReplyDelete
  2. хэрэглэгчээс авч буй утгуудаа шалгахгүй бол sql injection хийх боломжтой код байна шүү.

    ReplyDelete
  3. Ойлгомжтой сайхан бичсэн байнаа. Гэхдээ одоо шинээр сурч байгаа хүмүүс болон шинээр төсөл эхлэх гэж байгаа хүмүүс mysql сангаар явах нь төдийлөн зохимжтой бус. харин mysqli, pdo гэх мэтийн сүүлийн сануудаар явах хэрэгтэй гэж PHP -ийнхэн зөвлөдөг. энэ талаар миний soyolerdene.com дээр дэлгэрэнгүй дурдсан буй

    ReplyDelete
  4. Маш олон хүмүүс яг иймэрхүү энгийн байдлаар хийснээр нууцлал хамгаалалт дээрээ асуудал үүсгэдэг. Хэрвээ энэ хэлбэрээр бичих бол mysql_real_escape_string функцээр гаднаас ирж байгаа (_POST) мэдээллээ дамжуулах хэрэгтэй энэ функцийг magic_quotes_gpc тохируулга ямар байгаагаас хамаруулан хэрэглэдэг. Мөн гаднаас орж ирэх мэдээлэл чинь integer байх бол ядаж л intval функцээр дамжуулах шаардлагатай.

    ReplyDelete
  5. "SQL injection"-ээс гадна алдаа байна. XSS attack орж болно. Чи оруулж байгаа өгөгдлөө өшөө сайн шалгах хэрэгтэй. Муу нөхөд нэрээ ингэж оруулж болно шүү дээ? <script text="text/javascript">alert("hacked!!");</script&gt эсвэл тогломоор санагдвал CSS бичсэн ч болно, session hijack?? etc... Анхааралтай байх хэрэгтэй.

    ReplyDelete
  6. Санаа оноогоо хэлж зөвлөсөн та бүхэндээ бүгдэнд нь баярлалаа. Бичиж байгаа зүйл маань Бегиннерүүдэд анхан шатны ойлголт өгөх зорилготой болохоор нарийн ширийнийг нэг их дурдаагүй өнгөрсөн юм. Дараа дараачийн бичлэгүүд дээр хамгаалалт зэргийг анхаарах болно оо :)

    ReplyDelete

Миний бичсэн бичлэг танд өчүүхэн ч болтугай хэрэг болсон бол сэтгэгдлээ бичиж үлдээхийг хүсье. Баярлалаа :)