Visualizzazione risultati 1 fino 10 di 10

Discussione: Distribuire il risultato di una query con il PHP

  1. #1
    iocreo non è connesso Neofita
    Data registrazione
    21-03-2013
    Messaggi
    6

    Predefinito Distribuire il risultato di una query con il PHP

    Salve a tutti come da oggetto ho un problema con la distribuzione dei risultati di una query con php.
    In pratica interrogo il database ed estraggo i risultati in particolare sono Un immagine con sotto una scritta e un link ad una pagina. come distribuzione ho scelto di creare una tabella in modo da affiancare le immagini con sotto questa scritta. Ma vorrei sapere se c'è un modo per far si che massimo automaticamente dopo 4 risultati si passi alla riga di sotto della tabella. Perchè attualmente mi crea la tabella ma mi mette i risultati tutti sulla stessa riga causando quindi l'allargamento di tutta la pagina del mio sito.

    Come posso risolvere questo inconveniente

  2. #2
    Guest

    Predefinito

    Puoi postare il codice che usi?

  3. #3
    iocreo non è connesso Neofita
    Data registrazione
    21-03-2013
    Messaggi
    6

    Predefinito

    Ecco il codice php che ho inserito:

    <table border="0" bgcolor="#EFEFEF" width="85%" cellspacing="0" cellpadding="2">
    <tr>



    <?php

    // connettiamoci il nostro database

    $db_host = "localhost";
    $db_user = "iocreo";
    $db_password = "xxx";
    $db_name = "my_iocreo";

    //connetto il database

    $db = mysql_connect($db_host, $db_user, $db_password) or die ('Errore durante la connessione');
    mysql_select_db($db_name, $db) or die ('Errore durante la selezione del db');



    $sqlquery = "SELECT * FROM IoCreo WHERE TagRicerca LIKE '%%'";
    $result = mysql_query($sqlquery);
    $number = mysql_numrows($result);

    $i = 0;

    if ($number < 1) {
    print "<center><p>La ricerca non ha prodotto nessun risultato</p></center>";
    }
    else {
    while ($number > $i) {
    $Nome = mysql_result($result,$i,"Nome");
    $IMG= mysql_result($result,$i,"IMG");
    $Scr= mysql_result($result,$i,"Scr");


    // stampiamo i nostri dati


    echo "<td align="center" width="46%" valign="top">";
    echo "<a href=";
    echo "$Scr";
    echo ">";
    echo "$IMG";
    echo "</a>";
    echo "</td>";
    echo "<td align="center" width="53%">";
    echo "<span style="font-weight: 700">";
    echo "<font face="Verdana" style="font-size: 14pt">";
    echo "<a href=";
    echo "$Scr";
    echo ">";
    echo "$Nome";
    echo "</font>";
    echo "</a>";
    echo "</td>";




    $i++;
    }
    }
    ?>

    </tr>
    </table>
    Il risultato è disastroso come potete vedere qui

    Vorrei che dopo due risultati in automatico la tabella continuasse dopo. In pratica che inserisse la stringa "<TR>" dopo appuno due risultati.
    Ultima modifica di iocreo : 18-03-2016 alle ore 12.01.56

  4. #4
    Guest

    Predefinito

    In primo luogo togli la password dal codice e cambiala immediatamente (su AV puoi anche ometterla, funziona ugualmente)

    Poi, inizia a vedere le funzioni mysqli_ invece delle deprecate mysql_.
    Usando il tuo stesso codice, che è abbastanza contorto, puoi iniziale prima del ciclo una nuova riga ("<tr>"), impostare un contatore e fare una verifica ad ogni passaggio del ciclo while. Se il contatore è arrivato a 2 (o altro valore impostato) scrivi un "</tr>" per finire la riga e un "<tr>" per iniziarne un'altra, e riportare il contatore a zero.
    Ultima modifica di vplaza : 18-03-2016 alle ore 11.58.31

  5. #5
    iocreo non è connesso Neofita
    Data registrazione
    21-03-2013
    Messaggi
    6

    Predefinito

    Ok grazie ho provveduto per la password.
    Sono un neofita con php mica esiste qualche esempio di come impostare un contatore e tutto il resto.

    Grazie

  6. #6
    Guest

    Predefinito

    Qualcosa del genere

    Codice PHP:
    $contatore = 0;

    echo
    "<tr>";

    While (
    condizione) {
    echo
    "<td>cella (anche con $variabile)</td>";
    echo
    "<td>altra cella</td>";

    if (
    $contatore == 2){
    echo
    "</tr><tr>";
    $contatore = 0;
    }else{
    $contatore++;
    }
    }
    echo
    "</tr>";

  7. #7
    iocreo non è connesso Neofita
    Data registrazione
    21-03-2013
    Messaggi
    6

    Predefinito

    Grazie per la risposta.
    Ho provato con una cosa del genere:

    $sqlquery = "SELECT * FROM IoCreo WHERE TagRicerca LIKE '%Pasqua%'";
    $result = mysql_query($sqlquery);
    $number = mysql_numrows($result);


    $contatore = 0;

    if ($number < 1) {
    print "<center><p>La ricerca non ha prodotto nessun risultato</p></center>";
    }
    else {

    echo "<tr>";

    while ($number > $contatore) {
    $Nome = mysql_result($result,$contatore,"Nome");
    $IMG= mysql_result($result,$contatore,"IMG");
    $Scr= mysql_result($result,$contatore,"Scr");

    echo "<td align="center" width="46%" valign="top">";
    echo "<a href=";
    echo "$Scr";
    echo ">";
    echo "$IMG";
    echo "</a>";
    echo "</td>";
    echo "<td align="center" width="53%">";
    echo "<span style="font-weight: 700">";
    echo "<font face="Verdana" style="font-size: 14pt">";
    echo "<a href=";
    echo "$Scr";
    echo ">";
    echo "$Nome";
    echo "</font>";
    echo "</a>";
    echo "</td>";

    if ($contatore == 5){
    echo "</tr><tr>";
    $contatore = 0;
    }else{
    $contatore++;
    }
    }

    echo "</tr>";

    }
    ?>
    Ma mi da un loop infinito.
    dove sbaglio?

  8. #8
    Guest

    Predefinito

    Certo che ti succede se scrivi

    Codice PHP:
    while ($number > $contatore)
    La condizione di while dovevi lasciarla com'era, ed iserire all'interno del ciclo il controllo sul valore do $contatore

  9. #9
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Qui:
    Codice PHP:
    if ($contatore == 5) {
    echo
    "</tr><tr>";
    $contatore = 0;
    } else {
    $contatore++;
    }
    Con quel codice, ogni volta che $contatore raggiunge il valore 5, viene riportato a 0. Non raggiungerà mai valori maggiori di 5, in particolare non raggiungerà mai $number.

    Ti conviene usare l'operatore di modulo:
    Codice PHP:
    if ($contatore % 5 == 0) {
    echo
    "</tr><tr>";
    }
    $contatore++;
    Suggerirei anche l'uso di un ciclo for al posto di un while, benché sia solo una questione "estetica":
    Codice PHP:
    for ($i = 0; $i < number; $i++) {
    echo
    "<td align=\"center\" width=\"46%\" valign=\"top\">";
    // etc.
    echo "</td>";

    if (
    $i % 5 == 0) {
    echo
    "</tr><tr>";
    }
    }
    Attenzione anche all'uso dei doppi apici in:
    Codice PHP:
    echo "<td align="center" width="46%" valign="top">";
    che dovrebbero essere riscritti come:
    Codice PHP:
    echo "<td align=\"center\" width=\"46%\" valign=\"top\">";
    Lo stesso vale per altri frammenti di codice.
    Ultima modifica di mzanella : 18-03-2016 alle ore 15.07.13

  10. #10
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Codice PHP:
    $i = 0;
    $contatore = 0;

    echo
    "<tr>";

    While (
    $number > $i) {
    $Nome = mysql_result($result,$i,"Nome");
    $IMG= mysql_result($result,$i,"IMG");
    $Scr= mysql_result($result,$i,"Scr");
    echo
    "<td>cella (anche con $variabile)</td>";
    echo
    "<td>altra cella</td>";

    if (
    $contatore == 5){
    echo
    "</tr><tr>";
    $contatore = 0;
    }else{
    $contatore++;
    }
    $i++;
    }
    echo
    "</tr>";
    Oltre quello suggerito da maznella, se ho capito bene tu devi recuperare tutti i dati divenendoli per gruppi (in questo caso 5) allora devi tenere anche la variabile $i.
    Così il ciclo while si arresta quando $i sarà uguale a $number cioè $number = 10; maggiore di $i = 10; (il risultato di questa condizione sarà falso perché $number non è più maggiore di $i)
    ps. non ho verificato questo codice. haha
    Ultima modifica di darbula : 18-03-2016 alle ore 20.02.30

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •