cercare record su db mysql

precogcris

Nuovo Utente
7 Gen 2014
10
0
1
Ciao a tutti. Premessa iniziale doverosa, sono un neofita assoluto.
Con grande difficoltà sono riuscito a importare su mysql un db che avevo realizzato su excel.
Siccome il mio fine è quello di pubblicare il db su un host in modo che io possa usufruirne ovunque io sia, ho pensato di trasformarlo in un db mysql e di creare ora delle pagine php che mi aiutassero nella gestione.
Il db, giusto per notizia, è un archivio di dischi in vinile.
Sono riuscito a creare una pagina php che mi mostra tutti i record del db. Sono riuscito a fare una pagina php (passando da un form html) che si occupa dell'inserimento di nuovi dati, una che si occupa della cancellazione dei record ed una che si occupa della modifica di record già esistenti.
Tutto ok. Il mi odilemma è questo. Come faccio a creare una pagina php (magari passando prima da un form html) che mi effettui inizialmente una ricerca tra i record con un input dato dall'operatore (es. cerco i dischi di un artista specifico digitando la stringa che in quel momento mi interessa)?
Ovviamente la query mi dovrebbe visualizzare i risultati della ricerca, filtrati da input operatore. In questo modo legherei al risultato della query delle azioni di modifica o cancella che ho già realizzato.
Vi ringrazio ed in caso vi posso postare il listato della pagina php che mi mostra l'intero contenuto del db (e non quello filtrato da criterio di ricerca a scelta su un campo).

Cris
 
ciao
ecco uno schema
PHP:
<?php
//....
$autore=$_POST['autore'];//questo dato proviene dal form di ricerca
//tutti i recorcord che hanno il campo autore (o come lo chiami) che hanno valore come hai richiesto
$query="SELECT * FROM nome_tua_tablla WHERE autore='$autore'";
//....
?>
oppure che contengano la parola che viene dal form
PHP:
<?php
//....
$query="SELECT * FROM nome_tua_tablla WHERE autore LIKE '%$autore%'";//nota il carattere jolly %
//...
?>
o che inizino per
PHP:
<?php
//....
$query="SELECT * FROM nome_tua_tablla WHERE autore LIKE '$autore%'";//nota il carattere jolly %
//...
?>
o temninino per
PHP:
<?php
//....
$query="SELECT * FROM nome_tua_tablla WHERE autore LIKE '%$autore'";//nota il carattere jolly %
//...
?>
 
E' perfetto. Funziona perfettamente. Ti ringrazio infinitamente.
Posso chiedere una domanda aggiuntiva?
E se nel form volessi inserire dei criteri di ricerca multipli?
Oltre ad inserire l'autore per la ricerca dei record potrei avere la necessità di raffinare il risultato inserendo ulteriori dati negli altri campi e fare una ricerca più precisa.
Per esempio, oltre all'autore vorrei inseriree, nel campo apposito del form, anche il dato del supporto (colonna SUPPORTO del db mysql), oppure il titolo (colonna TITOLO del db).
In pratica non essere costretto a mettere un solo dato per la ricerca ma molteplici, a piacere.

Ringrazio ancora.
 
ciao
devi costruirti dinamicamente le condizioni, esempio
PHP:
<?php
//....
$autore=trim($_POST['autore']);
$titolo=trim($_POST['titolo']);
$wh="";
if($autore!=""){//hai inputato l'autore
	$wh.=" autore LIKE '$autore%' AND ";
}
if($titolo!=""){//hai inputato il titolo
	$wh.=" titolo LIKE '$titolo%' AND ";
}
$wh.= " 1=1 ";
/*
se non imputi nulla risulta $wh => 1=1 (estrai tutti i record)
se solo autore $wh =>  autore LIKE '$autore%' AND 1=1
se solo titolo $wh =>  titolo LIKE '$titolo%' AND 1=1
se imputi autore e titolo $wh =>  autore LIKE '$autore%' AND titolo LIKE '$titolo%' AND 1=1
da cui la query
*/
$query="SELECT * FROM nome_tua_tablla WHERE $wh";
//....
?>
ho messo AND ma puoi se ti serve mettere gli OR e/o fare le combinazione and or che ti servono
ana logamente per i caratteri % (danti dietro o entrembi)
 
Sei davvero portentoso. Stasera provo e ti facci osapere. Penso di aver capito.

Ti aggiungo un altro quesito.

Questa è la pagina che utilizzo per fare la modifica di un record che seleziono dal db.
Mi apre i dati in un form che posso modificare e che vorrei al termine confermare.
Il tutto è legato al campo ID che uso come indice. Sotto al numero indicato nel campo ID della griglia della tabella ho messo il link chiamato MOD al file php che ti elenco di seguito (modifica.php)
Come mai il pulsante che ho indicato come CONFERMA MODIFICA, nel listato, non mi esce come pulsante ma come campo form, addirittura ci posso scrivere dentro!!!! Cliccando su quel pulsante io salverei le eventuali modificha apportate al record.
Leggi qualcosa di strano nella pagina php che ti aggiungo qui di seguito? Il db si chiama xls_db e la tabella si chiama LP

PHP:
<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
    <head>
        <meta charset="UTF-8">
        <title>Modifica Record</title>
    </head>
    <body>
        <?php
        
        $host = 'localhost';
        $user = 'root';
        $password = '*********';
        $database = 'xls_db';
        
        $confirm=$_REQUEST['confirm'];
        $id=$_REQUEST['id'];
         
        $db = mysql_connect($host, $user, $password) or die ("impossibile connettersi al server $host");
        mysql_select_db($database, $db) or die ("impossibile connettersi al database $database");
        If (!$confirm)
{                          
        
                $query = "SELECT * FROM lp WHERE id=$id";         

$dbresult = mysql_query($query, $db);
$AffectedRows = mysql_affected_rows($db);
if ($AffectedRows==0)
{
      print("<h3>Non esistono record con i criteri selezionati</h3>");  
       }
else
{
mysql_data_seek($dbresult,0);
$row=mysql_fetch_row($dbresult);
print("<table>");
   print("<form method=\"post\"action=\"{$_SERVER['PHP_SELF']}\">");     
Foreach ($row as $k => $v)
{
$myfield = mysql_fetch_field($dbresult,$k);       
print("<tr><td>$myfield->name</td>");

print("<td><input type=\"text\" value=\"" . $v . "\" name=\"" . $myfield->name . "\" size=\"100\" maxlength=\"100\" ></td></tr>");
}

print("<tr><td colspan=\"2\"><input type=\"
    submit\" value=\"Conferma Modifiche\"></td></tr>  ");
        
         print("<input type=\"hidden\" name=\"confirm\" value=\"1\">");      
         
print("</form>");
        print("</table>");
Mysql_free_result($dbresult);
Mysql_close($db);
}
}
Else
{
$titolo=$_REQUEST['TITOLO'];
  $artista=$_REQUEST['ARTISTA'];  
    $settore=$_REQUEST['SETTORE'];
    $supporto=$_REQUEST['SUPPORTO'];
    $formato=$_REQUEST['formato'];
    $confezione=$_REQUEST['confezione'];
        $edizione=$_REQUEST['edizione'];
        $nazione=$_REQUEST['nazione'];
        $stampa=$_REQUEST['stampa'];
        $barcode=$_REQUEST['barcode'];
        $codice=$_REQUEST['codice'];
        $anno_edizione=$_REQUEST['anno_edizione'];
            $anno_disco=$_REQUEST['anno_disco'];
        $etichetta=$_REQUEST['etichetta'];
        $brani=$_REQUEST['brani'];
            $note=$_REQUEST['note'];
        $prezzo=$_REQUEST['prezzo'];
            $condizioni=$_REQUEST['condizioni'];
            $dettagli=$_REQUEST['dettagli'];
                $numerato=$_REQUEST['numerato'];
            $copie=$_REQUEST['copie'];
                        
    $query = "update lp set titolo=\"$titolo\"," . " artista=\"$artista\","
                      . " settore=\"$settore\"," 
                    . " supporto=\"$supporto\","
                         . " formato=\"$formato\","
                     . " confezione=\"$confezione\","
                      . " edizione=\"$edizione\","
                         . " nazione=\"$nazione\","
                            . " stampa=\"$stampa\","
                            . " barcode=\"$barcode\","
                                 . " codice=\"$codice\","
                                . " anno_edizione=\"$anno_edizione\","
                               . " anno_disco=\"$anno_disco\","
                                  . " etichetta=\"$etichetta\","
         . " brani=\"$brani\","
         . " note=\"$note\","
         . " prezzo=\"$prezzo\","
         . " condizioni=\"$condizioni\","
         . " dettagli=\"$dettagli\","
         . " numerato=\"$numerato\","
              . " copie=\"$copie\""
                  . "where id=$id";
           
$dbresult = mysql_query($query, $db);
$AffectedRows = mysql_affected_rows($db);
If ($AffectedRows!=0)
{
print("<h3>Il record è stato aggiornato</h3>");
print("<h3><a href=\"index_evo.php\">Torna alla lista</a></h3>");
}
mysql_close($db);
}

        ?>
           
    </body>
</html>
 
Ultima modifica di un moderatore:
ScreenShot001.jpg

Questo è il risultato di ciò che mi viene fuori richiamando i dati dal db e stampandoli in un form per l'eventuale modifica.
Il pulsante CONFERMA MODIFICHE mi esce come campo del form...
Quell'errore in alto, non bloccante è relativo all'array?
 
ciao
quale è la riga 20?
non usare le maiuscole nelle parole chiave di php if non If....
poi
HTML:
<form ....>
<table>
.....
</table>
</form>
e non
HTML:
<table>
<form ...>
.....
<form>
</table>
 
Ultima modifica:
Caro Borgo Italia, ti ringrazio infinitamente. Ho smanettato ieri sera ed ho risolto entrambi i problemi.
Il pulsante conferma modifiche non funzionava per una banalità. uno spazio prima del submit.
Ho risolto anche il problrma dell'errore sulla $_REQUEST. Pubblicandolo online non me lo da più. L'errore era solo in locale.

Una nuova domandina.
Se nel db volessi inserire un campo dove indicare un link ad un sito e che esso sia come si suol dire "cliccabile" cioè nella griglia del mio db o richiamando il record per visualizzarlo su un form, mi servirebbe che il link sia cliccabile e non debba essere costretto a fare copia/incolla del link sul browser per vederlo.

Grazie ancora.
 
ciao
come hai detto ti fai un campo chiamato es. link qundo lo riempi ci metti es.
www.pinco_pallo.it (nel campo non serve tutto l'ambaradan http://).
poi quando lo estrai (tralascio tutta la connessione e il while di estrazione dati)
PHP:
<?php
//..........
$query="SELECT * FROM nome_tua_tablla WHERE....";
//......
	$link=$riga['link'];
	echo "<a href=\"http://".$link."\" target=\"_blank\">$link</a>";
//........
?>
l'eco ti da il classico link cliccabile
www.pinco_pallo.it
 
Ci ho capito poco sai? :)
Non ho ben capito come funziona, permettimi il gioco di parole, la funzione echo...
Se io da un form faccio una ricerca che mi stampa a video un html con tutta la griglia del db che ho estratto con la query, come faccio a rendere cliccabile il contenuto presente nel campo denominato "LINK" ?

Il comando echo che mi hai indicato lo devo mettere nel php che lancio quando faccio la ricerca dal form html, dove ho scritto i criteri di ricerca dei record desiderati?
 
ciao
se guardi questi due link ti accorgi che le differenze tra echo e print non sono molte

http://it2.php.net/manual/en/function.echo.php
http://it2.php.net/manual/en/function.print.php

comunque devi mettere quel pezzetto dove estrai i dati che hai cercato
comunque non in modifica dati, ma dove eventualmente li vuoi vedere (immagino che tu non voglia solo modificarli)
nei campi di input di modifica devi mettere solo il nome del sito es.
www.pinco_pallo.it
che vuoi modificare in
www.pinco_pallo.com
 
Non mi funziona. Il campo dove scrivo l'url si chiama LINK
Dove dovrei inserire l'echo nella pagina?
Di seguito la pagina php di estrazione record provenienti dal form html.


PHP:
<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
    <head>
        <meta charset="UTF-8">
        <title>Tabella Ricerca Dischi</title>
    </head>
    <body>
        <?php
        
        $host = 'localhost';
        $user = 'legalys';
        $password = '';
        $database = 'my_legalys';
        
        $db = mysql_connect($host, $user, $password) or die ("impossibile connettersi al server $host");
        
        mysql_select_db($database, $db) or die ("impossibile connettersi al database $database");
        
        $artista=trim($_POST['artista']);
        $titolo=trim($_POST['titolo']);
        $barcode=trim($_POST['barcode']);
        $cod=trim($_POST['cod']);
$wh="";
if($artista!=""){//hai inputato l'autore
    $wh.=" artista LIKE '%$artista%' AND ";
}
if($titolo!=""){//hai inputato il titolo
    $wh.=" titolo LIKE '%$titolo%' AND ";
}
if($barcode!=""){//hai inputato l'autore
    $wh.=" barcode LIKE '%$barcode%' AND ";
}
if($codice!=""){//hai inputato l'autore
    $wh.=" cod LIKE '%$cod%' AND ";
}

$wh.= " 1=1 ";
/*
se non imputi nulla risulta $wh => 1=1 (estrai tutti i record)
se solo autore $wh =>  autore LIKE '$autore%' AND 1=1
se solo titolo $wh =>  titolo LIKE '$titolo%' AND 1=1
se imputi autore e titolo $wh =>  autore LIKE '$autore%' AND titolo LIKE '$titolo%' AND 1=1
da cui la query
*/
$query="SELECT * FROM lp WHERE $wh"; 
        $dbResult = mysql_query($query, $db);
        $AffectedRows = mysql_affected_rows($db);
        print "<table border=\"1\">\n";
        for ($index=0 ; $index<$AffectedRows ; $index++)
        {
            $row=mysql_fetch_row($dbResult);
            if($index==0)
            {                         
                print "<tr>\n";
                foreach ($row as $k => $v)
                {
                    $myfield = mysql_fetch_field($dbResult,$k);
                    print ("<td><b>" . $myfield->name . "</b></td>");
                }
                print "</tr>\n";
            }
            foreach ($row as $k => $v)
            {
                print ("<td>$v&nbsp;");
                if ($k==0)
                {
                    print "<br>";
                    print "<a href=\"cancella.php?id=$v\">Del</a>";
                    print "<br>";
                    print "<a href=\"modifica.php?id=$v\">Mod</a>";
                }
                print ("</td>");
            }
        print "</tr>\n";
        
        }
        print "</table>\n";
        mysql_free_result($dbResult);
        mysql_close($db);
        
                ?>
    </body>
</html>
 

Discussioni simili