Buon pomeriggio,
chiedo aiuto riguardo un problema sul quale sto sbattendo il muso da tre giorni:
sto costruendo un sito amatoriale al solo scopo di fare pratica con PHP e MySql: questo sito allo
stato attuale ha una pagina in cui l' utente può loggarsi e, qualora l'operazione di login abbia
successo, viene visualizzato un menu da cui si possono inserire e modificare dei fornitori e delle
fatture.
Nella pagina di inserimento dei fornitori ho inserito una select option (una casella a discesa) per
scegliere la regione: i valori vengono caricati dinamicamente da una tabella del database e, in
funzione della regione scelta viene caricata dinamicamente un'altra casella a discesa dove scegliere
la provincia relativa alla regione: fin qui tutto bene.
Il problema ce l'ho nella pagina di modifica: quando scelgo la funzione di modifica, tutti i campi a
video (Nome e Cognome, Indirizzo, CAP, Città etc), vengono valorizzati correttamente, invece la select
option della regione, anche se la finestra a discesa viene riempita, la casella della select option
rimane vuota.
Ho cercato un po' sulla rete, ho fatto prove su prove, ma non sono riuscito a risolvere il problema.
C'è nel forum qualche esperto che mi possa dare una dritta?
In corrispondenza dell'option che vuoi rendere selezionata, devi aggiungere "selected". Se non ho capito/non riesci a farlo, puoi mostrare il codice e spiegare cosa ti aspetteresti?
Intanto grazie per la risposta. Di seguito il codice:
il primo file è 'include per la connessione al database (DatabaseConnection.php)
<?php
$pdo = new PDO('mysql:host=localhost;dbname=my_talmtest; charset=utf8', 'talmtest', '1X2');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Poi il file che contiene le funzioni di lettura, inserimento e aggiornamento delle tabelle (Functions.php)
<?php
function getUtente($pdo, $utente) {
$parameters = [':utente' => $utente];
//$query = query($pdo, 'SELECT `utente`, `password`, FROM `utenti` WHERE `utente` = :utente', $parameters);
$query = query($pdo, 'SELECT * FROM `utenti` WHERE `utente` = :utente', $parameters);
return $query->fetch();
}
function SelectTabella($pdo, $tabella, $where, $parametro) {
$forn = query($pdo, 'SELECT * FROM '.$tabella.' WHERE '.$where.' = '."'".$parametro."'");
return $forn->fetchAll();
}
function SelectFornitori($pdo) {
$forn = query($pdo, 'SELECT * FROM fornitori');
return $forn->fetchAll();
}
function SelectAll($pdo, $tabella) {
$forn = query($pdo, 'SELECT * FROM '.$tabella);
return $forn->fetchAll();
}
$query .= ' WHERE `codice_fornitore` = :primaryKey';
//Set the :primaryKey variable
$fields['primaryKey'] = $fields['codice_fornitore'];
$fields = processDates($fields);
query($pdo, $query, $fields);
}
function processDates($fields) {
foreach ($fields as $key => $value) {
if ($value instanceof DateTime) {
$fields[$key] = $value->format('Y-m-d');
}
}
return $fields;
}
Qundi il file menu.php che estrae i dati dalle tabelle 'regioni' e 'province' e contiene un'include al file menu_home.html.php dal quale l'utente può scegliere se inserire un nuovo fornitore con un link al file dettaglio_fornitore.php oppure chiedere un elenco dei fornitori (Tutti, Per Regione o Per Provincia).
Questo il codice del file menu_home.html.php:
Seconda parte:
Infine il file dettaglio_fornitore.php (con il suo include dettaglio_fornitore.html.php) che può essere usato sia per l'inserimento di un nuovo fornitore che per la sua modifica. Nel caso di inserimento non ci sono problemi perchè, naturalmente, i campi da compilare sono tutti vuoti, mentre invece, nel caso di modifica, tutti i campi vengono valorizzati regolarmente fatta eccezione per le select-options delle Regioni e delle Provincie:
dwettaglio_fornitore.php
<?php
session_start();
if(!isset($_SESSION['utente']))
{
header("Location: index.php");
}
include __DIR__ . '/includes/Functions.php';
include __DIR__ . '/pulizia_wa_fornitore.php';
try{
include __DIR__ . '/includes/DatabaseConnection.php';
$query = "SELECT * FROM regioni";
$result = $pdo->query($query);
<?php
echo "var regioni = $jsonRegioni; \n";
echo "var province = $jsonProvince; \n";
?>
function loadRegioni(){
var select = document.getElementById("RegioniSelect");
select.onchange = updateProvince;
for(var i = 0; i < regioni.length; i++){
select.options[i] = new Option(regioni[i].val,regioni[i].id);
}
}
function updateProvince(){
var regioniSelect = this;
var regione = this.value;
var provinceSelect = document.getElementById("ProvinceSelect");
provinceSelect.options.length = 0; //delete all options if any present
for(var i = 0; i < province[regione].length; i++){
provinceSelect.options[i] = new Option(province[regione][i].val,province[regione][i].id);
}
}
</script>
</head>
<body style="background: #fdf5e0; color: 954514; border: 2px solid #954514;" onload='loadRegioni()'>
Inserisco anche il file loop_fornitori.php richiamato da menu.php che prepara l'elenco dei fornitori scelti (Tutti, Per Regione o Per Provincia): questo script prepara anche un Button per ogni fornitore cha fa un link a dettaglio_fornitore.php per l'eventuale modifica.
<?php
foreach($fornitori as $row):
$codice = $row["codice_fornitore"];
$form = '<form id="dettaglio" action="dettaglio_fornitore.php" method="get">
<input type="hidden" name="codice_fornitore" value="'.$row["codice_fornitore"].'">
<input type="submit" class="dettaglio" value="Dettaglio/Modifica">
</form>';