Oppure

Loading
18/03/09 18:15
xfiles
Ho iniziato da poco a lavorare con i database relazionali usando PHP 5.2.1 , MYSQL 5.0 , Apache 2.2 .

Su Google ho trovato alcuni esempi interessanti e devo dire che l'inserimento dei dati nel database tramite pagine .php e il loro recupero va a buon fine SE PERO' CERCO DI USARE UN FORM DI RICERCA RICEVO COME RISULTATO SOLO UNA PAGINA VUOTA ! .

Ho allegato il zip contenente i file d'esempio .

Personalmente sto indagando sul file result.php che dopo l'inserimento dei dati nel form collegandosi
a view.php dovrebbe far apparire a video i risultati , ma come ho già detto questo non avviene .

Inserendo all'inizio di result.php :

mysql_error();
error_reporting(E_ALL);

viene notificato il seguente errore : Undefined variable : chiave ... ecc ...

Ma può essere normale ricevere questo genere di avviso se le variabili non vengono inizializzate prima dell'uso .

Adesso però mi chiedo non sarà che devo abilitare o decommentare qualcosa per esempio nei file php.ini
o httpd.conf per poter utilizzare la funzione di ricerca con un form ?

Ringrazio anticipatamente per un eventuale risposta


RESULT.PHP

[php]
<?
error_reporting(E_ALL);
include("top_foot.inc.php";);
include("config.inc.php";);
top();
$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";);
$keys = explode (",", $chiave);
$query = "";
reset ($keys);
while (list(,$parola) = each ($keys))
{ $parola = trim($parola);
if ($parola != "";)
$query .= "titolo LIKE '%$parola%' OR testo LIKE '%$parola%' OR autore LIKE '%$parola%' OR";
}
$query .= "0";
$query = "SELECT id, titolo, data FROM news WHERE " . $query;
$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();
?>
[/php]



VIEW.PHP

[/php]
<?
include("top_foot.inc.php";);
include("config.inc.php";);
top();
$db = mysql_connect($db_host, $db_user, $db_password);
$id=$_GET['id'];
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 titolo, testo, data, autore, mail FROM news WHERE id='$id'";
$result = mysql_query($query, $db);
$row = mysql_fetch_array($result);
$data = date("j/n/y", $row[data]);
echo "<b>$row[titolo]</b><br><br>";
echo "$row[testo]<br><br>";
if ($row[mail] != "";)
echo "$data, <a href=mailto:$row[mail]>$row[autore]</a><br>";
else
echo "$data, $row[autore]<br>";
echo "<br><a href=index.php>Torna alla pagina iniziale</a><br>";
echo "<a href=all.php>Visualizza tutti gli articoli</a><br>";
mysql_close($db);
foot();
?>
[/php]




:-?
Ultima modifica effettuata da xfiles 18/03/09 18:17
aaa
18/03/09 20:18
radio
Ok, result si aspetta che venga passata $chiave con Get o post ma non arriva gli mai...
Devi sostituire a $chiave $_REQUEST["chiave"].

Sì, ok, ma perchè?
Il problema è che lo script è un po vecchio e quindi si aspetta che tutte le variabili passate allo script vengano inizializzate oltre che nelle varie array autoglobali (i vari $_GET $_POST $_REQUEST) anche in variabili con nome uguale a quello passato (es se chiamop prova?variabile=qualcosa mi aspetto di avere una $variabile con contenuto qualcosa. Questo comportamento è regolabile (qualcosa tipo registred_globals? Non ho qui il manuale) ed è disabilitato di default per ragioni di sicurezza da PHP 5. L'uso è fortemente sconsigliato in quanto questa possibilità verrà comunque rimossa in PHP6:oltre ad essere insicura occupa memoria inutilmente. Ovviamente le variabili restano accessibili con le autoglobali di cui sopra, che hanno anche il vantaggio, come dice il nome, di essere globali quindi puoi sempre 'invocarle senza timore, magari controllando che la chiave che cerchi esista( isset($_GET["questo_non_me_l'hai_mandato";)) o che non siano vuote (!empty($_REQUEST["chiave"])) se questo può provocare problemi allo script.

Ciao ciao.
aaa
18/03/09 21:24
xfiles
Hai ragione oltre alla variabile $chiave mi e stato suggerito di aggiungere uno spazio prima dell'ultimo OR

$query .= "titolo LIKE '%$parola%' OR testo LIKE '%$parola%' OR autore LIKE '%$parola%' OR ";
e prima dello 0

$query .= " 0";

Ecco il file modificato e funzionante !

<?php
include("top_foot.inc.php";);
include("config.inc.php";);
$chiave=$_REQUEST['chiave'];
top();
$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";);
$keys = explode (",", $chiave);
$query = "";
reset ($keys);
while (list(,$parola) = each ($keys))
{ $parola = trim($parola);
if ($parola != "";)
$query .= "titolo LIKE '%$parola%' OR testo LIKE '%$parola%' OR autore LIKE '%$parola%' OR ";
}
$query .= " 0";
$query = "SELECT id, titolo, data FROM news WHERE " . $query;
$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();
?>


Ciao e grazie !!! :k:
aaa