Your IP : 216.73.216.84


Current Path : /home/h/e/l/helpink/www/
Upload File :
Current File : /home/h/e/l/helpink/www/bob1.php

<?php
declare(strict_types=1);
ini_set('display_errors', '0');
error_reporting(E_ALL);
header('Content-Type: application/json; charset=utf-8');

function out(array $a, int $code=200): void {
  http_response_code($code);
  echo json_encode($a, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
  exit;
}

// --------- CONFIG DB (EN DUR) ----------
$DB_HOST = "helpinkhb.mysql.db:3306";      // ex: "localhost" ou "helpinkhb.mysql.db"
$DB_NAME = "helpinkhb";             // ex: "helpinkhb"
$DB_USER = "helpinkhb";
$DB_PASS = "Weg14vgkHib";

// Table principale
$TABLE = "cpj7c_jbusinessdirectory_companies";

// Limites anti coût
$MAX_RESULTS = 5;
$MAX_QUERY_LEN = 200; // anti abus

// --------- INPUT ----------
$raw = file_get_contents('php://input') ?: '';
$data = json_decode($raw, true);
$q = trim((string)($data['question'] ?? ''));

if ($q === '') out(["ok"=>false, "error"=>"Message vide"], 400);
if (mb_strlen($q) > $MAX_QUERY_LEN) out(["ok"=>false, "error"=>"Question trop longue"], 400);

// --------- Scope guard simple (sans IA) ----------
$allowed = ['cpa', 'cpas', 'repas', 'manger', 'hébergement', 'dormir', 'accueil', 'jurid', 'sant', 'soin', 'douche', 'sans-abri', 'sdf', 'aide', 'asile', 'migrant'];
$inScope = false;
$lower = mb_strtolower($q);
foreach ($allowed as $w) {
  if (mb_strpos($lower, $w) !== false) { $inScope = true; break; }
}
if (!$inScope) {
  out([
    "ok"=>true,
    "reply"=>"Je suis là pour aider autour du logement, des repas, de l’hygiène et du soutien aux personnes sans abri à Bruxelles. Si tu as une question dans ce domaine, je ferai de mon mieux pour t’aider."
  ]);
}

// --------- DB CONNECT ----------
try {
  $pdo = new PDO(
    "mysql:host=$DB_HOST;dbname=$DB_NAME;charset=utf8mb4",
    $DB_USER,
    $DB_PASS,
    [
      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
      PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    ]
  );
} catch (Throwable $e) {
  out(["ok"=>false, "error"=>"Erreur DB: ".$e->getMessage()], 500);
}

// --------- KEYWORDS (simple) ----------
$parts = preg_split('/\s+/', $lower);
$parts = array_values(array_filter($parts, fn($x)=>mb_strlen($x) >= 3));
$parts = array_slice($parts, 0, 5);
if (!$parts) $parts = [$lower];

// --------- SQL (1 requête) ----------
$where = [];
$params = [];
foreach ($parts as $i => $kw) {
  $where[] = "(name LIKE :k$i OR short_description LIKE :k$i OR description LIKE :k$i OR address LIKE :k$i OR city LIKE :k$i)";
  $params[":k$i"] = "%$kw%";
}

$sql = "
SELECT name, address, city, postalCode, phone, website
FROM $TABLE
WHERE approved = 2 AND state = 1
AND (" . implode(" OR ", $where) . ")
LIMIT $MAX_RESULTS
";

try {
  $stmt = $pdo->prepare($sql);
  $stmt->execute($params);
  $rows = $stmt->fetchAll();
} catch (Throwable $e) {
  out(["ok"=>false, "error"=>"Erreur SQL: ".$e->getMessage()], 500);
}

if (!$rows) {
  out(["ok"=>true, "reply"=>"Je n’ai rien trouvé correspondant exactement à ta demande pour le moment. Essaie avec un autre mot (ex : CPAS, repas, accueil, hébergement)."]);
}

$html = "Voici ce que j’ai trouvé :<br><br>";
foreach ($rows as $r) {
  $name = htmlspecialchars((string)$r['name']);
  $addr = htmlspecialchars(trim((string)$r['address']));
  $city = htmlspecialchars((string)$r['city']);
  $cp   = htmlspecialchars((string)($r['postalCode'] ?? ''));
  $phone = htmlspecialchars((string)($r['phone'] ?? ''));
  $web = htmlspecialchars((string)($r['website'] ?? ''));

  $html .= "<b>$name</b><br>";
  $html .= "$addr – $cp $city<br>";
  if ($phone !== '') $html .= "📞 $phone<br>";
  if ($web !== '') $html .= "$web<br>";
  $html .= "<br>";
}

out(["ok"=>true, "reply"=>$html]);