AWS SERIES: DAY … NINE: (building) A SIMPLE WEB APP FOR EMAIL FORM-or-registering-data
Antes de escrevermos o código da nossa aplicação, precisamos fazer os últimos ajustes na máquina primeiro, executando um punhado de comandos no terminal. Dito isso, reproduza os seguintes passos:
netstat -ltun

sudo systemctl stop mariadb
sudo systemctl disable mariadb
sudo systemctl status mariadb

Ei Victor, o que está fazendo? 😨 Tirando do ar o banco de dados?! 😡 A aplicação não vai funcionar assim … Calma aí, meu jovem! Respire fundo, conte até 10 … isso mesmo. E então? A raiva passou? 😬 hehehe Voltando: lembre-se que o nosso banco de dados (RDS) não está nessa instância em particular, a web-server apache. E sim, localizado na database-1. Esse que mostrei há pouco, é aquele pacote mysql inicialmente baixado como mero exemplo, em outro post dessa série. Portanto, fiquem tranquilos e sossegados, pois o nosso sistema irá funcionar perfeitamente (ou pelo menos, essa é a ideia 😅)
Superado tal conflito, vamos para a aplicação propriamente, sendo esta dividida em duas partes, ou na prática, dois arquivos. Acompanhe comigo, e entenderá do que estou falando:
cd /var/www/
ls -l
mkdir usuarios
cd usuarios/
vi dbinfo.usuarios
CTRL-C + CTRL-V em https://raw.githubusercontent.com/vicrlda/web-apps/main/dbinfo.usuarios
<?php
define('DB_SERVER', 'database-1.clfc3s1ufnut.us-east-2.rds.amazonaws.com');
define('DB_USERNAME', 'admin');
define('DB_PASSWORD', 'hackme01');
define('DB_DATABASE', 'usuarios');
?>
:wq
Muito bem, aí vem a segunda parte (arquivo) … Continue comigo:
cd ..
ls
cd html/
vi index.php
CTRL-C + CTRL-V em https://raw.githubusercontent.com/vicrlda/web-apps/main/index.php
<?php include "../usuarios/dbinfo.usuarios"; ?>
<html>
<body>
<h1>VALIDE AQUI ... php + mysql-server</h1>
<?php
/* Connect to MySQL and select the database. */
$connection = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD);
if (mysqli_connect_errno()) echo "Failed to connect to MySQL: " . mysqli_connect_error();
$database = mysqli_select_db($connection, DB_DATABASE);
/* Ensure that the EMPLOYEES table exists. */
VerifyEmployeesTable($connection, DB_DATABASE);
/* If input fields are populated, add a row to the EMPLOYEES table. */
$employee_name = htmlentities($_POST['NAME']);
$employee_address = htmlentities($_POST['ADDRESS']);
if (strlen($employee_name) || strlen($employee_address)) {
AddEmployee($connection, $employee_name, $employee_address);
}
?>
<!-- Input form -->
<form action="<?PHP echo $_SERVER['SCRIPT_NAME'] ?>" method="POST">
<table border="0">
<tr>
<td>NAME</td>
<td>E-MAIL</td>
</tr>
<tr>
<td>
<input type="text" name="NAME" maxlength="45" size="30" />
</td>
<td>
<input type="text" name="ADDRESS" maxlength="90" size="60" />
</td>
<td>
<input type="submit" value="Add Data" />
</td>
</tr>
</table>
</form>
<!-- Display table data. -->
<table border="1" cellpadding="2" cellspacing="2">
<tr>
<td>ID</td>
<td>NAME</td>
<td>E-MAIL</td>
</tr>
<?php
$result = mysqli_query($connection, "SELECT * FROM EMPLOYEES");
while($query_data = mysqli_fetch_row($result)) {
echo "<tr>";
echo "<td>",$query_data[0], "</td>",
"<td>",$query_data[1], "</td>",
"<td>",$query_data[2], "</td>";
echo "</tr>";
}
?>
</table>
<!-- Clean up. -->
<?php
mysqli_free_result($result);
mysqli_close($connection);
?>
</body>
</html>
<?php
/* Add an employee to the table. */
function AddEmployee($connection, $name, $address) {
$n = mysqli_real_escape_string($connection, $name);
$a = mysqli_real_escape_string($connection, $address);
$query = "INSERT INTO EMPLOYEES (NAME, ADDRESS) VALUES ('$n', '$a');";
if(!mysqli_query($connection, $query)) echo("<p>Error adding employee data.</p>");
}
/* Check whether the table exists and, if not, create it. */
function VerifyEmployeesTable($connection, $dbName) {
if(!TableExists("EMPLOYEES", $connection, $dbName))
{
$query = "CREATE TABLE EMPLOYEES (
ID int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(45),
ADDRESS VARCHAR(90)
)";
if(!mysqli_query($connection, $query)) echo("<p>Error creating table.</p>");
}
}
/* Check for the existence of a table. */
function TableExists($tableName, $connection, $dbName) {
$t = mysqli_real_escape_string($connection, $tableName);
$d = mysqli_real_escape_string($connection, $dbName);
$checktable = mysqli_query($connection,
"SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME = '$t' AND TABLE_SCHEMA = '$d'");
if(mysqli_num_rows($checktable) > 0) return true;
return false;
}
?>
:wq
Quase lá, vamos agora testar essa nova página web que acabamos de criar dentro do servidor. Para isso, acesse no browser via ip público. Ex: 18.217.239.63


E vejam só, temos um sistema que cadastro o nome do usuário e seu email correspondente 🙃 Pronto Victor! Quer dizer que é somente isso?! Então valeu, falou e até mais! Nananinanão 🤚🛑 caro expectador, ainda não. Teremos que gerar uma nova imagem customizada para servir de template em casos de necessidade ou até mesmo urgência … Caso contrário, e não fazendo isso, você terá que repetir todas essas etapas uma por uma novamente 🙁 E quando se está com pressa, em ambientes de PRODUÇÃO, e com o chefe atrás de você no telefone falando com o cliente que está reclamando da queda, acredite em mim: não vai melhorar ou ajudar em nada ter que refazer tudo de novo. Sendo assim, desligue a máquina para garantir a integridade dos dados e antes de criar o novo TEMPLATE como imagem.
sudo shutdown -h now


>_ CONTINUA …
Até a próxima! 👋
>_ REFERÊNCIAS:
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2.html