Thứ Ba, 31 tháng 1, 2012

Foreign Key trong MySQL

Để tạo khóa ngoại trong MySQL


Create table Orders
(orderid int primary key,
ccode varchar(10) not null,
orderdate date,
foreign key(ccode) references customers(ccode))

Không phải sử dụng theo SQL chuẩn


Create table Orders
(orderid int primary key,
ccode varchar(10) not null foreign key(ccode) references customers(ccode)
orderdate date,
)

Unicode trong MySQL

TRONG MySQL KHÔNG CẦN DÙNG KÝ TỰ N NHƯ TRONG SQL Server


Để thiết lập kiểu dữ liệu Unicode trong MySQL

CREATE TABLE `dgs` ( 
`id` INT( 5 ) NOT NULL , 
`name` VARCHAR( 255 ) NOT NULL , 
PRIMARY KEY ( `re` ) 
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Hoặc trong PHP

mysql_query("SET NAMES 'UTF8'");

Thứ Năm, 12 tháng 1, 2012

Install ibrowser

http://seoroot.com/blog/computing/programming/tinymce-ibrowser-plugin.html


Ever wanting to have an interface to manage your images in TinyMCE editor? Then this could be what you were looking for, the iBrowser plugin. iBrowser allows you to manage your image files via web browser (so far i have it tested only on IE and Firefox browsers, but other browser should work well). It will enable you to do the following.
  • Create directories
  • Upload, rename and delete images
  • Change image attributes such as image size and orientation
Requirements
PHP 4.x/5.x compiled with GD library support (how to install GD with php coming soon).
Installing iBrowser on TinyMCE WYSIWSYG editor
  • Download the iBrowser package and decompress it in your tinyMCE plugins directory/tiny_mce/plugins/ibrowser
  • Inside the ibrowser/config directory, open config.inc.php and change the following to reflect to your setup
$cfg['ilibs'] = array ( // image library path with slashes; absolute to root directory - please make sure that the directories have write permissions
array (
'value' => '/path/to/your/wwwroot/images/',
'text' => 'Site Pictures',
),
array (
'value' => '/path/to/your/wwwroot/gallery/',
'text' => 'Gallery',
),
);
  • Copy the tinyMCE.editor_plugin.js (you can find it under ibrowser/interface) and rename it to editor_plugin.js. Then copy and paste editor_plugin.js to editor_plugin_src.js ( you should have both the editor_plugin.js and editor_plugin_src.js files)
  • Change directory permissions of the following directories to 755 or 777. ibrowser/temp and ibrowser/scripts/phpThumb/cache (only for unix/linux systems)
  • In your tinyMCE initialization line (tinyMCE.init), look for the plugins line then add “ibrowser” (without quotes). Then look for the “theme_advanced_buttons(N)” and add “ibrowser”. see example below:
tinyMCE.init({
mode: "exact",
elements: "template_content",
theme: "advanced",
plugins : "aibrowser",
theme_advanced_buttons2 : "ibrowser"
});
If everything works fine, you should be able to click the ibrowser.gif icon and a popup window will appear.
ibrowse.png
To upload an image click on the upimg.gif icon to display the browse/file upload field.
Troubleshooting

TinyMCE

http://www.tinymce.com/wiki.php/Installation

Thứ Tư, 11 tháng 1, 2012

Creating Read and Write Methods with IBinarySerialize

When you choose UserDefined serialization format, you also must implement the IBinarySerialize interface and create your own Read and Write methods. The following procedures from the Currency UDT use the System.IO.BinaryReader and System.IO.BinaryWriter to read from and write to the UDT



// IBinarySerialize methods
// The binary layout is as follow:
//    Bytes 0 - 19:Culture name, padded to the right 
//    with null characters, UTF-16 encoded
//    Bytes 20+:Decimal value of money
// If the culture name is empty, the currency is null.
public void Write(System.IO.BinaryWriter w)
{
    if (this.IsNull)
    {
        w.Write(nullMarker);
        w.Write((decimal)0);
        return;
    }

    if (cultureName.Length > cultureNameMaxSize)
    {
        throw new ApplicationException(string.Format(
            CultureInfo.InvariantCulture, 
            "{0} is an invalid culture name for currency as it is too long.", 
            cultureNameMaxSize));
    }

    String paddedName = cultureName.PadRight(cultureNameMaxSize, '\0');
    for (int i = 0; i < cultureNameMaxSize; i++)
    {
        w.Write(paddedName[i]);
    }

    // Normalize decimal value to two places
    currencyValue = Decimal.Floor(currencyValue * 100) / 100;
    w.Write(currencyValue);
}
public void Read(System.IO.BinaryReader r)
{
    char[] name = r.ReadChars(cultureNameMaxSize);
    int stringEnd = Array.IndexOf(name, '\0');

    if (stringEnd == 0)
    {
        cultureName = null;
        return;
    }

    cultureName = new String(name, 0, stringEnd);
    currencyValue = r.ReadDecimal();
}

CLR Integration

Requirements for Implementing UDTs

To run in SQL Server, your UDT must implement the following requirements in the UDT definition:
The UDT must specify the Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute. The use of the System.SerializableAttribute is optional, but recommended.
  • The UDT must implement the System.Data.SqlTypes.INullable interface in the class or structure by creating a public static (Shared in Microsoft Visual Basic) Nullmethod. SQL Server is null-aware by default. This is necessary for code executing in the UDT to be able to recognize a null value.
  • The UDT must contain a public static (or SharedParse method that supports parsing from, and a public ToString method for converting to a string representation of the object.
  • A UDT with a user-defined serialization format must implement the System.Data.IBinarySerialize interface and provide a Read and a Write method.
  • The UDT must implement System.Xml.Serialization.IXmlSerializable, or all public fields and properties must be of types that are XML serializable or decorated with the XmlIgnore attribute if overriding standard serialization is required.
  • There must be only one serialization of a UDT object. Validation fails if the serialize or deserialize routines recognize more than one representation of a particular object.
  • SqlUserDefinedTypeAttribute.IsByteOrdered must be true in order to ensure that the server uses byte-ordered comparisons for UDT values.
  • A UDT defined in a class must have a public constructor that takes no arguments. You can optionally create additional overloaded class constructors.
  • The UDT must expose data elements as public fields or property procedures.
  • Public names cannot be longer than 128 characters, and must conform to the SQL Server naming rules for identifiers as defined in Identifiers.
  • sql_variant columns cannot contain instances of a UDT.
  • Inherited members are not accessible from Transact-SQL because the SQL Server 2005 type system is not aware of the inheritance hierarchy among UDTs. However, you can use inheritance when you structure your classes and you can call such methods in the managed code implementation of the type.
  • Members cannot be overloaded, except for the class constructor. If you do create an overloaded method, no error is raised when you register the assembly or create the type in SQL Server. Detection of the overloaded method occurs at run time, not when the type is created. Overloaded methods can exist in the class as long as they are never invoked. Once you invoke the overloaded method, an error is raised.
  • Any static (or Shared) members must be declared as constants or as read-only. Static members cannot be mutable.
  • The serialized UDT cannot be larger than 8000 bytes

Sample:


using System;
using System.Data;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Text;

[Serializable]
[Microsoft.SqlServer.Server.SqlUserDefinedType(Format.Native,
     IsByteOrdered=true, ValidationMethodName = "ValidatePoint")]
public struct Point : INullable
{
    private bool is_Null;
    private Int32 _x;
    private Int32 _y;

    public bool IsNull
    {
        get
        {
            return (is_Null);
        }
    }

    public static Point Null
    {
        get
        {
            Point pt = new Point();
            pt.is_Null = true;
            return pt;
        }
    }

    // Use StringBuilder to provide string representation of UDT.
    public override string ToString()
    {
        // Since InvokeIfReceiverIsNull defaults to 'true'
        // this test is unneccesary if Point is only being called
        // from SQL.
        if (this.IsNull)
            return "NULL";
        else
        {
            StringBuilder builder = new StringBuilder();
            builder.Append(_x);
            builder.Append(",");
            builder.Append(_y);
            return builder.ToString();
        }
    }

    [SqlMethod(OnNullCall = false)]
    public static Point Parse(SqlString s)
    {
        // With OnNullCall=false, this check is unnecessary if 
        // Point only called from SQL.
        if (s.IsNull)
            return Null;

        // Parse input string to separate out points.
        Point pt = new Point();
        string[] xy = s.Value.Split(",".ToCharArray());
        pt.X = Int32.Parse(xy[0]);
        pt.Y = Int32.Parse(xy[1]);

        // Call ValidatePoint to enforce validation
        // for string conversions.
        if (!pt.ValidatePoint()) 
            throw new ArgumentException("Invalid XY coordinate values.");
        return pt;
    }

    // X and Y coordinates exposed as properties.
    public Int32 X
    {
        get
        {
            return this._x;
        }
        // Call ValidatePoint to ensure valid range of Point values.
        set 
        {
            Int32 temp = _x;
            _x = value;
            if (!ValidatePoint())
            {
                _x = temp;
                throw new ArgumentException("Invalid X coordinate value.");
            }
        }
    }

    public Int32 Y
    {
        get
        {
            return this._y;
        }
        set
        {
            Int32 temp = _y;
            _y = value;
            if (!ValidatePoint())
            {
                _y = temp;
                throw new ArgumentException("Invalid Y coordinate value.");
            }
        }
    }

    // Validation method to enforce valid X and Y values.
    private bool ValidatePoint()
    {
        // Allow only zero or positive integers for X and Y coordinates.
        if ((_x >= 0) && (_y >= 0))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    // Distance from 0 to Point method.
    [SqlMethod(OnNullCall = false)]
    public Double Distance()
    {
        return DistanceFromXY(0, 0);
    }

    // Distance from Point to the specified point method.
    [SqlMethod(OnNullCall = false)]
    public Double DistanceFrom(Point pFrom)
    {
        return DistanceFromXY(pFrom.X, pFrom.Y);
    }

    // Distance from Point to the specified x and y values method.
    [SqlMethod(OnNullCall = false)]
    public Double DistanceFromXY(Int32 iX, Int32 iY)
    {
        return Math.Sqrt(Math.Pow(iX - _x, 2.0) + Math.Pow(iY - _y, 2.0));
    }
}


http://chiragrdarji.wordpress.com/2008/03/11/clr-stored-procedure-in-sql-server-2005/

SQL Service Brokers

SQL Service Brokers
http://blog.sqlauthority.com/2009/09/21/sql-server-intorduction-to-service-broker-and-sample-script/


ervice Broker in Microsoft SQL Server 2005 is a new technology that provides messaging and queuing functions between instances. The basic functions of sending and receiving messages forms a part of a “conversation.” Each conversation is considered to be a complete channel of communication. Each Service Broker conversation is considered to be a dialog where two participants are involved.
Service broker find applications when single or multiple SQL server instances are used. This functionality helps in sending messages to remote databases on different servers and processing of the messages within a single database. In order to send messages between the instances, the Service Broker uses TCP/IP.
This transaction message queuing system enables the developers to build secure and reliable applications, which are scalable. The developers can design applications from independent components known as “services.” If the applications need to avail the functionality of these services, then it sends message to the particular “service.”
Loosely coupled applications (programs that exchange messages independently) are supported by the Service broker. The three components of the Service broker are as follows: conversation components (which consist of the conversation groups, conversations and messages); service definition components (which define the conversations); and networking and security components (defines the infrastructure used for exchanging messages between instances)
The maintenance of Service Broker is easy and it is a part of the routine database administration procedure. This is because this functionality forms a part of the Database Engine. Service Broker also provides security by preventing unauthorized access from networks and by message encryption.
Let us understand Service Broker with simple script. Script contains necessary comments to explain what exactly script is doing.
---------------------------- Service Broker -----------------------
-- In this exercise we will learn how to cofigure Servie Broker and send and recieve messages.
-------------------------------------------------------------------
CREATE DATABASE ServiceBrokerTest
GO
USE ServiceBrokerTest
GO
-- Enable Service BrokerALTER DATABASE ServiceBrokerTest SET ENABLE_BROKER
GO
-- Create Message TypeCREATE MESSAGE TYPE SBMessage
VALIDATION 
NONE
GO
-- Create ContractCREATE CONTRACT SBContract(SBMessage SENT BY INITIATOR)GO-- Create Send QueueCREATE QUEUE SBSendQueue
GO
-- Create Receive QueueCREATE QUEUE SBReceiveQueue
GO
-- Create Send Service on Send QueueCREATE SERVICE SBSendServiceON QUEUE SBSendQueue (SBContract)GO-- Create Receive Service on Recieve QueueCREATE SERVICE SBReceiveServiceON QUEUE SBReceiveQueue (SBContract)GO-- Begin Dialog using service on contractDECLARE @SBDialog uniqueidentifierDECLARE @Message NVARCHAR(128)BEGIN DIALOG CONVERSATION @SBDialogFROM SERVICE SBSendServiceTO SERVICE 'SBReceiveService'ON CONTRACT SBContractWITH ENCRYPTION = OFF-- Send messages on DialogSET @Message N'Very First Message';SEND ON CONVERSATION @SBDialogMESSAGE TYPE SBMessage (@Message)SET @Message N'Second Message';SEND ON CONVERSATION @SBDialogMESSAGE TYPE SBMessage (@Message)SET @Message N'Third Message';SEND ON CONVERSATION @SBDialogMESSAGE TYPE SBMessage (@Message)GO-- View messages from Receive QueueSELECT CONVERT(NVARCHAR(MAX), message_bodyAS MessageFROM SBReceiveQueue
GO
-- Receive messages from Receive QueueRECEIVE TOP(1CONVERT(NVARCHAR(MAX), message_bodyAS MessageFROM SBReceiveQueue
GO
-- Receive messages from Receive QueueRECEIVE CONVERT(NVARCHAR(MAX), message_bodyAS MessageFROM SBReceiveQueue
GO
-- Clean UpUSE master
GO
DROP DATABASE ServiceBrokerTest
GO
You can download the above script from here.
Let me know what do you think of this script and how simply one can configure service broker.
Reference : Pinal Dave (http://blog.sqlauthority.com)

Thứ Ba, 10 tháng 1, 2012

Phần mêm quản lý kho thuốc thú y

Giới thiệu tính năng phần mềm quản lý kho thuốc thú y:

1/ Quản lý danh mục khách hàng
2/ Quản lý danh mục sản phẩm
3/ Quản lý danh mục nhà cung cấp
4/ Quản lý bán hàng
5/ Quản lý xuất/nhập hàng
6/ Quản lý công nợ khách hàng
7/ Thống kê hàng tồn
8/ In hóa đơn bán hàng, hóa đơn hàng tồn, ...
9/ Tìm kiếm hết sức tiện lợi, nhanh chóng
10/ Phân quyền truy cập cho từng người dùng

Dưới đây là một số hình ảnh minh họa:
Hình 1 - Cửa sổ bán hàng

Hình 2 - Cửa sổ In hóa đơn

Hình 3 - Quản lý công nợ

Hình 4 - Theo dõi hóa đơn bán hàng
Hình 5 - Quản lý hàng

GridView All Rows in Edit Mode

Introduction:
http://highoncoding.com/Articles/219_GridView_All_Rows_in_Edit_Mode.aspx
http://aspadvice.com/blogs/azamsharp/archive/2006/12/18/GridView-Update-All-Rows-At-Once.aspx

GridView provides a very easy way to edit the data by using the in-place editing feature. Although the feature is great but sometimes we want to view the complete GridView in the edit mode and quickly edit multiple records without having to click the edit button on each row. In this article I will demonstrate how to convert the whole GridView in edit mode with a click of a button.

Database Design:

In this article I will be using a custom database called School which consists of a single table called “Users”. The Users table contains only three columns namely FirstName, LastName and UserID.

Displaying Data in the GridView Control:

The first task is to display the data in the GridView control. Take a look at the method below which is used to populate the GridView control.

private void BindData()

{

string connectionString = "Server=localhost;Database=School;Trusted_Connection=true";

SqlConnection myConnection = new SqlConnection(connectionString);

SqlDataAdapter ad = new SqlDataAdapter("SELECT UserID, FirstName, LastName FROM Users", myConnection);

DataSet ds = new DataSet();

ad.Fill(ds);
gvUsers.DataSource = ds;
gvUsers.DataBind();

}

Depending on the data in the database your GridView will be populated.

GridView HTML Code:

The HTML code of the GridView is where all the magic happens. Let’s first take a look at the code.












































Now, check out the section where all the TemplateFields exists. The section contains the Label as well as the TextBox. The visibility of the Label and the TextBox depends on the IsInEditMode property which, is a public property defined in the code behind. You can think of it as a switch meaning that when the Labels are displayed then the TextBoxes are not displayed and when the TextBoxes are displayed then the Labels will not be displayed.

IsInEditMode Property:

This is a simple property that returns the Boolean value of true or false.

private bool isEditMode = false;

protected bool IsInEditMode

{

get { return this.isEditMode; }

set { this.isEditMode = value; }

}


I have used a simple ASP.NET Button control to change the GridView to edit mode. Check out the code below:



// This method will put the GridView in the edit mode

protected void Button1_Click(object sender, EventArgs e)

{

isEditMode = true;

BindData();

}


Yup! That is all you need to change the GridView to edit mode. The isEditMode variable is set to true and it will make TextBoxes visible and the Labels invisible.


SQL Injection

A SQL injection is often used to attack the security of a website by inputting SQL statements in a web form to get a badly designed website to perform operations on the database (often to dump the database content to the attacker) other than the usual operations as intended by the designer. SQL injection is a code injection technique that exploits a security vulnerability in a website's software. The vulnerability happens when user input is either incorrectly filtered for string literal escape characters embedded in SQL statements or user input is not strongly typed and unexpectedly executed. SQL commands are thus injected from the web form into the database of an application (like queries) to change the database content or dump the database information like credit card or passwords to the attacker. SQL injection is mostly known as an attack vector for websites but can be used to attack any type of SQL database.
Using well designed query language interpreters can prevent SQL injections. In the wild, it has been noted that applications experience, on average, 71 attempts an hour.[1] When under direct attack, some applications occasionally came under aggressive attacks and at their peak, were attacked 800-1300 times per hour.[1]

SQL Injection Attack (SQLIA) is considered one of the top 10 web application vulnerabilities of 2007 and 2010 by the Open Web Application Security Project.[2] The attacking vector contains five main sub-classes depending on the technical aspects of the attack's deployment:[citation needed]
Classic SQLIA
Inference SQL Injection
Intracting with SQL Injection
DBMS specific SQLIA
Compounded SQLIA
Some security researchers propose that Classic SQLIA is outdated[3] though many web applications are not hardened against them. Inference SQLIA is still a threat, because of its dynamic and flexible deployment as an attacking scenario. The DBMS specific SQLIA should be considered as supportive regardless of the utilization of Classic or Inference SQLIA. Compounded SQLIA is a new term derived from research on SQL Injection Attacking Vector in combination with other different web application attacks as:
SQL Injection + Insufficient authentication[4]
SQL Injection + DDos attacks[5]
SQL Injection + DNS Hijacking[6]
SQL Injection + XSS[7]
The Storm Worm is one representation of Compounded SQLIA.[8] A complete overview of the SQL Injection classification is presented in the next figure, Krassen Deltchev in 2010:


A Classification of SQL Injection Attacking Vector, till 2010.
This Classification represents the state of SQLIA, respecting its evolution till 2010; further refinement is underway.[9] m/2007/01/social-engineering-and-malware.html |title=Dancho Danchev's Blog
[edit]Technical Implementations

[edit]Incorrectly filtered escape characters
This form of SQL injection occurs when user input is not filtered for escape characters and is then passed into an SQL statement. This results in the potential manipulation of the statements performed on the database by the end-user of the application.
The following line of code illustrates this vulnerability
statement = "SELECT * FROM users WHERE name = '" + userName + "';"
This SQL code is designed to pull up the records of the specified username from its table of users. However, if the "userName" variable is crafted in a specific way by a malicious user, the SQL statement may do more than the code author intended. For example, setting the "userName" variable as
' or '1'='1
Or using comments to even block the rest of the query (there are three types of SQL comments):[10]
' or '1'='1' -- '
' or '1'='1' ({ '
' or '1'='1' /* '
renders one of the following SQL statements by the parent language:
SELECT * FROM users WHERE name = '' OR '1'='1';
SELECT * FROM users WHERE name = '' OR '1'='1' -- ';
If this code were to be used in an authentication procedure then this example could be used to force the selection of a valid username because the evaluation of '1'='1' is always true.
The following value of "userName" in the statement below would cause the deletion of the "users" table as well as the selection of all data from the "userinfo" table (in essence revealing the information of every user), using an API that allows multiple statements:
a';DROP TABLE users; SELECT * FROM userinfo WHERE 't' = 't
This input renders the final SQL statement as follows:
SELECT * FROM users WHERE name = 'a';DROP TABLE users; SELECT * FROM userinfo WHERE 't' = 't';
While most SQL server implementations allow multiple statements to be executed with one call in this way, some SQL APIs such as PHP's mysql_query(); function do not allow this for security reasons. This prevents attackers from injecting entirely separate queries, but doesn't stop them from modifying queries.
[edit]Incorrect type handling
This form of SQL injection occurs when a user supplied field is not strongly typed or is not checked for type constraints. This could take place when a numeric field is to be used in a SQL statement, but the programmer makes no checks to validate that the user supplied input is numeric. For example:
statement := "SELECT * FROM userinfo WHERE id = " + a_variable + ";"
It is clear from this statement that the author intended a_variable to be a number correlating to the "id" field. However, if it is in fact a string then the end-user may manipulate the statement as they choose, thereby bypassing the need for escape characters. For example, setting a_variable to
1;DROP TABLE users
will drop (delete) the "users" table from the database, since the SQL would be rendered as follows:
SELECT * FROM userinfo WHERE id=1;DROP TABLE users;
[edit]Blind SQL injection
Blind SQL Injection is used when a web application is vulnerable to an SQL injection but the results of the injection are not visible to the attacker. The page with the vulnerability may not be one that displays data but will display differently depending on the results of a logical statement injected into the legitimate SQL statement called for that page. This type of attack can become time-intensive because a new statement must be crafted for each bit recovered. There are several tools that can automate these attacks once the location of the vulnerability and the target information has been established.[11]
[edit]Conditional responses
One type of blind SQL injection forces the database to evaluate a logical statement on an ordinary application screen.
SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd' AND '1'='1';
will result in a normal page while
SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd' AND '1'='2';
will likely give a different result if the page is vulnerable to a SQL injection. An injection like this may suggest to the attacker that a blind SQL injection is possible, leaving the attacker to devise statements that evaluate to true or false depending on the contents of another column or table outside of the SELECT statement's column list.[12]
SELECT 1/0 FROM users WHERE username='ooo';
Another type of blind SQL injection uses a conditional timing delay on which the attacker can learn whether the SQL statement resulted in a true or in a false condition [13]
[edit]Mitigation


This section does not cite any references or sources. Please help improve this section by adding citations to reliable sources. Unsourced material may be challenged and removed. (April 2011)
[edit]Parameterized statements
Main article: Prepared statement
With most development platforms, parameterized statements can be used that work with parameters (sometimes called placeholders or bind variables) instead of embedding user input in the statement. In many cases, the SQL statement is fixed, and each parameter is a scalar, not a table. The user input is then assigned (bound) to a parameter.
[edit]Enforcement at the coding level
Using object-relational mapping libraries avoids the need to write SQL code. The ORM library in effect will generate parameterized SQL statements from object-oriented code.
[edit]Escaping
A straightforward, though error-prone, way to prevent injections is to escape characters that have a special meaning in SQL. The manual for an SQL DBMS explains which characters have a special meaning, which allows creating a comprehensive blacklist of characters that need translation. For instance, every occurrence of a single quote (') in a parameter must be replaced by two single quotes ('') to form a valid SQL string literal. For example, in PHP it is usual to escape parameters using the function mysql_real_escape_string(); before sending the SQL query:
$query = sprintf("SELECT * FROM `Users` WHERE UserName='%s' AND Password='%s'",
mysql_real_escape_string($Username),
mysql_real_escape_string($Password));
mysql_query($query);
This function, i.e. mysql_real_escape_string(), calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', " and \x1a. This function must always (with few exceptions) be used to make data safe before sending a query to MySQL.[14]
There are other functions for many database types in PHP such as pg_escape_string() for PostgreSQL. There is, however, one function that works for escaping characters, and used especially for injection in the databases that do not have escaping functions in PHP. This function is: addslashes(string $str ). It returns a string with backslashes before characters that need to be quoted in database queries etc. These characters are single quote ('), double quote ("), backslash (\) and NUL (the NULL byte).[15]
Routinely passing escaped strings to SQL is error prone because it is easy to forget to escape a given string. Creating a transparent layer to secure the input can reduce this error-proneness, if not entirely eliminate it.[16]

Source: Wikipedia

Thứ Hai, 9 tháng 1, 2012

Đà Nẵng dồn sức cho công nghệ cao, công nghệ thông tin và công nghệ sinh học

(ĐNĐT) - Ngày 6-1, UBND thành phố Đà Nẵng tổ chức Hội nghị phối hợp phát triển khoa học và công nghệ (KH&CN) nhằm tổng kết chương trình phối hợp giữa Bộ KH&CN và UBND thành phố giai đoạn 2007-2011 và đề ra chương trình phối hợp giai đoạn 2012-2015.



Lãnh đạo Bộ KH&CN và UBND thành phố ký kết Chương trình phối hợp phát triển KH&CN giai đoạn 2012-2015.
Bộ trưởng KH&CN Nguyễn Quân, Bí thư Thành ủy Đà Nẵng Nguyễn Bá Thanh, Chủ tịch UBND thành phố Đà Nẵng Văn Hữu Chiến chủ trì hội nghị.

Báo cáo tại hội nghị cho biết, trong 5 năm thực hiện Chương trình phối hợp với Bộ KH&CN, thành phố đã có những bước đột phá quan trọng trong đào tạo, phát triển nguồn nhân lực chất lượng cao và chính sách thu hút nguồn nhân lực; tạo hành lang pháp lý ổn định và thông thoáng để sự nghiệp KH&CN phát triển đúng hướng và hiệu quả.

Nhờ sự hỗ trợ của Bộ KH&CN, thành phố đã xây dựng Trung tâm Công nghệ phần mềm, tạo cú hích cho xuất khẩu phần mềm, tăng từ 500 triệu đồng vào năm 2006 lên 1,798 tỷ đồng vào năm 2010. Từ đó, thành phố mạnh dạn xúc tiến xây dựng Khu công nghiệp CNTT tập trung và cũng đã đạt được một số khả quan trong việc ứng dụng công nghệ sinh học trong y dược, xử lý môi trường và sản xuất, chế biến nông lâm ngư nghiệp. Đây là những tiền đề quan trọng để thành phố đề nghị Bộ KH&CN hỗ trợ xây dựng Khu công nghệ cao…

Phát biểu tại hội nghị, Bí thư Thành ủy Nguyễn Bá Thanh nhấn mạnh, trong 10 năm qua, thành phố Đà Nẵng luôn quan tâm và tập trung đầu tư cho nghiên cứu khoa học và KHCN. Trong thời gian tới, thành phố sẽ dồn sức đầu tư cho 3 lĩnh vực trọng tâm, đó là công nghệ cao, công nghệ thông tin, công nghệ sinh học.

Ông Nguyễn Bá Thanh đề nghị Bộ KH&CN hỗ trợ, giúp đỡ về đội ngũ cán bộ, nguồn nhân lực chất lượng cao, đồng thời giới thiệu, tiến cử các chuyên gia hàng đầu, các nhà doanh nghiệp lớn có uy tín đầu tư vào 3 lĩnh vực trên. Thành phố sẽ có chính sách ưu tiên đặc biệt đối với cán bộ giỏi đến công tác và làm việc tại Đà Nẵng.

Bộ trưởng Bộ KH&CN Nguyễn Quân đánh giá cao sự quan tâm của lãnh đạo thành phố trong việc đầu tư và hỗ trợ cho các hoạt động của KH&CN trong thời gian qua, đặc biệt là chính sách trọng dụng cán bộ, chăm lo cho người tài. Bộ trưởng tin tưởng rằng, với kinh nghiệm trong việc giải phóng mặt bằng nhanh, Đà Nẵng sẽ triển khai Khu công nghệ cao sớm hơn so với Hà Nội và TP Hồ Chí Minh.

CNTT Việt Nam chưa được quan tâm đúng mức

Đây là một trong những báo cáo được công bố tại Hội thảo quốc gia về Công nghệ thông tin và Truyền thông Việt Nam với chủ đề “Đề án đưa Việt Nam sớm trở thành nước mạnh về công nghệ thông tin-truyền thông: Một năm nhìn lại và Chương trình máy tính nối mạng tri thức", được tổ chức tại khách sạn Melia, Hà Nội ngày 7/1 vừa qua.


ICT Skill Index là một chỉ số con của ICT Development Index trong báo cáo Measuring the Information Society, dùng đánh giá nguồn nhân lực của một quốc gia dựa trên các tiêu chí tỷ lệ biết chữ, tỷ lệ vào học trung học và tỷ lệ học sau trung học.


Phó Thủ tướng nhấn mạnh: Thanh niên là lực lượng nòng cốt trong quá trình triển khai đề án "Đưa Việt Nam sớm trở thành nước mạnh về CNTT-Truyền thông".
Phát biểu chỉ đạo, Phó Thủ tướng Nguyễn Thiện Nhân, Trưởng Ban chỉ đạo Quốc gia về CNTT cho biết sau một năm triển khai đề án "Đưa Việt Nam sớm trở thành nước mạnh về CNTT-Truyền thông" chưa đạt hiệu quả như mong muốn vì nhiều khi lãnh đạo không đủ thông tin cần thiết về tiềm năng, cách thức phát triển và ứng dụng CNTT-TT.

Phó Thủ tướng cũng đã yêu cầu Bộ TT&TT phối hợp với các cơ quan liên quan xây dựng bộ tài liệu khẳng định khả năng đóng góp của CNTT đối với đời sống, hoạt động sản xuất kinh doanh, cũng như hoạt động quản lý Nhà nước.

Để nâng cao nhận thức về CNTT-TT nói chung và tầm quan trọng của Đề án, theo Phó Thủ tướng, các cơ quan truyền thông đại chúng như Đài Truyền hình Việt Nam, Báo Thanh niên cần mở chuyên mục "Cửa sổ Nước mạnh về CNTT-TT" để thường xuyên nhắc nhở rằng Đề án vẫn đang được triển khai và cập nhật kịp thời những vướng mắc, khó khăn trong quá trình triển khai để có giải pháp tháo gỡ, khắc phục.

"Thanh niên sẽ là lực lượng nòng cốt, xung kích triển khai Đề án, Các Bộ, ngành liên quan cần chú trọng", Phó Thủ tướng đề nghị.

Đến nay, cả nước có 31 địa phương phê duyệt kế hoạch triển khai Đề án tại địa phương mình. Hoạt động thông tin tuyên truyền về Đề án được đẩy mạnh góp phần nâng cao nhận thức của toàn xã hội về vai trò của CNTT-TT, đồng thời quảng bá hình ảnh, thương hiệu CNTT-TT Việt Nam đến với bạn bè quốc tế, từ đó tạo lòng tin và thu hút các tập đoàn lớn, công ty đa quốc gia đầu tư vào lĩnh vực này tại Việt Nam.

Tại Hội thảo, Phó Hiệu trưởng ĐH FPT Nguyễn Xuân Phong đã tham gia trình bày tham luận "Giải pháp cung cấp nội dung cho học sinh phổ thông qua kinh nghiệm của chương trình giải Toán qua mạng Internet - ViOlympic".

Với mục tiêu vừa trở thành phương tiện học tập, vừa tạo ra một sân chơi trí tuệ hấp dẫn, hiệu quả cho hàng triệu học sinh tiểu học và trung học cơ sở, ViOlympic đã góp phần không nhỏ trong việc xóa bỏ các tiêu cực xã hội (nạn nghiện game online…) và nâng cao chất lượng học tập các bộ môn trong nhà trường phổ thông.

Đây là một giải pháp ứng dụng CNTT hỗ trợ đổi mới phương pháp giảng dạy và học. Cuộc thi vì thế đã nhận được sự tham gia của đông đảo học sinh, sự đồng tình của cán bộ, giáo viên và sự ủng hộ của phụ huynh.

Năm nay, Violympic sẽ mở rộng đối tượng tham gia sang khối THPT trong cả nước với nhiều kiểu thi hấp dẫn tạo niềm say mê cho học sinh rèn luyện môn Toán. Theo anh Phong, cuộc thi cũng là bước đầu tiên cho việc triển khai các dịch vụ CNTT trong giáo dục: e-learning, khảo thí, kho ứng dụng trực tuyến…

Bên cạnh đó, anh Phong cũng đặt kỳ vọng trong năm 2012, số lượng user đăng ký mới trung bình sẽ là 50.000 người/ngày; nâng tổng số thành viên đăng ký lên 9 triệu người và trung bình một ngày có khoảng 45.000 lượt thi thành công.

Phiên thảo luận cuối hội thảo cũng đã đề cập đến vấn đề nâng cao trình độ ngoại ngữ cho đội ngũ nhân lực trẻ CNTT Việt Nam đạt con số 70% sinh viên tốt nghiệp có khả năng làm việc trong môi trường quốc tế. Phó Hiệu trưởng ĐH FPT cho biết: "ĐH FPT ngay từ đầu đã đề cao đưa vấn đề ngoại ngữ vào giảng dạy ĐH. Từ năm đầu tiên, sinh viên tại trường đã được học một khóa trù bị tiếng Anh. Năm 2011, khóa sinh viên đầu tiên của trường đã tốt nghiệp và trên 10% đã có cơ hội làm việc tại nhiều quốc gia trên thế giới".

Cũng như hầu hết các trường ĐH hiện nay, khó khăn của ĐH FPT là đội ngũ giảng viên giảng dạy trực tiếp bằng Tiếng Anh chưa đáp ứng được nhu cầu đào tạo. Tuy nhiên, theo anh Phong, vấn đề này đang được nhà trường cải thiện dần vào các năm sau. Theo kinh nghiệm của ĐH FPT, nếu trang bị cho các em có nền tảng ngoại ngữ tốt, nhuần nhuyễn kỹ năng đọc và nghiên cứu tài liệu chuyên ngành bằng tiếng Anh, thì sau khi ra trường chỉ cần vào môi trường thuận lợi, khả năng giao tiếp tiếng Anh của các em cũng sẽ được nâng cao.

Cũng tại Hội thảo, nhiều tham luận của các Tập đoàn CNTT lớn được trình bày nhằm đưa các giải pháp đưa Việt Nam sớm trở thành nước mạnh về CNTT-TT như: Các giải pháp phát triển hạ tầng viễn thông băng rộng tại Việt Nam (VNPT), Giải pháp phát triển internet băng rộng cho mọi người và gia đình đóng góp cho chuyên đề “Chương trình máy tính nối mạng Tri thức” (Viettel); Hiện trạng và đề xuất chính sách, giải pháp hỗ trợ sản xuất nội dung cho thanh thiếu niên (VTC); Phát triển sản phẩm phần cứng và chương trình máy tính nối mạng tri thức (Hội doanh nghiệp điện tử Việt Nam VEIA).

SEO

http://www.tizag.com/SEOTutorial/