- Home
- Categorie
- Coding e Sistemistica
- PHP
- Pulsante tipo phpmyadmin per ordinare colonne tabella in ordine crescente-decrescente
-
Ciao Samyorn, infatti nell' if avevo scritto direttamente if ($order) { //query }... senza verificare la condizione se if ($order=="") { //query}, che testolina che ho!! Dunque il problema 1 ora è risolto ma, credo di non aver capito bene quello che devo fare per ordinare in senso decrescente al secondo click , per il momento l'ordine crescente mi funziona alla perfezione, invio qui di seguito lo script:
<?php
$host='localhost';
$user='root';
$password='pass';
$database='nome_db';
$order=$_GET['order'];
$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 ($order=="")
{
$query="SELECT id,nome,marca,prezzo FROM table ORDER BY table . marca ASC";
}
else
{
$query="SELECT id,nome,marca,prezzo FROM table ORDER BY ".$order;
}
$Result=mysql_query($query,$db);
$AffectedRows=mysql_affected_rows($db);
//#f1f1f1
print "<html><head><title>Catalogo dei prodotti</title></head><body>";
print"<center><h1>Catalogo dei prodotti</h1></center>";
print "<div align="center"><TABLE border="1" width="60%"><TR>";print"
<TD><a href="catalogo.php?order=id" title="Ordinamento"><B>id</B></a></TD>
<TD><a href="catalogo.php?order=nome" title="Ordinamento"><B>Nome</B></a></TD>
<TD><a href="catalogo.php?order=marca" title="Ordinamento"><B>Marca</B></a></TD>
<TD><a href="catalogo.php?order=prezzo" title="Ordinamento"><B>Prezzo</B></a></TD></TR>";for($index=0;$index<$AffectedRows;$index++)
{
$row=mysql_fetch_row($Result);[........................altro codice .....................]
.... il resto dello script è uguale a quello che ho già inviato, programmando in javascript qualche volta mi è capitato di far scherzetti agli amici creando dei form da compilare e una volta cliccato il submit tutti i valori venivano scambiati, ad esempio il nome nel campo città, oppure il cognome nel campo lavoro con una funzione tipo questa, un piccolo esempio:
<script type="text/javascript">
function scambia()
{ var x,y
x=document.f1.text1.value
y=document.f1.text2.value
document.f1.text2.value=x
document.f1.text1.value=y
}
</script><form name="f1">
Nome:<input type="text" name="text1"><br>
Cognome:<input type="text" name="text2"><br>
Invia:<input type="button" name="b1" value="INVIA" onClick="scambia()">
</form>cliccandoci ripetutamente sopra i valori vengono continuamente invertiti,
ma riguardo a questo script php per l'ordinamento crescente e decrescente al secondo click... non mi è chiara la soluzione del problema 2, please help me... ci siamo quasi. Ciao Samyorn.
-
Intendevo qualcosa del genere
[php]$order=$_GET['order'];
$desc=$_GET['desc'];
..........
.........
else
{
$query="SELECT id,nome,marca,prezzo FROM table ORDER BY ".$order;
if ($desc=="y")
{
echo " DESC";
}
}
..........
..........
print="
<td><a href="catalogo.php?order=prezzo";if ($order=="prezzo" && $desc=="y")
{
echo "&desc=y"; // risultato: catalogo.php?order=prezzo&desc=y
}
else
{
echo " " title="Ordinamento"><B>Prezzo</B></a></TD></TR>";
}[/php]Vedi se va, attendiamo buone notizie
-
Ciao Samyorn, ,mi scusi se ci metto un pò a risp ma sto conciliando diversi progetti e ogni tanto vado in panne, riguardo al codice che mi ha inviato per ultimo e pur essendo principiante in php volevo dirle che a prima occhiata ho notato qualche errorino sintattico, non riesco a capire il senso di quei echo, non potrebbe funzionare in questo modo, penso... ma , se provo a modificare un attimo la query iniziale?
Cioè questa parte di codice:
if ($order=="")
{
$query="SELECT id,nome,marca,prezzo FROM table ORDER BY table . marca ASC";
}
else
{
$query="SELECT id,nome,marca,prezzo FROM table ORDER BY ".$order;
}
...intendo lasciare solo la seconda query aggiungendo magari una variabile che contenga un array di campi, e con qualche if fare in modo che senza il primo click sia crescente (come di default con il SELECT) altrimenti con il secondo click ordinarlo in senso decrescente?!?!?! che ritorni però come prima ricliccando sopra.... poi ancora asort poi arsort poi asort poi arsort poi..................... oppssss, forse sto facendo un giro di parole un pò.... mmmmmmmmm.... ...forse è meglio se provo a fare questa modifica, in realtà ciò che sto dicendo è più facile a farsi che a dirsi, le faccio sapere. Spero di darle buone notizie.
-
@Samyorn said:
Intendevo qualcosa del genere
[php]$order=$_GET['order'];
$desc=$_GET['desc'];
..........
.........
else
{
$query="SELECT id,nome,marca,prezzo FROM table ORDER BY ".$order;
if ($desc=="y")
{
echo " DESC";
}
}
..........
..........
print="
<td><a href="catalogo.php?order=prezzo";if ($order=="prezzo" && $desc=="y")
{
echo "&desc=y"; // risultato: catalogo.php?order=prezzo&desc=y
}
else
{
echo " " title="Ordinamento"><B>Prezzo</B></a></TD></TR>";
}[/php]Vedi se va, attendiamo buone notizie
Ciao Samyorn, ho modificato in questo modo:
[...................................]
$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 (isset($_GET['field'])) {
$campo = $_GET['field']; // == "id" ? "id" : "nome"
} else {
$campo = "id";
}
if (isset($_GET['order'])) {
$verso = $_GET['order'] == "desc" ? "DESC" : "ASC";
} else {
$verso = "ASC";
}
$query="SELECT * from prodotti ORDER BY {$campo} {$verso} ";
// seleziona tutti i record della tabella[....................................]
$AffectedRows [.......................]
$verso = ($verso == "ASC") ? "desc" : "asc";
echo"<table width="584" border="1">";
echo"<tr> ";
echo"<td width="342" bgcolor="#f5f5f5"><strong><a href='catalogo.php?field=id&order={$verso}'>id</a></strong></td>";
echo"<td width="342" bgcolor="#f5f5f5"><strong><a href='catalogo.php?field=nome&order={$verso}'>nome</a></strong></td>";
echo"<td width="342" bgcolor="#f5f5f5"><strong><a href='catalogo.php?field=marca&order={$verso}'>marca</a></strong></td>";
echo"<td width="342" bgcolor="#f5f5f5"><strong><a href='catalogo.php?field=prezzo&order={$verso}'>prezzo</a></strong></td>";
echo"</tr>";
echo"<tr>";[..............]
?>
...sembrava troppo bello! Per un attimo mi sono illuso d'esserci riuscito e invece è ritornato tutto come prima, cioè mi ordina sì in ord crescente e decrescente ma non esattamente come vorrei, cioè, se clicco due volte sul campo id o nome o marca o prezzo mi ordina correttamente da crescente in senso decrescente e viceversa, ma cliccando sul campo id o nome o marca o prezzo per una sola volta per ordinare in senso crescente e spostandomi poi su un altro campo per ordinarlo nuovamente in senso crescente mi ordina invece in senso decrescente come se fossi fermo sulla stessa colonna(questo credo a causa del primo if), si vede benissimo anche nell'url,era meglio come lo avevamo fatto prima!!! io vorrei che spostandomi da una colonna all'altra ogni primo click sia crescente e solo il secondo decrescente proprio come stavamo facendo, ma questa cosa comincia a sembrarmi quasi utopia... HELP ME SAMYORN! Non vorrei essere una seccatura ma sogno di realizzarla questa cosa. Ma che caos sto combinando? Dov'è che sbaglio... davvero non capisco...
-
Ciao Samyorn, ce l'ho fatta. Uffa, ancora mi lecco le ferite ma ho ottenuto il risultato sperato, ora mi manca solo la freccettina che farò muovere con qualche riga in javascript. Diciamo che l'unico problema che mi resta è quest'ultima, con il primo click la freccetta mi compare solo su quel campo e al passaggio del mouse genera l'evento su e giù, ma col secondo click la freccetta non vuole saperne di comparire... :p, e se compare lo fa su tutte le righe e oltretutto resta statica cioè l'evento javascript non va più. Se posso inviarle lo script in un messaggio privato... Ciao Samy
-
@4everyoung said:
...... ma col secondo click la freccetta non vuole saperne di comparire... :p, e se compare lo fa su tutte le righe e oltretutto resta statica cioè l'evento javascript non va più. Se posso inviarle lo script in un messaggio privato... Ciao Samy
condividiamo il problema con gli altriposta quì il pezzo di codice che interessa alla funzione, così vediamo se il problema sta nelle istruzioni PHP e nello Js (in tal caso posterai nella sezione adatta
-
<?php
$host='localhost';
$user='root';
$password='xxxxxxxx';
$database='db_name';
function change($ordine){
if($ordine == "ASC")
{return "DESC";}
else {return "ASC";}
}
$cambiasenso = "ASC";
if(isset($_GET['campo'])){
$campo = $_GET['campo'];
}
else $campo = "id";
if(isset($_GET['ordine'])){
$ordine = $_GET['ordine'];
}
else $ordine = "ASC";
$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");
$query="SELECT id,nome,marca,prezzo FROM table_name ORDER BY " . $campo . " " . $ordine;
$dbResult=mysql_query($query,$db);
$AffectedRows=mysql_affected_rows($db);
print "<html><head><title>Catalogo dei prodotti</title>
<SCRIPT language="JavaScript">
function movepic(img_name,img_src)
{
document[img_name].src=img_src;
}
</SCRIPT>
</head><body>";
print"<center><h1>Catalogo dei prodotti</h1></center>";
print "<div align="center">";
print"<TABLE border="1" width="60%"><TR>";
$onMouseOver1="onmouseover="movepic('button','img/s_desc.png')"";
$onMouseOut1="onmouseout="movepic('button','img/s_asc.png')"";
$image1=" <IMG NAME="button" SRC="img/s_asc.png" ALT="Crescente" border="0">";
$onMouseOver2="onmouseover="movepic('button','img/s_asc.png')"";
$onMouseOut2="onmouseout="movepic('button','img/s_desc.png')"";
$image2=" <IMG NAME="button" SRC="img/s_desc.png" ALT="Decrescente" border="0">";
$mouseover=($ordine=="ASC")?$onMouseOver1:$onMouseOver2;
$mouseout=($ordine=="ASC")?$onMouseOut1:$onMouseOut2;
if($ordine=="ASC")
{
$image=$image1;
}
elseif($ordine="DESC")
{
$image=$image2;
}
else
{
$image=$image1;
}
if($campo == "id")HO COMPLETATO SOLO IL PRIMO CAMPO PERCHE' SE COMPLETO ANCHE GLI NON VA PIU' BENE, CMQ CON QUESTO CAMPO ALMENO SI VEDE L'EFFETTO CHE VORREI OTTENERE
{
$cambiasenso = change($ordine);}
echo "<td><a {$mouseover} {$mouseout} href="prova.php?campo=id&ordine=" . $cambiasenso .""><b>id $image</b></a>";
$cambiasenso = "ASC";if($campo == "nome")
{
$cambiasenso = change($ordine);}
echo "<td><a href="prova.php?campo=nome&ordine=" . $cambiasenso . ""><b>nome</b></a>";
$cambiasenso = "ASC";if($campo == "marca")
{
$cambiasenso = change($ordine);}
echo "<td><a href="prova.php?campo=marca&ordine=" . $cambiasenso . ""><b>marca</b></a>";
$cambiasenso = "ASC";if($campo == "prezzo")
{
$cambiasenso = change($ordine);}
echo "<td><a href="prova.php?campo=prezzo&ordine=" . $cambiasenso . ""><b>prezzo</b>";
$cambiasenso = "ASC";for($index=0;$index<$AffectedRows;$index++)
{
$row=mysql_fetch_row($dbResult);[...........................]; # QUI E' TUTTO UGUALE ALLO SCRIPT CHE HO INVIATO UN PO' DI TEMPO FA
}
E QUI PURE
mysql_close($db);
?>Ok, eccolo a disposizione di tutti.
Allora, finalmente in questo modo se clicco una sola volta su una colonna, qualunque essa sia, mi ordina sempre in senso crescente, se mi fermo sulla colonna sul quale ho già cliccato una volta, e riclicco mi ordina in senso decrescente.Il problema ora è l'immagine, se provo
ad estentere l'effetto $mouseout/$mouseover sugli altri campi oltre che a passare l'immagine $image al campo, immagine che normalmente dovrebbe scomparire ogni volta che cambio colonna e comparire sulla colonna cliccata,se provo a fare ciò non va più ne l'effetto javascript ne la freccetta,anzi la freccia mi compare su tutti i campi e sono noiose e statiche. Col vecchio metodo compariva e scompariva seguendo la colonna cliccata e dava anche l'effetto, era il secondo click che non andava. Come posso fare per risolvere questo ennesimo problemino? E' una banalità lo so, ma voglio togliermi sto cruccio dalla testa... Spero di essermi spiegato bene con questo giro di parole. Grazie. Ciao Samy
-
Non sono molto ferrato in Js...domanda:
Ma perchè invece di usare Js non fai fare tutto al PHP, facendo apparire l'immagine che ti interessa sempre basandoti sul ASC o DESC che passi ai click?
-
...ed io non sono molto ferrato in php!!!!!
Ciao Samyorn, la parte di javascript<SCRIPT language="JavaScript">
function movepic(img_name,img_src)
{
document[img_name].src=img_src;
}
</SCRIPT>non è altro che una funzione per animare l'immagine della freccetta per farla andare su e giu come fa in phpMyAdmin al passaggio del mouse
$onMouseOver1="onmouseover="movepic('button','img/s_desc.png')"";
$onMouseOut1="onmouseout="movepic('button','img/s_asc.png')"";$image1=" <IMG NAME="button" SRC="img/s_asc.png" ALT="Crescente" border="0">";
$onMouseOver2="onmouseover="movepic('button','img/s_asc.png')"";
$onMouseOut2="onmouseout="movepic('button','img/s_desc.png')"";$image2=" <IMG NAME="button" SRC="img/s_desc.png" ALT="Decrescente" border="0">";
$onMouseOver1 e $onMouseOut1 oppure $onMouseOver2 e $onMouseOut2 non sono altro che l'evento che viene scatenato al passaggio del puntatore del mouse quando è sopra onMouseOver e ritorna come prima quando il mouse va via dall'immagine onMouseOut, il resto lo fa php...
-
ok, ma se clicchi la seconda volta non ti funziona??? oppure ho capito male :D?
-
si, giusto, se passo anche agli altri campi la variabile $image e l'evento mouse $onMouseOver/Out sia 1 che 2 come ho fatto per il campo id, succede che la freccia appare su tutti i campi :(): e oltretutto l'evento mouse non funziona più... che cosa strana ... possibile che non ci sia un rimedio? L'ordinamento però grazie a Dio funziona sempre e comunque. Manca solo questo e poi sarà perfetto
...mi aspetto buone notizie :D. Ciao Samy
-
uhm.....forse sarà la stanchezza ma non riesco a capire perché ti appare su tutti i campi.....vediamo se c'è qualcun'altro che puo' aiutarti
-
:(... spero ci sia... ciao samy...