Script di connessione

Le operazioni di connessione e selezione del database sono così comuni all'interno degli script PHP che spesso si preferisce inserirle in un file indipendente, da richiamare negli script che ne hanno bisogno. Il codice è sempre lo stesso, pertanto conviene scriverlo una volta sola, salvarlo in un file ed includerlo dove necessario.

connect.php

<?php
$link = mysql_connect('localhost', 'nome_utente', 'password');
if (!$link) {
	die ('Non riesco a connettermi: ' . mysql_error());
}

$db_selected = mysql_select_db('prova', $link);
if (!$db_selected) {
	die ("Errore nella selezione del database: " . mysql_error());
}
?>

Ecco come potrebbe presentarsi il generico script che fa uso del precedente codice di connessione:

<?php
// richiamo lo script responsabile della connessione a MySQL
require 'connect.php';

// il resto dello script: posso effettuare query
// senza preoccuparmi della connessione a MySQL
?>

Si noti però che il riutilizzo dello scipt connect.php in altri contesti (altri programmi PHP/MySQL) non è ancora immediato, poiché al suo interno sono presenti diversi dati generalmente soggetti a variazione (host, username, password e nome del DB). Per questo motivo risulta comodo separare tali informazioni dal codice ed inserirle in un apposito file di configurazione config.php, come mostrato di seguito:

config.php

<?php
$DB_host     = 'localhost';
$DB_user     = 'nome_utente';
$DB_password = 'password';
$DB_name     = 'prova';
?>

connect.php

<?php
$link = mysql_connect($DB_host, $DB_user, $DB_password);
if (!$link) {
	die ('Non riesco a connettermi: ' . mysql_error());
}

$db_selected = mysql_select_db($DB_name, $link);
if (!$db_selected) {
	die ("Errore nella selezione del database: " . mysql_error());
}
?>

Il generico script pertanto diventa:

<?php
// richiamo il file di configurazione
require 'config.php';

// richiamo lo script responsabile della connessione a MySQL
require 'connect.php';

// il resto dello script: posso effettuare query
// senza preoccuparmi della connessione a MySQL
?>

Al di là degli esempi mostrati in questa lezione ciò che conta è rendersi conto che bisogna fin da subito organizzare lo script affinché risulti snello, di facile manutenzione e, almeno in parte, riutilizzabile. Come vedremo, le applicazioni PHP/MySQL tendono con estrema facilità a "complicarsi", sopratutto quando si deve far interagire l'utente con i dati presenti nel database. Gli script che realizzeremo nelle prossime lezioni faranno uso dei file config.php e connect.php qui presentati.

4 commenti

1 claudio_61 martedě 3 aprile 2012, ore 17:33
Ciao,
intanto complimenti per l'elezioni;
ho provato a ricreare lo script ma mi carica solo valori a 1
questo è lo script :
seconda domanda come posso fare che l'utente loggiato passi direttamente al suo form ?

<?php
// richiamo il file di configurazione
require 'config.php';


if($_POST && isset($_GET['id']))
{
aggiorna_record();
}
else if(isset($_GET['id']))
{
mostra_record();
}
else
mostra_lista();

function mostra_lista()
{
// mostro un eventuale messaggio
if(isset($_GET['msg']))
echo '<b>'.htmlentities($_GET['msg']).'</b><br /><br />';

// preparo la query
$query = "SELECT id,nome FROM i_users";

// invio la query
$result = mysql_query($query);

// controllo l'esito
if (!$result) {
die("Errore nella query $query: " . mysql_error());
}

echo '
<table border="1">
<tr>
<th>Nome</th>
<th>&nbsp;</th>
</tr>';

while ($row = mysql_fetch_assoc($result))
{
$nome = htmlspecialchars($row['nome']);

// preparo il link per la modifica dei dati del record
$link = $_SERVER['PHP_SELF'] . '?id=' . $row['id'];

echo "<tr>
<td>$nome</td>
<td><a href=\"$link\">modifica</a></td>
</tr>";
}

echo '</table>';

// libero la memoria di PHP occupata dai record estratti con la SELECT
mysql_free_result($result);

// chiudo la connessione a MySQL
mysql_close();
}

