PDA

View Full Version : [mysql] problema selezione database


Re Lothar
28-01-2008, 15:36
Ho alcuni problemi nella creazione di un database per un sito in php-mysql, questo è il codice della index.php:

<?
require("interfaccia.inc.php");
include("config.inc.php");
top();
?>
<title>Questa</title>
<? middle(); ?>
<?
$db = mysql_connect($db_host, $db_user, $db_password);
if ($db == FALSE)
die ("Errore nella connessione. Verificare i parametri 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 = "SELECT id, data, titolo FROM news ORDER BY data DESC LIMIT 0,5";
$result = mysql_query($query, $db);
while ($row = mysql_fetch_array($result))
{
echo "<a href=\"view.php?id=$row[id]\">" . date("j/n/y", $row[data]) . " - $row[titolo]</a><br>";
}
mysql_close($db);
foot() ?>


Questo è il file config.ini.php:

<?
// parametri del database
$db_host = "localhost";
$db_user = "root";
$db_password = "root";
$db_name = "myDatabase";
//password per inserimento articoli
$password = "";
?>

ed il file interfaccia.php non serve per il nostro problema visto che riguarda la formattazione della pagina, infatti non prendete nemmeno in considerazione foot() top() e middle() create per questo scopo.

Il problema è il seguente, quando vado sulla index mi da:

Errore nella selezione del database. Verificare i parametri nel file config.inc.php


Questo significa che si blocca nel punto:

mysql_select_db($db_name, $db)
or die ("Errore nella selezione del database. Verificare i parametri nel file config.inc.php");

e quindi non riesce a caricare il database, sul file config.ini credo di aver messo tutto giusto però non saprei, dove posso aver sbagliato?

fencer2000
28-01-2008, 18:43
Prova questo codice che ti dice l'errore esatto:

mysql_select_db($db_name, $db) or die(mysql_error());

Controlla anche eventuali maiuscole e minuscole e i permessi su quel database anche se è l'utente root di default dovrebbe avere tutti i permessi.

Re Lothar
30-01-2008, 16:17
grazie per avermi risposto ma era solo un'errore di distrazione nelle impostazioni di pass e account :D

Comunque c'è un'altro problema ora, la spiegazione è molto semplice, in pratica finche mi trovo sulla directory principale del sito tutto va bene perche riesco ad includere tranquillamente tutti i file php, ma se mi trovo in una sottodirectory questo non mi è possibile facendo


<? require("../interfaccia.inc.php") ?>

Da notare ../ con cui se fossi stato in ambiente html sarebbe tornato nella directory madre, e quindi avrebbe trovato quello che cercato, ma in php come posso fare questo visto che cosi non funziona?

fencer2000
30-01-2008, 17:21
<? require("../interfaccia.inc.php") ?>



Manca un ; alla fine..se hai fatto copia e incolla forse l'errore è lì; altrimenti se hai fatto un require di un require allora devi sempre fare riferimento al file principale. Mi spiego meglio..se hai una struttura file e directory del tipo

./index.php
./moduli/modulo.php
./inc/funzioni.php

se nell'index.php fai

<?php require("./moduli/modulo.php"); ?>

e se vuoi includere nel file del modulo il file delle funzioni dovrai sempre partire da index.php e scrivere

<?php require("./inc/funzioni.php"); ?>

invece che, come potrebbe sembrare,

<?php require("../inc/funzioni.php"); ?>

Re Lothar
30-01-2008, 19:08
Aspetta il metodo tuo ./ non funge perche mi dice proprio fatal error ecc, ma nel mio metodo (../) la pagina la richiama correttamente (interfaccia.inc.php) ma non il css richiamato da quest'ultima.

La require copia il codice html del file incluso nella pagina corrente, e siccome nel file che richiama è presente un .css.
Siccome copia il codice una volta messo nella pagina corrente (presente in una sottodirectory in questo caso) l'indirizzo del css non è piu giusto ma dovrebbe anche lui essere ../file.css

Come posso fare in modo che il php cambi da solo questo indirizzo del file a seconda del livello di directory in cui ci si trova?

fencer2000
30-01-2008, 22:15
Se ho capito bene ti servirebbe una funzione che cambi dinamicamente il percorso al css in base alla posizione dello script che lo include.

Che io sappia non esiste una funzione del genere..dovresti createla tu.
Puoi utilizzare la variabile d'ambiente $_SERVER["SCRIPT_NAME"] che restituisce il percorso allo script in esecuzione e in base al numero di / che incontri crearti il percorso a ritroso.

<?php
function getPath() {
$counter = substr_count($_SERVER['SCRIPT_NAME'], "/"); //Conto le occorrenze
$path = "./"; //Imposto la cartella corrente come partenza
for($n=2;$n<=$counter;$n++) //parto dal livello inferiore alla root
$path .= "../";
return $path;
}

echo getPath();
?>

Probabilmente necessita di qualche adattamento per il tuo caso.

Re Lothar
31-01-2008, 08:13
ho provato ad includere la funzione in pagine presenti in sottocartelle ma mi ritorna sempre ./ allora ho provato anche a fare

echo $_SERVER['stile.css'];


Ma non mi stampa niente, dovrebbe essere questa la funzione che ritorna il path relativo giusto?
Comunque l'unico problema reale è proprio questo, trovare una funzione o variabile globale che mi dia il valore relativo del path della pagina attuale.

Re Lothar
31-01-2008, 08:49
Ah ecco ho fatto cosi:

$url_script_name=$_SERVER["SCRIPT_NAME"];

$directory = dirname($url_script_name);

In questo modo posso aggiungere ad ogni link la posizione della directory ($directory) seguita dal nome del file da collegare.
Però siccome gli url sono in html non posso unire le stringhe con il php, per caso li devo fare in php anche gli url (non so se si può :D) oppure devo fare in modo di far ritornare la stringa nel codice html?
Se si come posso fare? grazie...

fencer2000
31-01-2008, 18:42
Ah ecco ho fatto cosi:

$url_script_name=$_SERVER["SCRIPT_NAME"];

$directory = dirname($url_script_name);

In questo modo posso aggiungere ad ogni link la posizione della directory ($directory) seguita dal nome del file da collegare.
Però siccome gli url sono in html non posso unire le stringhe con il php, per caso li devo fare in php anche gli url (non so se si può :D) oppure devo fare in modo di far ritornare la stringa nel codice html?
Se si come posso fare? grazie...

Puoi tranquillamente mischiare PHP e HTML.

Il codice per inserire il css potrebbe essere del tipo
<link href="<?php echo $directory."stile.css" ?>" rel="stylesheet" type="text/css" />

Però attenzione che $_SERVER["SCRIPT_NAME"] restituisce il percorso dello script corrente. Forse ti conviene crearti un array del tipo

<?php
$BACK_PATH = array( 0 => "./", 1 => "../", 2 => "../../");
$path = $BACK_PATH[$numero_occorenze_slash]; //calcolato con la funzione che ti ho scritto prima
<link href="<?php echo $path."stile.css" ?>" rel="stylesheet" type="text/css" />
?>

P.S.: $_SERVER è una variabile d'ambiente di tipo array con alcuni elementi predefiniti tra cui $_SERVER["SCRIPT_NAME"]..se vai sul manuale di PHP puoi vedere quali sono questi elementi