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
Figura 01. netstat -ltun … instância webserver
sudo systemctl stop mariadb
sudo systemctl disable mariadb
sudo systemctl status mariadb
Figura 02. systemctl stop mariadb … instância webserver

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

Figura 03. index.php … conectado, mas banco de dados ainda vazio
Figura 04. index.php … conectado, e a base de dados OK

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
Figura 05. desassociando ip elástico … pois máquinas paradas com ip reservado são imediatamente cobradas ($$$) por isso
Figura 06. desligando a instância EC2

>_ CONTINUA …

Até a próxima! 👋

>_ REFERÊNCIAS:

https://stackoverflow.com/questions/42996229/php-code-for-selecting-data-from-mysql-database-for-amazon-web-services

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2.html

Deixe uma resposta

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.