View Full Version : [php] visualizzare record e ordinarli
Ciao a tutti,
ho 2 domande:
1) Ho un modulo html che passa ad una pagina php di ricerca che
si collega ad un database mysql le variabile in base alle quali effettuare
la ricerca e visualizzare i risultati, ad esempio:
$sql = "SELECT * from PERSONALE where reparto= '$rep' and cognome = '$cognome'";
con questa istruzione poi la variabile $sql è passata ad una funzione di ricerca che visualizzera i risultati
in base al cognome e al rep (sta per reparto di appartenenza)
Volevo sapere se nel caso in cui dal form html non inviassi nessun parametro
(form in bianco) e prema il tasto di invio, come faccio a far visualizzare tutti
i record del database. Per informazione la tabella contiene un campo con numero progressivo
nominato "id_utente"
(attualmente ci sono 7 record: tutti quelli che vorrei visualizzare indistintamente)
dovrebbe essere una cosa del tipo:
elseif($rep==""&&$cognome=="")
{
..istruzione..
}
ho già usato una cosa simile che prevede una determinata situazione ma
adesso non riesco a venirne a capo (forse mi perdo in un bicchiere d'acqua!!)
si potrebbe richiamare una nuova funzione che non abbia niente a che fare con quella sopra
(non voglio modificarla altrimenti faccio casini) e che stampi con un cicli for
tutte le righe esistenti: ma come si fa a comunicare al ciclo quanti record ci sono nel database?
ovviamente.
Mi basterebbe anche un semplice link da aggiungere nella pagina html che
richiami uno script php che mi visualizzi l'intero elenco.
Ho riutilizzato per la cronaca script
a questa pagina:
http://a2.swlibero.org/a2280.html#almltitle3095
il file brdp_db.php e index.php per la precisione
2)
vorrei visualizzare i cognomi (l'intera lista o solo quelli ricercati)
inseriti nel campo relativo del database
in ordine alfabetico . Esiste una funzione del php per fare questo?
ciao e grazie.
fabio_tarantino
13-05-2004, 22:51
1)
Forse ho capito male io, dal mometo che la soluzione mi sembra così banale:
Questi ti dovrebbe visualizzare l'intero elenco... sempre se ho capito bene la tua domanda ;)
else if ($rep==""&&$cognome=="")
{
$sql = "SELECT * FROM Personale";
}
Per la stampa della lista il ciclo lo puoi fare indirettamente con un while
$ris = risultato query
while (list($pers_cognome) = mysql_fetch_row ($ris))
{
print($pers_cognome);
}
2) Per la visualizzazione della lista ordinata per cognome semplicemente la fai fare al db:
$sql = "SELECT * FROM Personale ORDER by cognome";
la funzione
mysql_num_rows(recordset)
ritorna il numero di righe che contiene il recordset in cui hai i dati del risultato della query.
ad esempio per stampare tutti i cognomi
$sql="select * from personale";
$ris=mysql_query($sql);
$totr=mysql_num_rows($ris);
print "Elenco cognomi";
for ($i=0;$i<$totr<$i++){
print "<br>".mysql_result($ris,$i,"cognome");
}
il resto tutto come ha detto fabio_tarantino...
Originariamente inviato da khamel
la funzione
mysql_num_rows(recordset)
ritorna il numero di righe che contiene il recordset in cui hai i dati del risultato della query.
ad esempio per stampare tutti i cognomi
$sql="select * from personale";
$ris=mysql_query($sql);
$totr=mysql_num_rows($ris);
print "Elenco cognomi";
for ($i=0;$i<$totr<$i++){
print "<br>".mysql_result($ris,$i,"cognome");
}
il resto tutto come ha detto fabio_tarantino...
Solitamente non si usa mai mysql_num_rows... Si opera con le varie funzioni mysql_fetch_....
Originariamente inviato da cionci
Solitamente non si usa mai mysql_num_rows... Si opera con le varie funzioni mysql_fetch_....
è solo un'altro modo di fare una cosa... non dico che sia per forza giusto... cmq incasso il colpo
:cry: :tapiro:
Originariamente inviato da khamel
è solo un'altro modo di fare una cosa... non dico che sia per forza giusto... cmq incasso il colpo
:cry: :tapiro:
Solitamente per il fatto che è più comodo operare con le altre...almeno per me... Tra l'altro il tuo metodo...l'ho visto usare solamente quando non si conosce il contenuto dei campi della tabella per fare un output sbrigativo di una riga (senza il terzo parametro)...
il primo che ho imparato (alle superiori... :old: ) è stato quello, ci sono un po legato ancora
@cionci
:ot:
quella guida a delphi che ti dicevo ci sto lavorando ma il tempo è veramente poco...tra un mesetto è ora di esami e sono un po preso...
:ot:
Originariamente inviato da khamel
:ot:
quella guida a delphi che ti dicevo ci sto lavorando ma il tempo è veramente poco...tra un mesetto è ora di esami e sono un po preso...
:ot:
No problem ;)
grazie!
comunque ci deve essere qualcosa che non va nel codice, qualche errore mio o chissà, avevo pensato già più o meno alle soluzioni proposte.
...boh.. invio i dati ad un altro file ricerca.php fatto ad hoc e faccio prima
grazie ancora e ciao.
fabio_tarantino
15-05-2004, 13:09
magari se posti il codice incriminato ti diamo una mano
Originariamente inviato da fabio_tarantino
magari se posti il codice incriminato ti diamo una mano
..infatti
Non capisco qual'è il problema (sono alle prime armi con il php abbiate pazienza)!!
vi posto tutto:
//file con le opzioni di ricerca.html:
<html>
<body>
<form method="GET" action="index.php">
<table border="0" width="48%" cellspacing="1">
<tr>
<td width="1%"><b>Reparto</b></td>
<td width="101%"><select size="1" name="rep">
<option></option>
<option>Manager </option>
<option>Officina </option>
<option>Stireria </option></td> </tr>
<tr>
<td width="1%"><b>Cognome</b></td>
<td width="101%"><input type="text" name="cognome" size="20"></td>
</tr>
<td width="54%"><input type="submit" value="Invia" name="B1"><input type="reset" value="Reimposta dati" name="B2">
</form>
</td>
</tr></table></form>
</body>
</html>
//file destinazione index.php:
<?
include("brdp_db.php");
$db = new database;
$db->connetti();
if($rep&&$cognome!="")
{
$sql = "SELECT * from BRDP_TB_UTENTI where reparto= '$rep' and cognome = '$cognome'";
}elseif($cognome=="")
{
$sql = "SELECT * from BRDP_TB_UTENTI where reparto= '$rep'";
}elseif($rep=="")
{
$sql = "SELECT * from BRDP_TB_UTENTI where cognome= '$cognome'";//fino a qui nessun problema
}elseif ((empty($rep)) && (empty($cognome))) //qui non va!
{
$sql = "SELECT * from BRDP_TB_UTENTI";
}
?>
<html>
<head>
</head><body>
<a href="ricerca.php">RICERCA</a>
<br><br> <table>
<?
# Eseguo la query contenuta in $sql
if($db->esegui($sql)){
if($db->righe()>0){
for($i=0; $i<$db->righe(); $i++){
$j=$i+1;
echo "<tr><td>".$j.") ".$db->leggi($i,"nome")." <td>".$db->leggi($i,"cognome")."</td></td>";
echo "<td><a href=\"agenda.php?utente=".$db->leggi($i,"id_utente");
echo "&nome=".$db->leggi($i,"nome");
echo "\">Agenda utente</a></td></tr>";
}
}else{
echo "<tr><td> Nessun utente attivo in archivio </td></tr>";
}
}else{
echo "<tr><td>Errore di interrogazione.</td></tr>";
}
?>
</table>
</body></html>
<?
$db->disconnetti();
?>
//file principale da includere brdp_db.php scaricato dal sito citato sopra:
<?
class database {
var $db;
function database($USER="", $PASSWORD="", $DB="brdp_esempio_1 ", $HOST="127.0.0.1" ){
$this->db["user"] = $USER;
$this->db["password"] = $PASSWORD;
$this->db["db"] = $DB;
$this->db["host"] = $HOST;
}
function connetti(){
$this->db["connessione"] = @mysql_connect($this->db["host"],$this->db["user"],$this->db["password"]);
if ($this->db["connessione"]){
return $this->db["connessione"];
}else{
?>
<br>
<table align="center" width="500" cellspacing="0" cellpadding="4" border="1">
<tr bgcolor="#e2e2e2">
<td>
<font color="#000000" face="helvetica,verdana" size="5">
<b>PROBLEMI DI CONNESSIONE</b>
</font>
</td>
</tr>
<tr>
<td>
<font size="2" color="#4F4F4F" face="Helvetica, Verdana">
I nostri server sono, momentaneamente, <b>sovraccarichi</b>
e NON possono stabilire una connessione. Vi invitiamo a
riprovare più tardi. Se il problema persiste, per favore,
segnalatelo al<b><i>
<a href="mailto:webmastert@del_sito.it">webmaster</a></i></b>.
</font>
</td>
</tr>
</table>
<?
exit;
}
}
function disconnetti(){
@mysql_close($this->db["connessione"]);
}
function esegui($query){
$this->db["risultato"] = @mysql_db_query($this->db["db"],$query,$this->db["connessione"]);
return $this->db["risultato"];
}
function query2select($query, $nome, $valore, $default, $metodo){
if($this->esegui($query)){
for($i=0; $i<$this->righe(); $i++){
$sel="";
if ($default == $this->leggi($i,$valore))
$sel="selected";
$ris = $ris."<option value=\"".$this->leggi($i,$valore)."\" ".$sel.">";
$ris = $ris.$this->leggi($i,$nome)."</option>\n";
}
if($metodo){
echo $ris;
return true;
}else{
return $ris;
}
}else{
return false;
}
}
function getlast_id(){
return @mysql_insert_id($this->db["connessione"]);
}
function leggi($numero_riga,$nome_campo){
return @mysql_result($this->db["risultato"],$numero_riga,$nome_campo);
}
function righe(){
$this->db["righe"] = @mysql_num_rows($this->db["risultato"]);
return $this->db["righe"];
}
function affected_row()
{
return @mysql_affected_rows($this->db["connessione"]);
}
}
?>
quando dal modulo non effettuo nessuna scelta (campi vuoti)
vorrei avere l'intera lista invece visualizzo il messaggio di errore
"Nessun utente attivo in archivio".
Come mai?
Volevo scrivere una funzione a parte ma mi sono accorto che mi serve il pezzo di codice
che affianca al nome e cognome il link che riporta alla pagina personale di ogni persona
con i dati completi e non so come integrarlo (agenda.php).
Mi aiutate allora?
fabio_tarantino
15-05-2004, 14:30
Intanto correggi queste cosette:
1) nel file ricerca.html
devi chiudere il tag select
chiudi due volte il tag form
2) nel file index.php
ma che è: if($rep&&$cognome!="") ??
Non mi dire che php permette questa sintassi!!
Io riscriveri in: if ( ($rep != "") && ($cognome != "") )
Anche questo: elseif ((empty($rep)) && (empty($cognome)))
lo riscriverei in else (e basta tanto con i rami precedenti hai risolto tutti i casi)
ho risolto! ho dovuto cambiare il codice.
Però adesso, volendo strafare ho aggiunto nel modulo di ricerca
due nuove scelte:
selezione delle persone che hanno uno stipendio compreso
tra un tot minimo e un tot massimo
nel file index ho aggiunto questo (non so se la sintassi è corretta, vado a tentativi il più delle volte!!)
elseif(($inf!=""&&$sup!="")&&((empty($rep)) && (empty($cognome))))
{
$tutto = "SELECT * from rubrica where stipendio >= '$inf'and stipendio <= '$sup'";
}
il fatto è che se elimino gli altri elseif il codice sopra fa il suo dovere
altrimenti non viene considerato.
Io vorrei però che tenesse conto sia che la scelta sia fatta solo per stipendio sia che sia fatta per stipendio, reparto oppure cognome.
Mi spiego:
le persone del reparto Officina che hanno uno stipendio tra totmin e totmassimo.
Capito?
grazie
fabio_tarantino
16-05-2004, 12:03
if ( ($rep != "") && ($cognome) ) {
if ( ($inf != "") && ($sup != "") ) {
$sql = "SELECT * FROM rubrica WHERE ((stipendo>=$inf) AND (stipendio<=$sup)) AND (cognome='$cognome') AND (reparto='$rep') ";
}
else {
$sql = "SELECT * FROM rubrica WHERE (cognome='$cognome') AND (reparto='$rep') ";
}
}
elseif ($rep != "")
{
if ( ($inf != "") && ($sup != "") ) {
$sql = "SELECT * FROM rubrica WHERE ((stipendo>=$inf) AND (stipendio<=$sup)) AND (reparto='$rep') ";
}
else {
$sql = "SELECT * FROM rubrica WHERE reparto='$rep' ";
}
}
elseif ($cognome != "")
{
if ( ($inf != "") && ($sup != "") ) {
$sql = "SELECT * FROM rubrica WHERE ((stipendo>=$inf) AND (stipendio<=$sup)) AND (cognome='$cognome') ";
}
else {
$sql = "SELECT * FROM rubrica WHERE cognome='$cognome' ";
}
}
grazie!!
già che ci siamo:
Vorrei visualizzare i valori numerici di un campo in ordine decrescente.
Se uso ad esempio l'istruzione "ORDER BY" stipendio ottengo invece
la visualizzazione dei valori ordinati in ordine crescente.
Qual'è l'istruzione che permette di farlo?
Grazie
Fenomeno85
17-05-2004, 19:14
DESC dovrebbe essere
MEMBRO DEL GRAN CONSIGLIO DELLE CACCOLE VERDI
~§~ Sempre E Solo Lei ~§~
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.