function aggiorna_record()
{

$datains = trim($_POST['datains']);
$username = trim($_POST['username']);
$passwd = trim($_POST['passwd']);
$email = trim($_POST['email']);
$piva = trim($_POST['piva']);
$nome = trim($_POST['nome']);
$cognome = trim($_POST['cognome']);
$via = trim($_POST['via']);
$cap = trim($_POST['cap']);
$comune = trim($_POST['comune']);
$provincia = trim($_POST['provincia']);
$telefono = trim($_POST['tel']);
$id = isset($_GET['id']);

// preparo la query
$query = "UPDATE i_users SET
datains = '$datains',
username = '$username',
passwd = '$passwd',
email= '$email',
piva = '$piva',
nome = '$nome',
cognome = '$cognome',
via = '$via',
comune = '$comune',
provincia = '$provincia',
telefono = '$telefono'
WHERE id = $id ";
// invio la query
$result = mysql_query($query);
$result = mysql_query($query);

// controllo l'esito
if (!$result) {
die("Errore nella query $query: " . mysql_error());
}

// chiudo la connessione a MySQL
mysql_close();

$messaggio = urlencode('Aggiornamento effettuato con successo');
header("location: $_SERVER[PHP_SELF]?msg=$messaggio");
}


function mostra_record()
{
// mostro un eventuale messaggio
if(isset($_GET['msg']))
echo '<b>'.htmlentities($_GET['msg']).'</b><br /><br />';

$id = intval($_GET['id']);

// preparo la query
$query1 = "SELECT id,datains,username,passwd,email,piva,nome,cognome,via,cap,comune,provincia,telefono FROM i_users WHERE id = $id ";

// invio la query
$result1 = mysql_query($query1);

// controllo l'esito
if (!$result1) {
die("Errore nella query $query: " . mysql_error());
}

// controllo che la SELECT abbia restituito un record
// l'id passato via GET potrebbe essere stato manipolato
if(mysql_num_rows($result1) != 1) {
die("l'ID passato via GET è errato");


}

list($id,$datains,$username,$passwd,$email,$piva,$nome,$cognome,$via,$cap,$comune,$provincia,$telefono) = mysql_fetch_row($result1);



$datains = htmlspecialchars($datains);
$username = htmlspecialchars($username);
$passwd = htmlspecialchars($passwd);
$email = htmlspecialchars($email);
$piva = htmlspecialchars($piva);
$nome = htmlspecialchars($nome);
$cognome = htmlspecialchars($cognome);
$via = htmlspecialchars($via);
$cap = htmlspecialchars($cap);
$comune = htmlspecialchars($comune);
$provincia = htmlspecialchars($provincia);
$telefono = htmlspecialchars($telefono);


?>

<form name="form_registrazione" method="post" action="">

<br />Nome:<br />
<input type="text" name="nome" value="<?echo $nome?>">
<br />
Cognome:<br />
<input type="text" name="cognome" value="<?echo $cognome?>">
<br />
Via:<br />
<input type="text" name="via" value="<?echo $via?>">
<br />
Comune:<br />
<input type="text" name="comune" value="<?echo $comune?>">
<br />
CAP:<br />
<input type="text" name="cap" value="<?echo $cap?>">
<br />
Provincia:<br />
<input type="text" name="provincia" value="<?echo $provincia?>">
<br />
Recapito telefonico:<br />
<input type="text" name="tel" value="<?echo $telefono?>">
<br />
Username:<br />
<input type="text" name="username" value="<?echo $username?>">
<br />
Indirizzo e-mail:
<br />
<input type="text" name="email" value="<?echo $email?>">
<br />
Partita IVA<br />
<input name="piva" type="text" maxlength="11" />
<br />
<input name="datains" value="CURDATE()" />
<input name="id" value="<?echo $id?>" />
<input name="passwd" value="<?echo $passwd?>" />
<br />
<input type="submit" name="reg" value="Aggiorna">
</p>
</form>
<?
}
?>
2 auredesign giovedě 22 novembre 2012, ore 23:55
Salve Sig. Tomasicchio, vi ringrazio per guida veramente ottima, però ho un problema. Io creo i 2 file config.php e connect.php, se inserisco $DB_host,$DB_user,$DB_password ed $DB_name nel file connect.php quando carico la pagina mi da errore di host sconosciuto etc mentre se scrivo a mano utente, password e nome host va tutto bene...Cosa sbaglio?? Forse è un problema del server?? Io uso wamp server...
Aspetto un vostro consiglio
3 gigiuz lunedě 4 marzo 2013, ore 21:31
salve, ho seguito il corso PHP, davvero ottimo! Di Mysql sono assolutamente digiuno... Ho installato XAMPP su Mac 10.5.8, ora sto cercando di creare un databse dal terminale, ma compare il messaggio "ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'prova' ". (Preciso che dal PHP Myadmin di XAMPP riesco a crere databse e tabelle). Grazie dell'aiuto!
4 Christiandipa sabato 4 aprile 2015, ore 19:53
Buonasera, il mio intento è quello di fare in modo che durante la fase di registrazione, inserito il CAP, la provincia venga compilata automaticamente. È possibile farlo?
Effettua l'accesso o registrati per inserire un commento