Бази данни (Част 3)

Въвеждане на данни в таблица


Процесът на добавяне на данни в таблица прилича на процеса на създаване на таблица в БД, но заявката е с друг синтаксис.

Синтаксисът на заявката в този случай е:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name
    [PARTITION (partition_name,...)] 
    [(col_name,...)]
    {VALUES | VALUE} ({expr | DEFAULT},...),(...),...
    [ ON DUPLICATE KEY UPDATE
      col_name=expr
        [, col_name=expr] ... ]
INSERT – вмъква нов ред в съществуваща таблица;
tbl_name – името на таблицата, в която ще се вмъкват редове;
col_name – имената на колоните, в които ще се добавя новата информаци. Както виждате, имената на колоните се отделят със запетаи.

Повече информация на адрес: http://dev.mysql.com/doc/


Ако списъка с колони и редове е празен, т.е., ако заявката ви има следния вид:

INSERT INTO tbl_name () VALUES();

INSERT създава редове, като във всяка колона се поставя подразбиращата й се стойност.

INSERT, който използва VALUE в синтаксиса, може да впише множество редове. За да направим това, списъка от стойностите за всяка колона, се поставя в средни скоби, които се отделят със запетая:

INSERT INTO tbl_name (a,b,c) VALUES (1,2,3), (4,5,6), (7,8,9);

LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE са модификатори на INSERT.

Ключовата дума DELAYED не е желателно да се използва.

Ако използвате ключовата дума LOW_PRIORITY, изпълнението на INSERT се отлага, до момента, в който няма други клиенти да четат или пишат в таблицата. Поради тази причина, клиента, който използва INSERT LOW_PRIORITY в заявката, понякога чака дълго време, докато успее да впише данни в таблицата.

Опцията HIGH_PRIORITY също не е желателна.

Ключовите думи LOW_PRIORITY и HIGH_PRIORITY оказват влияние единствено върху машината за съхраняване (storage engines). LOW_PRIORITY не бива да се използва с MyISAM таблици (в phpMyAdmin 4.0.9 машината за съхраняване на данните е InnoDB), защото изключва конкурентните вписвания на данни.

Ако използвате ключовата дума IGNORE, грешките, възникнали при изпълнението на INSERT, се игнорират.

Въвеждане на данни в БД, получени от HTML форма


Ще ползвам форма, която вече съм създала (form.html можете да откриете на адрес: https://dreamlandpoly.blogspot.com/p/htmlformsandphp1.html#form). Ще наречем новият файл DB_form.HTML. Единственото нещо, което ще променим е ред 9. Премахнете го и на негово място добавете реда:

<form  action="DB_HandleForm.php" method="post" target="_blank">
Крайният вид на файла DB_form.html е:
<!Doctype html>
<html>
<head>
<title>HTML Форма</title>
<meta http-equiv="Content-Type" content="text/html"; charset="UTF-8">
</head>
<body>

<form  action="DB_HandleForm.php" method="post" target="_blank">

Име: <br/><input type=text name="firstname" /> <br/><br/>

Фамилия: <br/><input type=text name="lastname" /> <br/><br/>

Имейл адрес: <br/><input type=text name="email"/><br/><br/>

Коментар: <br> <textarea name ="comments" ></textarea><br/><br/>

<input type=submit name="submit"  
formenctype="multipart/form-data" value="Напред!"/>

</form>

</body>
</html>
За получаване и обработване на данните отново ще ползвам вече създаден от мен файл HandleForm.php, който можете да откриете на адрес:
https://dreamlandpoly.blogspot.com/p/stillmoreforstrings-1.html#HandleForm
Копирайте файла, премахнете редовете от 23 до 37, съхранете файла като DB_HandleForm.php.
Добавяме имената на променливите за достъп до базата данни.
Добавяме променлива, която задава свързването към БД и заявката, която ще впише потребителските данни в БД.
Правим проверка дали данните са записани успешно.

Крайният файл DB_HandleForm.php ще има вида:
<!DOCTYPE html>
<html>
<head>
<title>Резултати от формата</title>
<meta http-equiv="Content-Type" content="text/html"; charset="UTF-8">
</head>
<body>
<?php

session_start();        //стартира се сесия 

/*Тази страница получава и обработва данните от „DB_form.html” */
if (isset($_POST['submit'])) {

    $firstname = $_POST['firstname'];
    $lastname = $_POST['lastname'];
    $email = $_POST['email'];
    $comments = $_POST['comments'];
    
    //Съхранява стойностите на променливите 
    //$firstname, $lastname, $email, $comments 
    $_SESSION['firstname']= $_POST['firstname']; 
    $_SESSION['lastname']=$_POST['lastname'];
    $_SESSION['email']= $_POST['email'];
    $_SESSION['comments']= $_POST['comments'];
 
    //Следващите четири реда служат за премахване на 
    //евентуални интервали 
    //в променливите $firstname, $lastname, $email и $comments  
    trim ($firstname);
    trim ($lastname);
    trim ($email);
    trim ($comments);
 
//Задаваме имената на променливите за достъп до базата данни  
$host = "localhost";
$user = "user";
$password = "password";
$DBName = "PolyDB";
$table_name = "Потребители";

//Свързваме се към MySQL сървъра и пишем заявката 
//за вписване на данните от формата в БД
$link = new mysqli($host, "$user", "$password", "$DBName") 
or die ("Невъзможно свързване");
$sql = "INSERT INTO $table_name (ID, Име, Фамилия, Имейл, Коментар) 
VALUES ('0', '$firstname', '$lastname', '$email', '$comments')";

if ($link->query($sql) === TRUE) { 
 echo "Вашето потребителско име е" . " " . 
"<span style = \"color: #EC2929;\"><b>$firstname </b></span>". ".<br/>";
 echo "Вашата фамилия e" . " ". 
"<span style = \"color: #EC2929;\"><b>$lastname </b></span>". ".<br/>";
 echo "Вашият имейл адрес е" . " ". 
"<span style = \"color: #EC2929;\"><b> $email</b></span>" . ".<br/>";
 echo "Вашият коментар е:" . " " . 
"<span style = \"color: #EC2929;\"><b> $comments </b></span>
<br/>". "<br/>";
 echo "<span style = \"color: #0000FF;\">
Данните са успешно съхранени в базата данни.</span><br/>";
} 
else { 
 echo "<span style = \"color: #0000FF;
\">Данните не могат да бъдат вписани в БД!<
/span><br/><br/>". $link->error; 
} 

$link->close();

 
}
session_write_close (); //Пише сесийните данни и завършва сесията
?>
</body>
</html>
Съхранете файла и го качете на сървъра.
При включени Aphache и MySQL сървъри, отворете файла DB_form.html.
Въведете потребителските данни и кликнете върху бутона “Напред!”.

DB_form.png
DB_HandleForm.png


sign.png

Няма коментари:

Публикуване на коментар