Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
PHP - DATABASE - IL FORM DI RICERCA NON FUNZIONA
Forum - PHP - DATABASE - IL FORM DI RICERCA NON FUNZIONA

Avatar
xfiles (Normal User)
Rookie


Messaggi: 22
Iscritto: 19/09/2008

Segnala al moderatore
Postato alle 19:15
Mercoledì, 18/03/2009
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]




:-?


xfiles ha allegato un file: Example.zip (4159 bytes)
Clicca qui per scaricare il file

Ultima modifica effettuata da xfiles il 18/03/2009 alle 19:17
PM Quote
Avatar
antometal (Member)
Guru


Messaggi: 691
Iscritto: 12/09/2007

Segnala al moderatore
Postato alle 21:00
Mercoledì, 18/03/2009


se berlusconi ha i capelli, è grazie alla ricerca

http://antonioserver.altervista.org
PM Quote
Avatar
radio (Ex-Member)
Expert


Messaggi: 327
Iscritto: 03/03/2005

Segnala al moderatore
Postato alle 21:18
Mercoledì, 18/03/2009
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.


______

Radio.
PM Quote
Avatar
xfiles (Normal User)
Rookie


Messaggi: 22
Iscritto: 19/09/2008

Segnala al moderatore
Postato alle 22:24
Mercoledì, 18/03/2009
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:

PM Quote