PDA

View Full Version : Alcune domandine su Php/MySql


D4rkAng3l
16-06-2004, 12:35
Ciao,
stavo vedendomi un tutorialdi FreePhp.it come funziona MySql interfacciato al Php....

Ho fatto questa parte di script ma Apache mi dà il seguente errore:
Parse error: parse error, unexpected T_ELSEIF in c:\programmi\easyphp\www\scrptdb\save.php on line 14

L'errore dovrebbe trovarsi alla riga dove applica la funzione trim ma non riesco a capire cosa ci sia che non vada...
questo è il codice completo:

<?
include("top_foot.php");
include("config.inc.php");
top();

if("$pass!=$password"); // Controlla se la password immessa nel forum corrisponde al valore della variabile $password memorizzata in config.inc.php
echo "Password errata";

// Verifica che i campi titolo e testo non siano vuoti o composti da soli spazzi

/* La funzione trim ha lo scopo di eliminare caratteri vuoti dall'inizio e dalla fine della stringa così da non
accettare stringhe composte da soli spazi prive di contenuto informativo */

elseif(trim($titolo) == "" OR trim($testo) == "");
echo "I campi Titolo e Testo devono essere inseriti !!!";

/* Verifica che le stringhe inserite non contengono caratteri particolari come gli apici o le virgolette quindi
prima toglie gli slash e poi li reinserisce per essere sicuri che le stringhe siano preceduto dallo slash */

else:
$titolo = addslashes(stripslashes($titolo));
$autore = addslashes(stripslashes($autore));
$mail = addslashes(stripslashes($mail));
$testo = addslashes(stripslashes($testo));

/* Per non avere problemi con alcuni caratteri che vanno in contrasto con i tag html (come < e >) lo script li
sostituisce con i corrispondenti in html e inserisce nel testo il carattere di fineriga. */

$titolo = str_replace("<", "&lt", $titolo);
$titolo = str_replace(">", "&gt", $titolo);
$autore = str_replace("<", "&lt", $autore);
$autore = str_replace(">", "&gt", $autore);
$testo = str_replace("<", "&lt", $testo);
$testo = str_replace(">", "&gt", $testo);
$testo = nl2br($testo);

/* Lo script converte ora la data in formato timestamp mediante la funzione mktime */

$data = mktime("0", "0", "0", $mese, $giorno, $anno);

/* Lo script si collega al db */

$db = mysql_connect($db_host, $db_user, $db_password); // Viene assegnato un valore TRUE o FALSE alla variabile $db a seconda che la connessione sia andata a buon fine o meno
if ($db == FALSE)
die ("Errore nella connessione, verificare i parametri inseriti nel file config.inc.php");
mysql_select_db($db_name, $db)
or die ("Errore nella selezione del database. Verificare i parametri nel file config.inc.php");

/* Query che si occupa dell'inserzione dei dati immessi nel db */

$query = "INSERT INTO news (titolo, testo, data, autore, mail) VALUES ('$titolo', '$testo', '$data', '$autore', '$mail')";

/* Verifico l'avvenuta inserzione dei dati nel db */

if(mysql_query($query, $db))
echo "L'articolo è stato inserito correttamente";
else
echo "Errore durante l'inserimento dell'articolo nel db !!!";
mysql_close($db); endif;
foot();
?>

Poi ho qualche altro dubbio su questa parte di codice che fà in modo che lo script si connetta al database:

$db = mysql_connect($db_host, $db_user, $db_password); // Viene assegnato un valore TRUE o FALSE alla variabile $db a seconda che la connessione sia andata a buon fine o meno
if ($db == FALSE)
die ("Errore nella connessione, verificare i parametri inseriti nel file config.inc.php");
mysql_select_db($db_name, $db)
or die ("Errore nella selezione del database. Verificare i parametri nel file config.inc.php");

Paricamente la funzione mysql_connect prende in ingreso il parametro $db_host che contiene l'host sul quale risiede il db, $db_user che contiene l'utente e $db_password che contiene la password per connettersi al db....se la connessione ha successo la variabile $db viene inizializzata a TRUE se non ha successo viene inizializzata a FALSE e lo script stampa il messaggio di errore....fino quà non dovrebbero esserci problemi concettuali...

La cosa che non mi è ben chiara è invece il funzionamento della funzione mysql_select_db...da quello che ho capito questa funzione seleziona il db da usare, giusto?
I parametri che ha in entrata sono $db_name che contiene il nome del db, e fin quà tutto ok, e $db...ma $db non conteneva solamente TRUE o FALSE dell'avvenuta connessione?Perchè glielo devo passare a mysql_select_db?Per fargli capire che la connessione è avvenuta con successo e che può selezionare il db giusto? booo svelatemi voi questo mistero....

Altra domanda sempre relativa alla funzione mysql_select_db...da quello che ho letto restituisce direttamente un valore o TRUE o FALSE e non c'è bisogno di metterlo in una variabile per poi fare il controllo
Quando faccio:
mysql_select_db($db_name, $db)
or die ("Errore nella selezione del database. Verificare i parametri nel file config.inc.php");

vuol dire che se non è andata a buon fine stampa direttamente il messaggio di errore?!?! ma Php dove lo va a mettere il valore TRUE o FALSE per decidere cosa fare

Grazie
Andrea

cionci
16-06-2004, 13:34
A $db viene assegnato FALSE se fallisce la chiamata...altrimenti gli viene assegnato un identificativo della connessione al DB ;)

or è un operatore che ritorno vero (diverso da false) quando uno dei due parametri sono diversi da FALSE... L'operatore è associativo a sinistra quindi viene valutato prima il parametro di sinistra (il valore ritornato da mysql_select_db)...se il primo è vero non valuta il secondo (c'è già un parametro diverso da false)...ma se mysql_select_db allora valuta anche il secondo che a questo punto termina lo script e visualizza l'errore...

D4rkAng3l
16-06-2004, 13:36
Grazie mille Cionci :)