• User

    Database - il form di ricerca non funziona

    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 ! .

    Visto che non posso allegare il zip contenente i file d'esempio ho postato tutto il codice.

    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 
    

    Ho pensato di postare tutto il codice :

    top_foot.inc.php

    <? function top() { ?>
    <html>
    <head>
    <meta name=generator content="Script di freephp.it">
    </head>
    <body bgcolor=ffffff text=000000>
    <font face=verdana,tahoma,arial size=-1>
    <h1>FREEPHP.IT</h1><br>
    <? }

    function foot() { ?>
    </font>
    </body>
    </html>
    <? } ?>

    config.inc.php

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

    insert.php

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

    //intestazione
    top();
    ?>

    <form method="post" action="save.php">
    Titolo:<br />
    <input type="text" size="40" name="titolo" />
    <br /><br />
    Data:<br />

    <select name="giorno">
    <?
    for ($i=1; $i<=31; $i++)
    echo "<option value="$i">$i</option>";
    ?>
    </select>

    <select name="mese">
    <option value="1">Gennaio</option>
    <option value="2">Febbraio</option>
    <option value="3">Marzo</option>
    <option value="4">Aprile</option>
    <option value="5">Maggio</option>
    <option value="6">Giugno</option>
    <option value="7">Luglio</option>
    <option value="8">Agosto</option>
    <option value="9">Settembre</option>
    <option value="10">Ottobre</option>
    <option value="11">Novembre</option>
    <option value="12">Dicembre</option>
    </select>

    <select name="anno">
    <option value="2001">2001</option>
    <option value="2002">2002</option>
    <option value="2003">2003</option>
    <option value="2004">2004</option>
    <option value="2005">2005</option>
    <option value="2003">2006</option>
    <option value="2004">2007</option>
    </select>
    <br /><br />

    Autore:<br />
    <input type="text" size="40" name="autore" />
    <br /><br />
    E-mail:<br />
    <input type="text" size="40" name="mail" />
    <br /><br />
    Testo:<br />
    <textarea cols="60" rows="40" name="testo"></textarea><br />
    <br />
    Password:<br />
    <input type="password" size="40" name="pass" />
    <br /><br />
    <input type="submit" value="Invia2" />
    </form>
    <?
    // chiusura pagina
    foot();
    ?>

    search.php

    <?
    mysql_error();
    error_reporting(E_ALL);
    include("top_foot.inc.php");
    include("config.inc.php");
    top();
    ?>
    <form method=post action=result.php>
    <input type=text name=chiave><input type=submit value=cerca><br>
    </form>
    <?
    foot();
    ?>

    save.php

    <?
    $titolo=$_REQUEST['titolo'];
    $autore=$_REQUEST['autore'];
    $mail=$_REQUEST['mail'];
    $testo=$_REQUEST['testo'];
    $pass=$_REQUEST['pass'];
    $giorno=$_REQUEST['giorno'];
    $mese=$_REQUEST['mese'];
    $anno=$_REQUEST['anno'];
    include("top_foot.inc.php");
    include("config.inc.php");
    top();

    if ($pass != $password): echo "Password errata";
    elseif (trim($titolo) == "" OR trim($testo) == ""):
    echo "I campi Titolo e Testo devono essere riempiti!";
    else :
    $titolo = addslashes(stripslashes($titolo));
    $autore = addslashes(stripslashes($autore));
    $mail = addslashes(stripslashes($mail));
    $testo = addslashes(stripslashes($testo));
    $titolo = str_replace("<", "<", $titolo);
    $titolo = str_replace(">", ">", $titolo);
    $autore = str_replace("<", "<", $autore);
    $autore = str_replace(">", ">", $autore);
    $testo = str_replace("<", "<", $testo);
    $testo = str_replace(">", ">", $testo);
    $testo = nl2br($testo);
    $data = mktime("0", "0", "0", $mese, $giorno, $anno);
    $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 = "INSERT INTO news (titolo, testo, data, autore, mail) VALUES ('$titolo', '$testo', '$data', '$autore', '$mail')";
    if (mysql_query($query, $db))
    echo "L'articolo è stato inserito correttamente";
    else
    echo "Errore durante l'inserimento";

    //endif;
    mysql_close($db);
    endif; // chiude la verifica della presenza dei dati
    foot();
    ?>

    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();
    ?>

    all.php

    <?
    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");
    if (!isset($start) OR $start<0)
    $start=0;
    $step = 20;
    $query = "SELECT id,data,titolo FROM news ORDER BY data DESC LIMIT $start,$step";
    $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>"; }
    ?>
    <br><br>
    <table width=90% border=0><tr>
    <td width=20% align=left>
    <?
    if ($start>0)
    { $start_back = $start - $step;
    echo "<a href=all.php?start=$start_back>precedenti</a>";
    }
    ?>
    </td>
    <?
    $query = "SELECT count(*) AS tot FROM news";
    $result = mysql_query($query, $db);
    $row = mysql_fetch_array($result);
    $pages = intval(($row[tot]-1) / $step)+1;
    ?>
    <td width=60% align=center>
    <?
    for ($i=0; $i<$pages AND $i<20; $i++)
    { $start_page = $i * $step;
    echo "<a href=all.php?start=$start_page>" . ($i+1) . "</a> ";
    }
    ?>
    </td>
    <td width=20%>
    <?
    if ($start + $step < $row[tot])
    { $start_next = $start + $step;
    echo "<a href=all.php?start=$start_next>successivi</a>";
    }
    ?>
    </td>
    </tr></table>
    <br>
    <?
    echo "<a href=search.php>Cerca negli articoli</a>";
    foot();
    ?>

    index.php

    <?
    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");
    $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();
    ?>

    install.php

    <?
    include("config.inc.php");
    $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 = "CREATE TABLE news (id INT (5) UNSIGNED not null AUTO_INCREMENT, titolo VARCHAR (255) not null, testo TEXT not null, data INT (11), autore VARCHAR (50), mail VARCHAR (50), PRIMARY KEY (id))";
    if (mysql_query($query, $db))
    echo "L'installazione è stata eseguita correttamente";
    else
    echo "Errore durante l'installazione";
    mysql_close($db);
    ?>

    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();
    ?>


  • User Attivo

    Ciao,
    l'errore: "Undefined variable : chiave"
    significa che stai cercando di utilizzare il contenuto di una variabile che non è stata ancora definita.

    Il motivo dell'errore lo puoi notare confrontando i codici di save.php e result.php:
    In save.php i dati in arrivo dal form sono tutti memorizzati nelle variabili che verranno usate in seguito, come ad essempio:
    [php]
    $titolo=$_REQUEST['titolo'];
    [/php]
    Invece in result.php utilizzi la variabile $chiave che non è stata definita in precedenza.
    Manca una riga del tipo:
    [php]
    $chiave=$_REQUEST['chiave'];
    [/php]

    Alessandro


  • User

    Salve alessandro , ho seguito il tuo suggerimento e ho aggiunto anche php alla prima riga , ma non funge ...., adesso invece viene notificato il seguente errore :

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\Programmi\Apache Software Foundation\Apache2.2\htdocs......\result.php on line 23

    <?php
    error_reporting(E_ALL);
    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)
    ecc.......

    Inoltre ho modificato il file php.ini in questo modo :
    register_globals = on

    ma niente da fare !!


  • User Attivo

    E' molto probabile che la query generata dallo script non sia valida e che quindi non restituisca dati. Questo è il motivo del warning.

    In questa riga di codice
    [PHP]
    $query .= "titolo LIKE '%$parola%' OR testo LIKE '%$parola%' OR autore LIKE '%$parola%' OR";
    [/PHP]
    aggiungi uno spazio tra l'ultimo OR e la chiusura degli apici.

    Alessandro


  • User

    Hai ragione !!

    Il problema riguardava queste due righe anche altre due brave persone mi hanno suggerito di apportare due cambiamenti e adesso funziona !!!!

    :yuppi::yuppi::yuppi::yuppi::yuppi::yuppi:

    aggiungere uno spazio
    $query .= "titolo LIKE '%$parola%' OR testo LIKE '%$parola%' OR autore LIKE '%$parola%' OR";

    aggiungere uno spazio tra l'ultimo OR e lo 0:
    $query .= " 0";

    è cambiare i $row[tua_variabile] con $row**'tua_variabile'**]

    Ringrazio per l'aiuto che ho ricevuto -----

                                        Grazie    :sun:

  • User

    Vorrei chiedere un'altra cosa :

    Per usare un database ( creato usando PHP 5.2.1 , MYSQL 5.0 , Apache 2.2 ) su un altro PC e necessario fare il backup ad esempio con PhpMyAdmin e installare anche sull'altra macchina PHP , MYSQL e Apache , oppure c'è un altro modo più semplice e più veloce ?

    Premetto che il database verrà usato sul client , quindi in locale .


  • User Attivo

    Se il database è usato solo in locale, sì, va bene.

    Alessandro


  • User

    Si nel senso che devo installare per forza il TRIS Php , Apache e Mysql

    oppure non e necessario installarli tutti e tre nell'altro PC ?


  • User Attivo

    Dipende.
    Mysql va installato
    Se intendi sfruttare il database tramite PHP, devi installare anche quello.
    Il server Apache può esser sostituito da altri, come ad esempio IIS su windows.

    Se sfrutti uno dei vari pacchetti "tutto compreso" come WAMP e simili, fai comunque piuttosto in fretta.

    Alessandro


  • User

    Ok Alessandro sei stato molto chiaro , non rimane che chiudere questa discussione andata a buon fine .

     Grazie per l'aiuto che mi hai dato e ..... ... a buon rendere !!
    
    
                                       :ciauz: