Chiaro .
Dunque, tanto per fissare le idee supponiamo che nella base di dati ci sia una tabella azienda così strutturata:
Codice:
id INT PRIMARY KEY,
name VARCHAR(128) UNIQUE INDEX NOT NULL,
phone VARCHAR(16),
email VARCHAR(16),
url VARCHAR(256)
update.php
Codice PHP:
<?php
////////////////////////////////////////////////////////////////////////
// Definizioni per accedere alla base di dati (si assume mysqli)
// Post-condizione: $mysqli è una connessione attiva alla base di dati
require 'database.php';
$azienda = null;
////////////////////////////////////////////////////////////////////////
// Ricerca un'azienda
// Post-condizione: $azienda è un vettore associativo con i dati
// dell'azienda, oppure è null
if (isset($_POST['name']) && !isset($_POST['id'])) {
$name = $_POST['name'];
$stm = $mysqli->prepare("SELECT * FROM azienda WHERE lower(name) = ?");
if ($stm === false) {
echo "ERROR: " . $mysqli->error;
}
if (!$stm->bind_param("s", $name)) {
echo "ERROR: " . $stm->error;
}
if (!$stmt->execute()) {
echo "ERROR: " . $stm->error;
}
$result = $stm->get_result();
if ($result->num_rows == 0) {
echo "ERROR: nessuna azienda trovata";
$azienda = null;
} else {
$azienda = $result->fetch_assoc();
}
}
////////////////////////////////////////////////////////////////////////
// Aggiornamento di un'azienda
// Post-condizione: $azienda è un vettore associativo contenente i dati
// aggiornati dell'azienda
if (isset($_POST['id'], $_POST['name'], $_POST['phone'], $_POST['email'], $_POST['url'])) {
$id = $_POST['id'];
$name = $_POST['name'];
$phone = $_POST['phone'];
$email = $_POST['email'];
$url = $_POST['url'];
$stm = $mysqli->prepare("UPDATE azienda SET name = ?, phone = ?, email = ?, url = ? WHERE id = ?");
if ($stm === false) {
echo "ERROR: " . $mysqli->error;
}
if (!stm->bind_param("ssssi", $name, $phone, $email, $url, $id)) {
echo "ERROR: " . $stm->error;
}
if (!$stmt->execute()) {
echo "ERROR: " . $stm->error;
}
$azienda = array(
'id' => $id,
'name' => $name,
'phone' => $phone,
'email' => $email,
'url' => $url
);
}
?>
<DOCTYPE HTML>
<html>
...
<form method="POST" action="update.php">
<input type="text" name="name" placeholder="Nome dell'azienda..." />
<!-- Ricerca di un'azienda -->
<?php if (is_null($azienda)): ?>
<input type="submit" value="Cerca">
<!-- Modifica di un'azienda -->
<?php else: ?>
<input type="hidden" name="id" value="<?= $azienda['id'] ?>" />
<input type="text" name="phone" value="<?= $azienda['phone'] ?>" />
<input type="text" name="email" value="<?= $azienda['email'] ?>" />
<input type="text" name="url" value="<?= $azienda['url'] ?>" />
<input type="submit" value="Modifica">
<?php endif; ?>
</form>
...
</html>
Si suppone che in database.php tu definisca il modo di manipolare la base di dati, ad esempio MySQLi.
Il successivo blocco PHP cerca un'azienda, dato il nome (solo a condizione che il nome da cercare sia l'unico parametro passato tramite POST). Se la trova, ne memorizza i dati come vettore associativo in $azienda , altrimenti $azienda è impostato a null.
Nel blocco successivo viene eseguito l'aggiornamento (solo a condizione che tutti i dati necessari siano stati forniti come parametri POST). A seguito dell'aggiornamento, $azienda contiene i dati aggiornati dell'azienda.
Nota: i due blocchi sono eseguiti in maniera esclusiva: o uno, o l'altro. In ogni caso, alla fine $azienda contiene i dati aggiornati dell'azienda in questione, oppure null se nessuna azienda è stata ancora selezionata.
Nel blocco HTML, il campo name viene usato per specificare il nome dell'azienda (sia per la ricerca che per l'aggiornamento).
Dopodiché, se nessuna azienda è stata selezionata ($azienda è null) viene mostrato il pulsante di ricerca.
Altrimenti, vengono mostrati gli altri campi (modificabili) che contengono i dati correnti relativi all'azienda.
Questo probabilmente è il metodo più naive. Si può solo migliorare.
PS: Non ho modo di testare il codice. Potrebbero esserci errori di sintassi qua e là.