Skip to content

jrambyte/angular_form_backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Form Registration System - Backend

Backend PHP per sistema di registrazione utenti con form Angular. Gestisce autenticazione, validazione dati e persistenza su MySQL.

Stack Tecnologico

  • PHP 7.4+
  • MySQL 5.7+
  • XAMPP (sviluppo locale)
  • DevExtreme (componenti form frontend)

Struttura Progetto

backend/
├── api/                          # Endpoint API REST
│   ├── process-form.php         # Inserisce nuove registrazioni
│   ├── select.php               # Ricerca comuni (lazy loading)
│   ├── select-cap.php           # Recupera CAP per comune
│   └── registrazioni.php        # Lista registrazioni
├── models/                       # Classi PHP
│   ├── classes.php              # Database + Utility (gestisce .env)
│   └── users.php                # Modello User con password hashing
├── .env.example                 # Template variabili d'ambiente
├── .gitignore                   # File da escludere da Git
└── README.md                    # Questo file

Setup Locale

1. Pre-requisiti

  • XAMPP installato con MySQL in esecuzione
  • PHP 7.4+
  • Git

2. Clone del Repository

cd C:\xampp\htdocs
git clone https://github.com/jrambyte/angular_form.git backend-php
cd backend-php

3. Configura Variabili d'Ambiente

Copia il template:

cp .env.example .env

Modifica .env con le tue credenziali locali (se diversi da default):

DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=
DB_NAME_COMUNI=comuni_db
DB_NAME_REGISTRAZIONI=registrazioni_form

Importante: .env NON deve mai essere committato su GitHub (protetto da .gitignore).

4. Database

Importa gli schema dei database in MySQL:

# Database comuni ISTAT
mysql -u root < gi_db_comuni.sql

# Database registrazioni (crea tabella dati_form se non esiste)
mysql -u root registrazioni_form < schema.sql

5. Verifica Connessione

Se tutto è configurato correttamente, una richiesta GET a:

http://localhost/backend-php/api/registrazioni.php

Dovrebbe ritornare:

{
  "status": "success",
  "message": "Dati recuperati con successo",
  "data": [],
  "count": 0
}

Architettura e Pattern

Gestione Credenziali (.env)

Il file classes.php carica le credenziali da .env al runtime:

// In classes.php
if (file_exists(__DIR__ . '/../.env')) {
    $lines = file(__DIR__ . '/../.env', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    foreach ($lines as $line) {
        if (strpos($line, '=') !== false && strpos($line, '#') !== 0) {
            list($key, $value) = explode('=', $line, 2);
            putenv(trim($key) . '=' . trim($value));
        }
    }
}

Vantaggi:

  • Credenziali separate dal codice
  • Stesse credenziali per dev/staging/prod (cambiano solo in .env)
  • Sicuro: .env è in .gitignore

Classi Principali

Database (classes.php)

Gestisce connessione a MySQL con credenziali da .env:

$database = new Database("comuni_db");
$db = $database->getConnection();
// uso della connessione
$database->closeConnection();

User (users.php)

Modello per registrazione utenti con hashing password:

$user = new User($db);
$user->nome = "Mario";
$user->email = "mario@example.com";
$user->password = "P@ssw0rd123";
$user->insert(); // Hashata con bcrypt

Utility (classes.php)

Funzioni statiche di servizio:

  • formDataToArray() — Converte POST/JSON in array
  • sanitizeInput() — Rimuove HTML e caratteri pericolosi
  • sendResponse() — Invia JSON standardizzato

Flusso Registrazione

  1. Angular frontend invia POST a process-form.php con dati form
  2. process-form.php riceve, sanitizza, valida, crea User
  3. User::insert() verifica email duplicata, hashata password, inserisce DB
  4. Risposta ritorna ID utente e messaggio di successo

Endpoint API

POST /api/process-form.php

Request (JSON):

{
  "nome": "Mario",
  "cognome": "Rossi",
  "email": "mario@example.com",
  "codiceFiscale": "RSSMRA85A01H501K",
  "comuneResidenza": 1234,
  "cap": "50125",
  "sesso": "Uomo",
  "password": "P@ssw0rd123"
}

Response (success):

{
  "status": "success",
  "message": "Registrazione completata con successo",
  "id": 42,
  "data": {
    "id": 42,
    "nome": "Mario",
    "email": "mario@example.com"
  }
}

GET /api/select.php?search=Roma

Ricerca comuni con lazy loading.

Response:

{
  "status": "success",
  "data": [
    { "id": "H501", "text": "Roma" },
    { "id": "H502", "text": "Rometta" }
  ]
}

GET /api/select-cap.php?comuneId=H501

Recupera CAP per un comune specifico.

Response:

{
  "status": "success",
  "data": [
    { "id": 1, "cap": "00100" },
    { "id": 2, "cap": "00118" }
  ]
}

GET /api/registrazioni.php

Lista tutte le registrazioni con JOIN a comuni.

Response:

{
  "status": "success",
  "data": [
    {
      "id": 1,
      "nome": "Mario",
      "cognome": "Rossi",
      "email": "mario@example.com",
      "comuneResidenza": { "id": 1234, "text": "Roma" },
      "dataRegistrazione": "2025-11-04 10:30:00"
    }
  ],
  "count": 1
}

Sicurezza

  • Password hashing: bcrypt (password_hash())
  • SQL injection prevention: Prepared statements (mysqli::prepare())
  • XSS prevention: htmlspecialchars() su output
  • Credenziali separate: .env non committato
  • CORS headers: Gestiti in ogni endpoint

Sviluppo

Aggiungere Nuovo Endpoint

  1. Crea file api/novo-endpoint.php
  2. Includi classes.php e users.php se necessario
  3. Segui il pattern: headers → validazione → logica → risposta JSON
  4. Commit e push

Debug

Log di errore in php_error_log (configurato in php.ini):

# XAMPP: visualizza log
tail -f C:\xampp\php\logs\php_error_log

Deploy in Produzione

  1. Imposta variabili d'ambiente a livello di sistema (server)
  2. .env rimane locale (non è sul server)
  3. PHP legge automaticamente da getenv() le variabili del server
  4. Deploy: clone repo, niente .env necessario

Supporto

Per issues o domande, apri una issue su GitHub o contatta il maintainer.

License

Progetto privato. Tutti i diritti riservati.

About

Form registration system with Angular + Devextreme frontend, PHP vanilla backend

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages