Simple PHP News Publishing System Tutorial _php example

Source: Internet
Author: User
Tags mysql in setcookie tag name time and date unique id phpmyadmin

Simple PHP News Release System tutorial (first edition) First: Establish a database with phpMyAdmin first to establish a database, called Yayu. Create a data table under this database, called News. The next point is to create the fields under Table news.

So, what do you call a field? Popular point, is a category of things collectively. For example, all the press time is represented by a noun (from my experience, it is possible to use phpMyAdmin to establish a field in Chinese, but it is still used in English, no way, computer America is the most Niuma). We use "time" to express. In the field time can have a lot of "published", then how to distinguish between these times, this can query the other fields of content, such as we create news of the title of the field is "title", the title of the field of the content according to the common sense is not the same. So you can query this publication time by a title. In fact, we can have each title or time under the content of a number, that is the field--

"id": Field "ID" is the default preferred field for people, and the contents of other fields can be repeated, but this field is an Arabic numeral that has been increased from 1. When you set this field, you set the primary key, index, unique, and auto-increment. This auto-increment is meant to increase automatically. When any field adds content, the field is automatically incremented by 1, which means that each field corresponds to a unique ID, such as 1, 2, 0 27 ...

Let's talk about the establishment of the News section field.

1. ID: Meaning for each news number, it is unique, the type is tingint, this tingint type does not need to specify the length, the system defaults to 4, select Auto-increment in "Extra" and select the primary key.

2. Author: Meaning for the author (press release person), set type is varchar, set this field length, if consider the author is Chinese, then 8 bytes is the upper limit (4 characters), but if you consider the author may be a foreigner, 8 bytes Obviously too little, the same problem for other fields , here we set the length to 8 bar.

3. Title: Meaning for news headlines, the type is varchar, the length is 60 bar, the attribute is Primany key.

4. Content: Meaning for the contents of the news, the type is text. This type does not need to be set in length.

5. Source: Meaning is the source of news, the type is varchar, the length is 60.

6. Date: Meaning is the publication time, the type is datetime, the length does not need to set, the attribute is Primany key.

The following supplement related to field types:

1. Date: Time and date type. The time and date types also include the following:

⊕datetime:0000-00-00 00:00:00

⊕date:0000-00-00

⊕timestamp:00000000000000 (14 0, length depends on display size)

⊕time:00:00:00

⊕year:0000

2. The Conten t field represents news content and is of text type (up to 65535 bytes) because its capacity may be large.

3. The title field is set to Primany key, and if there is no news with the same publication time, the Date field can also be used as a. Primany key, so that future sorting and retrieval of news will be more convenient.

4. Although a field of type text is also a character type, its size cannot be specified, and if you set the length, the SQL statement is prompted for an error.

Now, the news data sheet is set up.

Because the news is not everyone can increase, only the administrator to do, so now we have to build data table users to store administrators.

1:id: Type is tinyint, extra set to auto-increment, primary key.

2:name: Meaning is the administrator name, the type is varchar, the length is 8, the attribute is Primany key.

3:password: Meaning is the password, the type is varchar, the length is 32.

4:mail: Same as mail address, type is varchar, length is 30.

Now that the two databases are set up, we are going to go into the news program.

Bud Rain Original PHP News System tutorial (first edition) Second: The basis of the news program

A The basics of connecting to a database

We have to add, remove, modify, delete news must first do one thing, that is, connect the host, select the database, make a request to the database. Otherwise, everything is an armchair. Here are three important MySQL statements: Mysql_pconnect () (connection host), mysql_select_db () (select database), mysql_query () (Request to the database).

1. Mysql_pconnect ()

Its role is to connect the host.

The syntax is: Mysql_pconnect ("The host to log in", "User name when landing", "password");

such as Mysql_pconnect ("localhost", "root", "");

The "localhost" and "root" are all phpMyAdmin default host and username names, and the password is blank.

Functional functions also have mysql_connect (). Syntax is the same, the difference is that the former open a long-term connection, and can not use the Mysql_close () function closed, after the use of mysql_close () in time to close. For a website, using the former is better than the latter. This reduces the burden of MySQL server processing connections and shutting down connections.

