• User

    Ciao Samiorn, innanzitutto grazie mille, allora piuttosto che ciclare con foreach i nomi delle colonne $myfield[...] mi sta dicendo che sarebbe opportuno scrivere direttamente i nomi dei campi associati al link giusto? Effettivamente ho notato che nel modo in cui l'ho fatto itero tutte volte la riga con i nomi dei campi quando me ne basta solo una al top della tabella... allora provo ad integrare il codice e poi le farò sapere se va tutto ok... ancora grazie. 🙂 Alla prossima.


  • Consiglio Direttivo

    Attendiamo buone notizie 😉


  • User

    Ciao Samyorn, ho fatto come mi diceva, cioè in questo modo:

    <?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");
    $query="SELECT * 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>";
    //link via url alla stessa pagina passando il campo secondo i quali dovrò ordinare la tabella
    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);
    print "<tr>\n";

    foreach ($row as $k => $v)
    {
    print("<td> $v ");

    if($k==0)
    {
    print "<br>";
    print "<a href="dettagli.php?id=$v">Dettagli</a>";
    print "<br>";
    }
    if($k==3)
    {
    print "<b> €</b>";
    }
    print("</td>");

    }
    print "</tr>\n";
    }
    print "</TABLE></div>";
    print "</body></html>";
    mysql_free_result($Result);
    mysql_close($db);
    ?>
    ...qualcosa funziona, però adesso succede che inizialmente non mi compare più la tabella con il suo contenuto ma solo la riga iniziale con i "nomi-link" delle colonne,
    sotto questa riga mi compare questo warning:
    "Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\catalogo.php on line 56"
    prima non usciva, però se nonostante ciò clicco su una delle intestazioni per ordinare la colonna allora il messaggio warning scompare e
    mi stampa a video correttamente la tabella con i dati del db e il meccanismo $order funziona ordinando in senso crescente che è una meraviglia...
    ma vorrei anche che cliccandoci nuovamente sopra mi ordini pure in senso decrescente.
    Click crescente, un altro click decrescente, e così via... però risolvendo anche questo problema del warning.
    Non sto capendo come mai mi compare, se tolgo $order[...], e ripristino la query come prima ritorna a stampare la tabella normalmente
    ma che posso fare per riuscire a creare questo benedetto pulsantino per l'ordinamento crescente/decrescente? 😢
    P.S.: per la persona che mi ha scritto il messaggio privato: per vedere tale bottone devi,accedere a phpMyAdmin tramite il classico URL localhost (io uso AppServ/Apache2.2, non uso Oracle ma MySQL)
    e scegli la prima voce "phpMyAdmin Database Manager Vers[...]",dopo aver effettuato user e pass scegliere nel menù a tendina il database, poi nell'altro menù la tabella,
    poi click sull'icona con la manina che indica con l'indice un foglio con le righe del db, e poi click sull'etichetta "Mostra",
    da qui si può vedere tutto il contenuto memorizzato nel db e se fai caso ogni nome di colonna è "cliccabile", provaci, possibile che non lo hai mai visto? Vorrà dire che non sei abbastanza curioso... :bigsmile:
    ha questo nome linkabile per l'ordinamento crescente e decrescente e cliccandolo scatena questo evento che vorrei tanto riuscire ad emulare...


  • Consiglio Direttivo

    Problema 1) Non si vede la tabella subito:
    perchè trovando $order vuoto la query va' in pappa, basta inserire un semplice if per fare in modo che se $order è vuota la query sia quella semplice senza l'ORDER BY.

    Problema 2) ascendente e discendente:
    Potresti risolvere facendo sempre riferimento all'$order per aggiungere al secondo click DESC alla fine della query
    Ovvero clicco su prezzo che mi passa il valore "prezzo" come $order, alla riesecuzione della pagina con il nuovo $order impostato aggiungo al link di "prezzo" (con un semplice if) un altro dato da passare se riclicco su prezzo:
    [html]<a href="pagina.php?order=prezzo&desc=y">Prezzo</a>[/html]
    come sempre una volta cliccato recupero anche la variabile desc e se uguale a y aggiungo a fine query DESC per l'ordinamento decrescente 😉

    Spero vada bene, ho buttato giù la prima cosa che mi è venuta in mente 😉

    :ciauz:


  • User

    Ciao Samyorn, come sempre mi trasmette ottimismo 🙂 , provo a farlo, le farò sapere l'esito... :ciauz: A rigrazie. Ciaooooo


  • User

    Ciao Samyorn, infatti nell' if avevo scritto direttamente if ($order) { //query }... senza verificare la condizione se if ($order=="") { //query}, che testolina che ho!! :rollo: 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.


  • Consiglio Direttivo

    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 :ciauz:


  • User

    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.... :arrabbiato: poi ancora asort poi arsort poi asort poi arsort poi..................... oppssss, forse sto facendo un giro di parole un pò.... mmmmmmmmm.... :dull: ...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.


  • User

    @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 :ciauz:

    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... :gtsad:


  • User

    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


  • Consiglio Direttivo

    @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 altri 😉

    posta 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 :2:
    :ciauz:


  • User

    <?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 :ciauz:


  • Consiglio Direttivo

    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?


  • User

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


  • Consiglio Direttivo

    ok, ma se clicchi la seconda volta non ti funziona??? oppure ho capito male :D?


  • User

    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 :ciauz:


  • Consiglio Direttivo

    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 😉


  • User

    :(... spero ci sia... :ciauz: ciao samy...