Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    risultati di ricerca linkabili, ma visualizza sempre l'ultimo id

    Ciao,
    ho un problema sulla selezione e visualizzazione dei risultati di una ricerca. Mi spiego meglio:
    ho questo script che ha il compito di effettuare una riucerca nel database e restituire a video dei risultati tabellati. All'estrema destra della colnna ho posizionato un pulsante, che quando premuto passa tramite POST l'id alla pagina visualizzaProfilo.php e quindi dovrebbe visualizzare il profilo di un utente.

    Questo è il codice che utilizzo adesso:

    Codice PHP:
    <?php
    if ($_POST['search']){
    if (!empty(
    $_POST['keywords'])) {
    $searchStr $_POST['keywords'];
    if (
    ereg("^[A-Za-z0-9_@']+$"$searchStr)) {

    mysql_connect($host,$user,$password)or die("non riesco a connettermi");
    mysql_select_db($database)or die("non riesco selezionare il database");

    print 
    "<center>Stai visualizzando i risultati della tua ricerca: [b]<font color=#FF0000> \"$searchStr\"</font>[/b]



    </center>"
    ;
    $keys explode(" "$searchStr);

    for (
    $x 0$x count($keys); $x++) {
    $querystr "SELECT * FROM tabella WHERE lower(ruolo1) like \"%$keys[$x]%\"";
    $result mysql_query($querystr);
    if (
    $frow mysql_fetch_array($result)) {
    $found true;
    echo 
    "<div align=\"center\">";
    echo 
    "<table border=\"0\" width=\"998\" cellspacing=\"4\" cellpadding=\"0\">
        <tr>
            <td width=\"100\" style=\"border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom: 1px solid #FFFFFF\" align=\"left\">[b]Nome[/b]</td>
            <td width=\"100\" style=\"border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom: 1px solid #FFFFFF\" align=\"left\">[b]Cognome[/b]</td>
            <td width=\"100\" style=\"border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom: 1px solid #FFFFFF\" align=\"left\">[b]Ruolo 1[/b]</td>
            <td width=\"100\" style=\"border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom: 1px solid #FFFFFF\" align=\"left\">[b]Ruolo 0 3[/b]</td>
            <td width=\"100\" style=\"border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom: 1px solid #FFFFFF\" align=\"left\">[b]Ruolo 2[/b]</td>
            <td width=\"30\" style=\"border-right-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom: 1px solid #FFFFFF\" align=\"right\"></td>
            <td width=\"30\" style=\"border-right-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom: 1px solid #FFFFFF\" align=\"right\"></td>
        </tr>"
    ;
    do {
    echo 
    "<tr>
            <td width=\"100\" align=\"left\">" 
    $frow["nome"] . "</td>
            <td width=\"100\" align=\"left\">" 
    $frow["cognome"] . "</td>
            <td width=\"100\" align=\"left\">" 
    $frow["ruolo1"] . "</td>
            <td width=\"100\" align=\"left\">" 
    $frow["ruolo0"] . "</td>
            <td width=\"100\" align=\"left\">" 
    $frow["ruolo2"] . "</td>
            <td width=\"30\" align=\"left\"></td>
            <td> <input type=\"hidden\" name=\"user_id\" size=\"1\" value="
    $frow["user_id"] ."><input type=\"submit\" value=\"Dettagli\"></td>

    </tr>"
    ;
    } while (
    $frow mysql_fetch_array($result));
    echo 
    "</table>"
    echo 
    "</div>";
    }
    }

    Il problema: se la ricerca restituisce più di un risultato ad esempio tre risultati, quando clicco sul bottone dettagli di uno dei tre risultati restituiti, mi visualizza sempre e solo l'ultimo risultato, anche se gli id che gli passa sono corretti perchè ho provato a stamparli a video e ciascun risultato ha il suo user_id corretto.

    Il mio dubbio è l'ultilizzo mysql_fetch_array perchè ho letto che restituisce sempre l'ultimo valore http://www.goldenweb.it/manuale_php/...etch-array.php

    Come posso rislvere questo problemone?

    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    mah... intanto cambia l'if seguito dal do while con un while (...) {...} e basta, direi, poi si vede...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2002
    residenza
    Umbria
    Messaggi
    46
    Mi sembra che il problema consista nel fatto che il campo hidden contentente l'id è ripetuto più volte nella pagina ma sempre con lo stesso nome, quindi la pagina che viene chiamata assume sempre l'ultimo valore.
    Hai queste possibilità:

    1- togli il campo hidden e passi l'id del record nel link alla pagina di dettaglio, in questo caso potresti anche togliere il pulsante e linkare direttamente i risultati

    2- sostituisci i pulsanti con una checkbox (che deve avere nomi variabili ricavati usando un contatore), racchiudi tutto in un form ed aggiungi un unico pulsante. L'action del form richiamerà ovviamente la pagina di dettaglio che dovrà scandire i valori ricevuti per trovare il record selezionato.

    3- (molto sconsigliata) prevedi un form per ogni riga con relativa action.

    Spero di essere stato chiaro, eventualmente contattami.
    Buon lavoro.
    sergio di sunelweb

  4. #4
    Vorrei provare entrambe le soluzioni:
    mah... intanto cambia l'if seguito dal do while con un while (...) {...} e basta, direi, poi si vede...
    mi puoi postare la modifica al mio script con la tua soluzione?

    togli il campo hidden e passi l'id del record nel link alla pagina di dettaglio, in questo caso potresti anche togliere il pulsante e linkare direttamente i risultati
    mi potresti postare il mio codice modificato con la tua soluzione??


    grazie mille

  5. #5
    Utente di HTML.it L'avatar di bode
    Registrato dal
    Feb 2007
    Messaggi
    304
    Codice PHP:
    <?php 
    if ($_POST['search']){ 
    if (!empty(
    $_POST['keywords'])) { 
    $searchStr $_POST['keywords']; 
    if (
    ereg("^[A-Za-z0-9_@']+$"$searchStr)) { 

    mysql_connect($host,$user,$password)or die("non riesco a connettermi"); 
    mysql_select_db($database)or die("non riesco selezionare il database"); 

    print 
    "<center>Stai visualizzando i risultati della tua ricerca: [b]<font color=#FF0000> \"$searchStr\"</font>[/b]



    </center>"

    $keys explode(" "$searchStr); 

    for (
    $x 0$x count($keys); $x++) { 
    $querystr "SELECT * FROM tabella WHERE lower(ruolo1) like \"%$keys[$x]%\""
    $result mysql_query($querystr); 
    while(
    $frow mysql_fetch_array($result)) { 
    $found true
    echo 
    "<div align=\"center\">"
    echo 
    "<table border=\"0\" width=\"998\" cellspacing=\"4\" cellpadding=\"0\"> 
        <tr> 
            <td width=\"100\" style=\"border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom: 1px solid #FFFFFF\" align=\"left\">[b]Nome[/b]</td> 
            <td width=\"100\" style=\"border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom: 1px solid #FFFFFF\" align=\"left\">[b]Cognome[/b]</td> 
            <td width=\"100\" style=\"border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom: 1px solid #FFFFFF\" align=\"left\">[b]Ruolo 1[/b]</td> 
            <td width=\"100\" style=\"border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom: 1px solid #FFFFFF\" align=\"left\">[b]Ruolo 0 3[/b]</td> 
            <td width=\"100\" style=\"border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom: 1px solid #FFFFFF\" align=\"left\">[b]Ruolo 2[/b]</td> 
            <td width=\"30\" style=\"border-right-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom: 1px solid #FFFFFF\" align=\"right\"></td> 
            <td width=\"30\" style=\"border-right-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom: 1px solid #FFFFFF\" align=\"right\"></td> 
        </tr>"

    do { 
    echo 
    "<tr> 
            <td width=\"100\" align=\"left\">" 
    $frow["nome"] . "</td> 
            <td width=\"100\" align=\"left\">" 
    $frow["cognome"] . "</td> 
            <td width=\"100\" align=\"left\">" 
    $frow["ruolo1"] . "</td> 
            <td width=\"100\" align=\"left\">" 
    $frow["ruolo0"] . "</td> 
            <td width=\"100\" align=\"left\">" 
    $frow["ruolo2"] . "</td> 
            <td width=\"30\" align=\"left\"></td> 
            <td> <input type=\"hidden\" name=\"user_id\" size=\"1\" value="
    $frow["user_id"] ."><input type=\"submit\" value=\"Dettagli\"></td> 

    </tr>"


    echo 
    "</table>";  
    echo 
    "</div>"

    }
    Comunque non vedo il form col method post che reindirizza ad un'altra pagina!

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    Per la mia osservazione...

    questo:
    Codice PHP:
    while ($frow mysql_fetch_array($result)) {
    echo 
    "<div align=\"center\">"
    echo 
    "<table border=\"0\" width=\"998\" cellspacing=\"4\" cellpadding=\"0\"> 
        <tr> 
            <td width=\"100\" style=\"border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom: 1px solid #FFFFFF\" align=\"left\">[b]Nome[/b]</td> 
            <td width=\"100\" style=\"border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom: 1px solid #FFFFFF\" align=\"left\">[b]Cognome[/b]</td> 
            <td width=\"100\" style=\"border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom: 1px solid #FFFFFF\" align=\"left\">[b]Ruolo 1[/b]</td> 
            <td width=\"100\" style=\"border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom: 1px solid #FFFFFF\" align=\"left\">[b]Ruolo 0 3[/b]</td> 
            <td width=\"100\" style=\"border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom: 1px solid #FFFFFF\" align=\"left\">[b]Ruolo 2[/b]</td> 
            <td width=\"30\" style=\"border-right-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom: 1px solid #FFFFFF\" align=\"right\"></td> 
            <td width=\"30\" style=\"border-right-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom: 1px solid #FFFFFF\" align=\"right\"></td> 
        </tr>"

    do { 
    echo 
    "<tr> 
            <td width=\"100\" align=\"left\">" 
    $frow["nome"] . "</td> 
            <td width=\"100\" align=\"left\">" 
    $frow["cognome"] . "</td> 
            <td width=\"100\" align=\"left\">" 
    $frow["ruolo1"] . "</td> 
            <td width=\"100\" align=\"left\">" 
    $frow["ruolo0"] . "</td> 
            <td width=\"100\" align=\"left\">" 
    $frow["ruolo2"] . "</td> 
            <td width=\"30\" align=\"left\"></td> 
            <td> <input type=\"hidden\" name=\"user_id\" size=\"1\" value="
    $frow["user_id"] ."><input type=\"submit\" value=\"Dettagli\"></td> 

    </tr>"

    } while (
    $frow mysql_fetch_array($result)); 
    diventerebbe:

    Codice PHP:
    if (mysql_num_rows($result)>0) {
    $found true;
    echo 
    "<div align=\"center\">"
    echo 
    "<table border=\"0\" width=\"998\" cellspacing=\"4\" cellpadding=\"0\"> 
        <tr> 
            <td width=\"100\" style=\"border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom: 1px solid #FFFFFF\" align=\"left\">[b]Nome[/b]</td> 
            <td width=\"100\" style=\"border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom: 1px solid #FFFFFF\" align=\"left\">[b]Cognome[/b]</td> 
            <td width=\"100\" style=\"border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom: 1px solid #FFFFFF\" align=\"left\">[b]Ruolo 1[/b]</td> 
            <td width=\"100\" style=\"border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom: 1px solid #FFFFFF\" align=\"left\">[b]Ruolo 0 3[/b]</td> 
            <td width=\"100\" style=\"border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom: 1px solid #FFFFFF\" align=\"left\">[b]Ruolo 2[/b]</td> 
            <td width=\"30\" style=\"border-right-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom: 1px solid #FFFFFF\" align=\"right\"></td> 
            <td width=\"30\" style=\"border-right-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom: 1px solid #FFFFFF\" align=\"right\"></td> 
        </tr>"

    while (
    $frow mysql_fetch_array($result)) {
    echo 
    "<tr> 
            <td width=\"100\" align=\"left\">" 
    $frow["nome"] . "</td> 
            <td width=\"100\" align=\"left\">" 
    $frow["cognome"] . "</td> 
            <td width=\"100\" align=\"left\">" 
    $frow["ruolo1"] . "</td> 
            <td width=\"100\" align=\"left\">" 
    $frow["ruolo0"] . "</td> 
            <td width=\"100\" align=\"left\">" 
    $frow["ruolo2"] . "</td> 
            <td width=\"30\" align=\"left\"></td> 
            <td> <input type=\"hidden\" name=\"user_id\" size=\"1\" value="
    $frow["user_id"] ."><input type=\"submit\" value=\"Dettagli\"></td> 
    </tr>"

    };
    // ... etc ...
    }; // fine "if" 

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2002
    residenza
    Umbria
    Messaggi
    46
    Codice PHP:
    $user_id $frow["id"
    echo 
    "<tr> 
            <td width=\"100\" align=\"left\"><a href='tuapagina.php?id=
    $user_id>" $frow["nome"] . "</a></td> 
            <td width=\"100\" align=\"left\"><a href='tuapagina.php?id=
    $user_id>" $frow["cognome"] . "</a></td> 
            <td width=\"100\" align=\"left\"><a href='tuapagina.php?id=
    $user_id>" $frow["ruolo1"] . "</a></td> 
            <td width=\"100\" align=\"left\"><a href='tuapagina.php?id=
    $user_id>" $frow["ruolo0"] . "</a></td> 
            <td width=\"100\" align=\"left\"><a href='tuapagina.php?id=
    $user_id>" $frow["ruolo2"] . "</a></td> 
            <td width=\"30\" align=\"left\"></td> 
          </tr>"

    Eventualmente puoi inserire una dicitura del tipo "Clickare sulle righe per visualizzare i dettagli".

    Ovviamente la pagine successiva riceve soltanto l'id del record e deve rileggere gli altri campi dal database,
    sergio di sunelweb

  8. #8
    Originariamente inviato da serun
    Codice PHP:
    $user_id $frow["id"
    echo 
    "<tr> 
            <td width=\"100\" align=\"left\"><a href='tuapagina.php?id=
    $user_id>" $frow["nome"] . "</a></td> 
            <td width=\"100\" align=\"left\"><a href='tuapagina.php?id=
    $user_id>" $frow["cognome"] . "</a></td> 
            <td width=\"100\" align=\"left\"><a href='tuapagina.php?id=
    $user_id>" $frow["ruolo1"] . "</a></td> 
            <td width=\"100\" align=\"left\"><a href='tuapagina.php?id=
    $user_id>" $frow["ruolo0"] . "</a></td> 
            <td width=\"100\" align=\"left\"><a href='tuapagina.php?id=
    $user_id>" $frow["ruolo2"] . "</a></td> 
            <td width=\"30\" align=\"left\"></td> 
          </tr>"

    Eventualmente puoi inserire una dicitura del tipo "Clickare sulle righe per visualizzare i dettagli".

    Ovviamente la pagine successiva riceve soltanto l'id del record e deve rileggere gli altri campi dal database,
    nella pagina successiva,ho una variabile che riceve l'id inviato tramite POST e in base all' id estraneo i dati dell' utente. posso lasciare tutto così com'è o devo modificare qualcosa?

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2002
    residenza
    Umbria
    Messaggi
    46
    POST funziona solo se i dati vengono da un form, in questo caso di tratta di collegamento ipertestuale, quindi devi usare $_GET['nomevariabile'].

    A meno che non usi una versione precedente alla 4.2, in tal caso le variabili del link te le trovi già esistenti nella pagina richiamata, cosa che era pericolosa ma (diciamo la verità) estremamente comoda.

    Comunque la spiegazione teorica la trovi qui:
    http://www.php.net/manual/en/languag...predefined.php
    sergio di sunelweb

  10. #10
    ho provato le tecniche mi avete postato, ma quella che trovo più semplice è di serun, passando i dati con method GET.


    Originariamente inviato da azocomposto
    nella pagina successiva,ho una variabile che riceve l'id inviato tramite POST e in base all' id estraneo i dati dell' utente. posso lasciare tutto così com'è o devo modificare qualcosa?
    Ottimo. Ho risolto apportando una piccola variazione all'esempio che mi hai postato, passando al link:
    Codice PHP:
    <td width=\"100\" align=\"left\"><a href='tuapagina.php?id=" $frow["user_id"] . ">" $frow["ruolo2"] . "</a></td> 
    Grazie a tutti

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.