• Super User

    Dubbio su rewrite

    Un ciao a tutti.

    Implementando per la prima volta un rewrite, mi sono imbattuto in un problema: gli spazi, in un titolo (ad esempio), se faccio il rewrite nella pagina da %20 a - tutto ok, solo che poi richiamando la pagina col trattino non la prende.

    Allora ho risolto aggiungendo un campo nel database con l'url tradotto, solo che, dato che i contenuti non li inserirò io, ma gli utenti, come posso far si che questo campo venga riempito nel modo corretto, o meglio, in automatico?

    Uso:

    if ($_GET['tabella']) {
    $result=mysql_query("SELECT * FROM tabella WHERE campourlrewrittato='".$_GET['tabella']."'", $conn);

    ecc...

    Vorrei, dato che sto sviluppando un cms, che il campo venga tradotto in automatico e senza ricorrere a questi mezzucci. Ho cercato in giro un sacco ma non ho trovato nulla.

    :ciauz:


  • Super User

    Ho risolto da me.

    $var = str_replace(" ","-",$_GET['tabella']);
    $result=mysql_query("SELECT * FROM mtf_band WHERE '$var'='".$_GET['tabella']."'", $conn);

    Solo che:
    Se inserisco pure l'id nella selezione tutto ok, quando invece voglio solo il nome, non funziona.

    Ora vi chiedo, e per favore, se vi è possibile, aiutatemi, come posso far si che funzioni col solo nome?
    (il codice sopra è errato)


  • User Attivo

    ciao il_rappo,
    nelle tue condizioni farei così:
    [php]
    //... controlli per il $_GET
    $nome_tabella=trim($_GET[tabella]);

    // array di elementi da cercare
    $cerco=array(' ','{','(','°',...);
    //array di elementi da sostituire
    $sostituisco=array('-',...);
    //esecuzione di str_replace
    $var=str_replace($cerco,$sostituisco,$_GET[tabella]);

    poi..
    cosa intendi per " Se inserisco pure l'id nella selezione tutto ok, quando invece voglio solo il nome, non funziona."
    puoi spiegarti meglio?


  • Super User

    @piccolosocrate said:

    poi..
    cosa intendi per " Se inserisco pure l'id nella selezione tutto ok, quando invece voglio solo il nome, non funziona."
    puoi spiegarti meglio?

    :ciauz: Ti ringrazio, ma principalmente mi serve solo il replace di %20 to -, il resto lo faccio prima 🙂

    Intendo che
    sito.com/prova-testo/ non funziona
    sito.com/prova-testo/1 funziona

    Finora ho sempre usato questo in caso di tabelle dove richiamavo anche l'id, ora che devo farlo senza mi sono impicciato 😞


  • Super User

    Non mi piace uppare ma al momento sono abbastanza incartato... 😞


  • User Attivo

    La butto lì... prova a modificare:

    [php] $result=mysql_query("SELECT * FROM mtf_band WHERE '$var'='".$_GET['tabella']."'", $conn);[/php]

    In:

    [php]echo $sql = "SELECT * FROM mtf_band WHERE '$var'='".$_GET['tabella']."'"
    $result=mysql_query($sql, $conn);
    echo mysql_error();[/php]
    Apri la pagina con url sito.com/prova-testo/ e con url sito.com/prova-testo/1. Guarda eventuali errori, o cerca di capire come mai con una query ottieni risultati e con un'altra no.


  • Super User

    @Fra_T said:

    Apri la pagina con url sito.com/prova-testo/ e con url sito.com/prova-testo/1. Guarda eventuali errori, o cerca di capire come mai con una query ottieni risultati e con un'altra no.

    Innanzitutto :ciauz:

    Allora, ho fatto come hai detto e questo mi è uscito:

    usando un articolo senza - (articolo):

    		SELECT * FROM tabella WHERE 'articolo'='articolo' solo che poi nel print da sempre "articolo" anche se per esempio apro "articolodue"
    

    In quella col trattino:

    		SELECT * FROM tabella WHERE 'prova-articolo'='prova-articolo', solo che anche qui nel print mi da il primo articolo come nome.
    

    Uff.. :mmm:


  • User Attivo

    allora 1 errore sembra nelle regole di rewrite 🙂

    il valore di $var da dove lo prendi?

    se vuoi provare anche con un echo '<pre>'; print_r($_GET); echo '</pre>'; così vediamo con la tua regola che cosa passi alla pagina, e se quello che passi è quello che vuoi passare


  • Super User

    @Fra_T said:

    il valore di $var da dove lo prendi?

    $var = str_replace(" ","-",$_GET['tabella']);

    Qui 😛

    @Fra_T said:

    se vuoi provare anche con un echo '<pre>'; print_r($_GET); echo '</pre>'; così vediamo con la tua regola che cosa passi alla pagina, e se quello che passi è quello che vuoi passare

    Allora, mi esce fuori questo:

    Array
    (
        [tabella] => nome
        [categoria] => 
        [nome] => 
    )
    

    Per l'articolo senza -, e

     Array
    (
        [tabella] => prova-articolo
        [categoria] => 
        [prova-articolo] => 
    ) 
    

  • User Attivo

    Ok, torniamo alla query, allora 😄

    Che vuol dire WHERE 'articolo' = 'articolo'? Dovrebbe essere WHERE nome_della_colonna_del_database = 'testo_da_cercare_in nome_della_colonna_del_database'... O non ho capito?

    nel tuo primo esempio, qualcosa tipo: WHERE campourlrewrittato = '$var'


  • Super User

    @Fra_T said:

    Ok, torniamo alla query, allora 😄

    Che vuol dire WHERE 'articolo' = 'articolo'? Dovrebbe essere WHERE nome_della_colonna_del_database = 'testo_da_cercare_in nome_della_colonna_del_database'... O non ho capito?

    nel tuo primo esempio, qualcosa tipo: WHERE campourlrewrittato = '$var'
    Allora, andiamo con esempi reali va 😄

    Se io ho "Vasco Rossi" nel database, questo dovrà essere trasformato in "vasco-rossi", quindi:

    $var (trasforma Vasco Rossi in vasco-rossi) = '".$_GET['band']."' (che assumerà valore di vasco-rossi, cioè l'url che digito)

    vasco-rossi = vasco-rossi, dove il primo è var, e il secondo è il campo della colonna del database.

    Sempre più incartati :mmm:


  • User Attivo

    è, ma così non può funzionare.

    vasco-rossi è il nome "sanizzato" della band Vasco Rossi.

    Nel database devi prevedere un campo dove salvare i nomi "sanizzati", il campo lo chimi ad esempio nome_band_sanizzato.

    La query deve essere WHERE nome_band_sanizzata = 'vasco-rossi'

    Altrimenti WHERE 'vasco-rossi' = 'vasco-rossi' non trova niente... dove cerca?


  • Super User

    @Fra_T said:

    è, ma così non può funzionare.

    vasco-rossi è il nome "sanizzato" della band Vasco Rossi.

    Nel database devi prevedere un campo dove salvare i nomi "sanizzati", il campo lo chimi ad esempio nome_band_sanizzato.

    La query deve essere WHERE nome_band_sanizzata = 'vasco-rossi'

    Altrimenti WHERE 'vasco-rossi' = 'vasco-rossi' non trova niente... dove cerca?

    Questo è il motivo di tutto questo bordello qui, l'evitare di usare un campo nel database col nome rewrittato. Perchè non sono io che inserisco i contenuti sul sito, c'è un pannello di controllo che fa tutto, e non credo che al momento dell'inserimento di un dato (vasco rossi) il php possa riuscire a prendere il titolo del form, rewrittarlo, e inviare la query tutta, col titolo giusto appena inserito e col campo rewrittato allo stesso tempo :arrabbiato:

    Il fatto è che tutto questo, se nella WHERE inserisco l'id funziona :arrabbiato:


  • Super User

    Ho risoltoooooooooo :yuppi:

    Ho dovuto usare le regex di apache però almeno ora funziona come dico io 😄

    RewriteRule ([-a-zA-Z]+)/$ ?tabella=$1

    nell'htaccess e:

    $campo = str_replace("-"," ",$_GET['tabella']);
    $result=mysql_query("SELECT * FROM tabella WHERE campo='$campo'", $conn);

    :fumato: