prepare('SELECT * FROM plant_records WHERE id = ? AND rand = ?'); $stmt->execute([$recordId, $randId]); $row = $stmt->fetch(PDO::FETCH_ASSOC); if (!$row) { http_response_code(404); die('Plant record not found'); } // Load spec ranges $specs = []; if (!empty($row['crop_type'])) { $stmtSpec = $pdo->prepare('SELECT * FROM plant_specifications WHERE plant_type = ? LIMIT 1'); $stmtSpec->execute([$row['crop_type']]); $specs = $stmtSpec->fetch(PDO::FETCH_ASSOC) ?: []; } // Load saved report comments $savedComments = [ 'general_details' => '', 'ai_interpretation' => '', 'recommended_details' => '', 'foliar_details' => '', ]; $stmtRpt = $pdo->prepare( 'SELECT comment FROM reports WHERE record_id = ? AND modx_user_id = ? ORDER BY id DESC LIMIT 1' ); $stmtRpt->execute([$recordId, $userId]); $savedRow = $stmtRpt->fetchColumn(); if ($savedRow) { $decoded = json_decode($savedRow, true); if (is_array($decoded)) { $savedComments = array_merge($savedComments, $decoded); } } } catch (PDOException $e) { error_log('DB error in plant-report.php: ' . $e->getMessage()); die('Database error occurred'); } $h = fn($v) => htmlspecialchars((string)($v ?? ''), ENT_QUOTES, 'UTF-8'); $today = date('jS F Y'); $pageTitle = 'Plant Report' . (!empty($row['client_name']) ? ' — ' . $row['client_name'] : ''); $siteName = 'Crop Monitor'; include __DIR__ . '/../../../layouts/header.php'; ?>

Plant Analysis Report

Client:
Sample ID:
Date Sampled:
Address: ,
Crop Type:
Lab No:
Site ID:
Report Date:
General Comment
AI Plant Interpretation

AI-generated agronomic interpretation. Review and edit before including in the final report.

Recommended Remedial Program
Foliar Program

It is always an advantage to assess tissue analysis results along with a corresponding soil analysis for more accurate diagnosis of plant nutrient status.

Trace element levels — manganese, copper and zinc — can all be affected by fungicide spray residues, giving misleading results.

Any recommendations provided by Crop Monitor are advice only. We are not paid consultants and accept no responsibility for any of our suggestions.