When this function is successfully connected, a connection ID is returned. So this function is generally written like this:

$link = Mysql_pconnect ();

Speaking of which, add a function mysql_close (),

The syntax is: mysql_close ("Connection ID to turn off");

For example: Mysql_close ($link);

Note: All () are strings, there is no "" when there is a $ symbol.

2. mysql_select_db ()

Its role is to select a database for the current database. The next operation is done in this database. This function returns a true if the execution succeeds, or false.

Syntax is: mysql_select_db ("Database name", "Connection ID");

The second argument can be omitted, and it automatically looks for and connects to the last connection ID used.

In this procedure, we write this statement: mysql_select_db ("Yayu", $link);

3. mysql_query ()

Its role is to send a request string to the server.

The syntax is: mysql_query ("string to ask questions", connection ID);

The first parameter is a complete MySQL statement, the second parameter can be omitted, I usually omit it.

You should use mysql_select_db () to specify the database you want to use before using this function.

When the question string is an update, insert, or delete, the result returned by the function is True or FALSE, indicates whether the query succeeded, returns a result ID if the question string is a SELECT statement, or False if the Select has an error 。

Once you know the top three important functions, we can dictate the database. What do we use to give orders? Let's take a look at four MySQL statements below!

Two Making Request statement basics to the database

They are: Insert (insert data into the database), delete (delete data from the datasheet), select (Retrieve data), update (refresh data).

1 Insert (): Inserts data into the database.

Syntax a:insert into data table name (Field 1, Field 2, ...). VALUES ("The contents of field 1 D", "2 contents of the field" ...)

Syntax B:insert into datasheet name set field 1 = "Field 1 contents", Field 2 = "Field 2", ...

For a, the field name can be omitted, but the contents of the following Values section must be the same as the order of the fields defined in phpMyAdmin.

See examples below:

A:insert into News (title,date,author,source,content) VALUES ($title, $date, $author, $source, $content)

Note: The above "$ ..." represents the contents of the field to be added, defined when: $ ... = content;

B:insert into news set title= $title, author= $author

Note: If the content is a number, then "" can be omitted.

2 Delete (): Delete data in a datasheet

Syntax: Delete from data table name where specified location limit number

If there is no "where to specify", all the data in the table is gone. The limit number can tell the server the maximum number of rows that can be deleted.

Example: Delete from news where id= $id limit 1

3. Select (): Retrieving data

Syntax: Select field Name 1, field 2, ... from data table name where location

If you want to list the data for all columns in all records, you can use "*" to represent the field name.

Example: A:select id,author from news where id= $id

B:select * FROM news where id= $id

4 update (): Updating data

Syntax and insert are almost exactly the same.

such as: Update news set author= $author, title= $title where id= $id

It is important to note that when using the UPDATE statement, it is important to use the WHERE clause, which may result in a large amount of data loss. Like what:

Update news set author= "Bud Rain"

This operation will make all the authors of the table into "Bud Rain".

To give a positive example, record the Administrator's table users, if there is a field of age, used to store the users ' ages, one year later, they want to increase by one year, you can use the following statement:

Update users set age=age+1

Great, we have now mastered most of the basis of the program, and a small part of our later in the example to grasp.

The problem we face now is how to write the algorithm.

Bud Rain Original PHP News System tutorial (first edition) Third: news program algorithm (i)------Add news

One. Add News

Adding news is both adding new data to the database.

The whole algorithm is this: the Administrator in the form to fill in the content of the news, including: Title,author,source,content, the other two fields (Id,time) of the contents of the server is completed, of course, to write their own procedures, but not by themselves manually. After submitting the form, use the MySQL statement to add them to the database.

The following is a brief introduction to the <input> tags and <textarea></textarea> tags in the form.

The <input> label is a single-line text box. Our common attributes are: name, type. The Name property specifies the names of the variables, which represent the contents of the <input>. The Type property specifies the nature of the content in <input>. If Type=text, it is general text. If Type=password, the contents of this "<input>" are displayed in the browser with black dots, so that you can enter the content without inadvertently being seen by others caused data security problems.

The <textarea></textarea> label is a multiline text box, and the commonly used property is name.

This procedure is shown in this procedure as follows:

<input name= "Author" type= "text" size= "" "Maxlength=" >

The "author" in "Name=" Author "represents the content in <input>. Similarly, this "author" can also be "title" or other, it is noteworthy that this "author" and the field author is not the same. In this place I refer to two very similar concepts: field author and variable $author (the "author" above is actually $ author because it represents the content in "<input>"). Although they are almost the same name, they are definitely not the same thing. Author is a field name in datasheet news that PHP uses to restrict access to the data in MySQL and cannot be replaced with other characters in the program, and $author is the user's own set of variable symbols, the value of the corresponding elements of "<input>" The Name property is obtained. Since it's just a variable symbol, we can use any field, as long as it's consistent with the Name property of the corresponding element in the form. The reason we chose to use the same characters as the field names is that we don't have to bother to memorize a variable name.

We'll look at the contents of the <textarea></textarea> tags again:

<textarea name= "Content" cols= "rows=" wrap= "hysical" >

The content in this <textarea></textarea> is used to get the content of the contents field, because there are so many things in this field that you can only use this tag.

When we fill out this content, as long as the submission is OK, then how the process is achieved? Let's look at the following procedure:

<input name= "Submit" type= "Submission" value= "Submitting News" >
<input type= "reset" name= "reset" value= "Rewrite News" >

Here the type= "submit"/type= "reset" represent and rewrite the news separately. The contents of the Value property are displayed on this button. Name= the meaning of "reset"/name= "submit" is the same as what is said above.

Form elements in HTML are specifically responsible for the interactive operation of the user. When you click on a button of type submit, all elements in the form are submitted as variables to the file that the action refers to. The variable name is determined by the element's Name property. In this program this code is as follows:

<form action=addnews.php method=post>

In this place we put the process of processing data on the same page (action=addnews.php), in the method attribute we make method=post, where the post is the way value is passed. Now we'll discuss the following program on the page specified by action:

$author =$_post["Author"];

The $author here is the variable name we define ourselves, author is the name defined in the <input> tag name attribute. POST is a way of passing the value defined by method in <form>. The data obtained through this kind of value transfer method are collected by $_post["".

A complete set of such procedures is shown below:

if (@$_post["submit"])
{
$author =$_post["Author"];
$department =$_post["department"];
$title =$_post["title"];
$content =parsecontent ($_post["content"]);
$date =date ("y-m-d h:i");
mysql_query ("INSERT into News" (Title,date,author,department,content) VALUES (' $title ', ' $date ', ' $author ', ' $ Department ', ' $content ') ");
}

The date () function in which you see other books. There are 5 fields above, and a field ID because we chose auto-increment in "extras", the ID automatically adds 1 when the above data is inserted into the database.

Of course, before this program, you must first connect to the database, all of the following are connected to the database program is the same, you must first connect the database.

Bud Rain Original PHP News System tutorial (first edition) Third: News program algorithm (ii)-------display

Two Show News

After you add the news, you can let others see the news.

The algorithm here is this: first on the news page to display the headlines and other additional content (such as time of publication), which can be used to output a circular output of all news headlines. To view the content of the specific news, click on the news title hyperlink to enter a new page to view the news.

Before you start this program, link to a good database.

When the news is a lot, we will give the news page, we set up every page to show 10 news.

The specific paging procedure is as follows:

$respage = mysql_query ("Select COUNT (*) from news;"); $num is the total number of records in the database
while ($row = Mysql_fetch_row ($respage))
{
$num = $row [0];
}
$recordnum = 10;
$pages = Ceil ($num/$recordnum); $recordnum how many records are displayed per page, $pages how many pages are there
if (@$_get["page")//Get parameter page in URL
{
$current is the current page, $pre is the previous page, $next is the next page, $pre and $next the value of the connection parameter page for the previous and subsequent pages
If the parameter in the URL is 1, the current page is set to the previous page, the $pre is one, and the $next is 2
if ($_get["page"]==1)
{
$current = 1;
$pre = 1;
$next = 2;
}else{
If the parameter in the URL is not one (not the first page), the current page takes the value of the parameter obtained in the URL, $pre minus 1 for the current page, $next to add 1
$current = $_get["page"];
$pre = $current-1;
$next = $current +1;
}
}else {
If there is no parameter page in the URL, the current page is 1, $pre =1, $next =2
$current = 1;
$pre = ' 1 ';
$next = 2;
}
$now = ($current-1) * $RECORDNUM;
$echopage = "<table width=450 cellpadding=0 cellspacing=0><tr>";
$echopage. = "<td><font>". $pages. "Page </font></td>";
$echopage. = "<td><font><a href=" $_server["Hp_self"]. " Page=1> first page </a><font></td><td><font><a href= ". $_SERVER[" HP_SELF "]."? Page= ". $pages." > last page </a></font></td> ";
$echopage. = "<td><font><a href=" $_server["Hp_self"]. " Page= $pre > Previous </a> <a href= ". $_server[" Php_self "]."? Page= $next > Next </a></font></td> ";
$echopage. = "<td><font> to <select name= ' topage ' size= ' 1 ' onchange= ' window.location= '". $_server["Php_ SELF "]."? Page= "+this.value ' >n";
for ($i =1; $i <= $pages; $i + +) {
if ($i = = $current)
$echopage. = "<option value= ' $i ' selected> $i </option>n";
Else
$echopage. = "<option value= ' $i ' > $i </option>n";
}
$echopage. = "</select> page </font></td>";
$echopage. = "</tr></table>";

I am not going to explain this procedure in detail. Because is very troublesome, besides this and the news procedure algorithm is not one thing, hehe. At the time of use, we can write this on the back of the printed news headline:

echo "<td align= ' center ' >". $echopage. " </td> ";

In the back because of $echopage. It contains the program to select the first few pages.

Let's look at the following procedure:

1: $sql = "SELECT * from news ORDER BY id desc LIMIT $now, $recordnum";

The "ORDER BY id DESC" here means that the records that are driven out are printed in numbers from large to small, in other words, the output of the news is always newly published in the front. "LIMIT $now, $recordnum" limit the number of news output, the size of the ID in the $now, $recordnum, the specific $now, the value of the $recordnum to see the above paging program explained (coarse black characters section).

2: $res =mysql_query ($sql);

This statement means that the request is sent to the server and the returned results are saved in the $res.

3: $rows =fetch_assoc ($res);

This statement means that the contents of the query result $res are split into an array rows. If there is no data in the $res, the function returns a value of false. The functions of the FETCH_ASSOC () function are the same as the Mysql_fetch_row ().

4:while ($rows)
{
echo "<tr>";
echo "<td align= ' left ' valign= ' middle ' ><a href= ' index.php?id= '. $rows [id]. "' target=_blank><font> '. $rows [" Title "]." [". $rows [" date]. "] </font></a></td> ";
echo "</tr>";
}

while ($rows) is to output the news in the Order of the ID from large to small. $rows ["title"], $rows ["Author"] is the contents of the array form.

Let's talk about how to view the contents of each piece of news.

Let's take a look at the 4th program above:

<a href= ' index.php?id= '. $rows [id]. "' target=_blank><font> '. $rows [" title "]." [". $rows [" date]. "] </font></a>

The "href= ' index.php?id=". $rows ["id"]. "' "is the exact address of the article $rows [id]." From the above also can be seen to show the specific news program is also in the index.php. When we click on this hyperlink, this program passes the parameter to a variable of the same name in the PHP file. Note that you can only pass parameters to dynamic pages, not to static pages ending with. htm.

So what are the parameters here? "Index.php?id=" above. $rows ["id"]. " "of"? "Is the beginning of the variable, and" id "is the variable name," ". $rows [id]. "Is the value of the variable. If you want to pass more parameters to the PHP file, you can use "&" to separate it. For example:

Index.php?id= ". $rows [" id "]." & title= ". $rows [" title "]."

In this program, we get the variable named "id", now we analyze This program!

1: First of all we have to ensure that the ID in the database is data, so we use the following statement to judge:

if (Isset ($_get["id"])) {}

The $_get["id" here is the way to accept data from the browser's address bar. Isset () is a function that determines whether there is data or not.

2: If there is data, we will write the following program to the above "{}".

$sql = "SELECT * FROM News where id=". $_get["id"]. "";
$res = mysql_query ($sql);
$rows =fetch_assoc ($res);
while ($rows)
{
echo "<table width=750 cellpading=1 cellspacing=1 border=0 >";
echo "<tr>";
echo "<td colspan= ' 3 ' valign= ' Middle ' align= ' center ' ><font size= ' +1 ' color=red><b>". $rows [title] ." </b></font></td> ";
echo "</tr><br>";
echo "<tr>";
echo "<td width= ' 100% ' valign= ' Middle ' align= ' center ' ><font color=red ' size= ' 2 ' >". $rows [Date]. " ". $rows [" department "]." ". $rows [" Author "]." </font></td> ";
echo "<tr>";
echo "<tr>";
echo "<td colspan= ' 3 ' >echo "</tr>";
echo "<tr>";
echo "<td colspan= ' 3 ' valign= ' Middle ' ><font>". $rows ["Content"]. " </font></td></tr> ";
echo "<tr>";
echo "</table>";
}

I believe that through the previous explanations, you will be able to read the above procedures.

Bud Rain Original PHP News System tutorial (first edition) Fifth Lecture: The algorithm of news program (i)---modification, deletion

Three Modify, Delete News

As with the news program, we will first list all the news headlines, and then select the specific news to modify, delete operations.

When you list news headlines here, there is one more statement than the index.php program, which is the output:

<a href= ' editnews.php?id= '. $rows ["id"]. "' Target=_self> modification </a>

By clicking on this hyperlink, we go to a specific program that modifies and deletes news.

The specific procedures are as follows:

if (@$_get["id"])
{
$id = $_get["id"];
$sql = "SELECT * FROM news WHERE id= $id";
$res = mysql_query ($sql);
$row =fetch_assoc ($res);
$edit = "<form method=post action=takeedit.php>";
$edit. = "<table width=800 cellpadding=0 cellspacing=0 border=1>";
$edit. = "<tr& gt;<td width=150><font> article $id news </font></td>& lt;td><font> Title: <input type=text name=title value= ". $row [" title "]." Size=80></font></td></tr> ";
$edit. = "<tr><td valign=top width=150 border=0><font> author <input type=text name=author value=". $row ["Author"]. " ><br> date:<br> ". $row [Date]." </font></td><td><font size=-2><textarea cols=90 rows=10 name=content > ". $row [Content "]." </textarea></font></td></tr></table> ";
$edit. = "<input type=hidden name=id value= $id >";
$edit. = "<input type=submit name=edit value= modification >";
$edit. = "<input type=submit name=delete value= delete >";
$edit. = "</form>";
Echo $edit;
}

"@" in the above "if" (@$_get["id"]) means that the function is prevented from returning an error prompt. This way, when the program is abnormal, not to let ordinary users see the inexplicable error message.

It is worth saying that we put what can be modified in attribute value, both "value=". $row ["title"]. " Wait

Set the action attribute to "action=takeedit.php" in the <form> tab, and when we submit the form, the database is operated by takeedit.php.

These statements are the words we mentioned earlier, I do not believe that you can not read!!! The procedure is as follows:

if (@$_post["edit"])
{
$author = $_post["Author"];
$title = $_post["title"];
$content = $_post["Content"];
$source =$_post["source"];
$date = Date ("y-m-d h:i");
mysql_query (UPDATE news SET author= ' $author ', title= ' $title ', content= ' $content ', Source = ' source ', date= ' $date ' WHERE id= $id ");
}
if (@$_post["Delete"])
{
mysql_query ("DELETE from news WHERE id= $id LIMIT 1");
}

Bud Rain Original PHP News System tutorial (first edition) Six: User management

In this section, we look at how to restrict the management of news programs to administrators only. This includes having the Administrator register (this operation is best done with phpMyAdmin, after all, can not be arbitrarily let people as administrators), login, save administrator information so that the system to identify him and let him to the news operation, cancellation.

In this lecture, I use the annotation to the program to introduce the relevant knowledge.

Below please look at the registered program:

The program is divided into two parts, preceded by the MYSQL section, followed by the HTML section (submitting the form). The two-part connection is in the submission form in the <input> tag setting action= "register.php". Put MYSQL in front to avoid some PHP functions do not allow the previous HTML output.

?
if (@$_post["submit"])
{
if (Empty ($name) | | | empty ($password) | | | empty ($REPASSWORD))
(Empty () function is used to determine whether the characters inside are empty.
{
echo "Fill in the error, please <a href= ' register.php ' > re-fill </a>";
}
if ($password!= $repassword)
{
echo "Two times password input is different, please <a href= ' register.php ' > re-fill </a>";
}
The above judgment can go to the database operation, the purpose is to reduce the burden on the server.
$link =mysql_connect ("localhost", "root", "");
mysql_select_db ("Yayu", $link);
$sql = "SELECT id from Users WHERE name= ' $name '";
$result =mysql_fetch_row (mysql_query ($sql));
The Mysql_fetch_row () function saves all the data that is obtained into an array of numbers
Cited. Here, when the data is returned, the $result is equivalent to 1 of the logical amount.
Detect if user's submitted user name is registered
if ($result)
{
echo "already has the same username, please <a href= ' register.php ' > re-fill </a>";
}else{
If everything works, add the data to the database
$sql = "INSERT into users (Name,password) VALUES (' $name ', ' $password ')";
To detect the success of a user registration
if (mysql_query ($sql, $link))
{
echo "registered successfully, please immediately <a href= ' admin.php ' > Login </a>";
}
Else
{
echo "Registration failed, please <a href= ' register.php ' > Retry </a>";
}
}
}else{
?>
<center>
&LT;H1 align= "Center" > Registration <form action= "register.php" method= "OST" >//values are passed in the form of POST
<p> Code:
<input name= "name" type= "text" value= "size=" >
<br>
<br>
Password:
<input type= "password" name= "password" size= "" "Maxlength=" >
</p>
<p> re-enter password:
<input type= "Password" name= "Repassword" size= "" "Maxlength=" >
<br>
<br>
<input type= "Submit" name= "submit" value= "registered" >
<input type= "reset" value= "rewrite" >
</p></form>
</center>
</body>
?
}
?>

Let's look at the login and logoff procedures.

?
if (@$_post["submit"])
{
if (Empty ($_post["username"]))
Die ("Please fill in User name");
Here we use the Die () function, which is to provide prompt information to the user when the name is empty.
Else
$username = $_post["username"];
Record the user name.
if (Empty ($_post["password"]))
Die ("Please fill in the password");
Else
$password = $_post["password"];
$link =mysql_connect ("localhost", "root", "");
$selectdb = mysql_select_db ("Yayu", $link);
$sql = "Select Id,password,name from Users where name= ' $username '";
$result =mysql_query ($sql) or Die (Mysql_error ());
while ($pa = Mysql_fetch_assoc ($result))
The {//MYSQL_FETCH_ASSOC () function is to save the returned data as an array, with the subscript of the array and the field name//relative
$pwd = $pa [password];
$userid = $pa [id];
Detect if the user name is correct
if (! $result)
{
echo "Wrong user name";
echo "<br><a href= ' login1.php ' > re-login </a>";
Mysql_close ($link);
Exit
}
Detect password is correct
if ($pwd!= $password)
{
echo "Dear". $username. " <br> ";
echo "You entered the wrong password";
echo "<br> please <a href= ' admin.php ' > re-landing </a>";
Mysql_close ($link);
Exit
}
If everything works, set cookies
Setcookie ("username", $_post["username");
Header ("Location:admin.php");
}
if (@$_get["action"]== "logout")
{
Setcookie ("username", "");
Header ("Location:index.php");
}
}
?>

In the above program, there is a very important thing, that is cookies.

A cookie is a small packet of data that the Web server stores on the client, and when the user connects to the Web server where the cookie is placed, the Web server can read it again to prevent the cookie's data from being stored on the cookie, and the server can place the specific information on the visitor's machine.

We can see from the program a Cookie function Setcookie (), which is used to store the user's name, Syntax: Setcookie ("Custom username", "User's name");

"Custom username" in my program is "username", and when "User's name" is empty,

is the equivalent of cancellation.

We use cookies when some of our client operations require admin execution. We use if (@$_cookie["username"]) (the way to get the data is similar to the POST)

To make judgments. If username has a value, it is 1 of the logical amount.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.