Visualizzazione risultati 1 fino 28 di 28
Like Tree3Likes
  • 1 Post By mzanella
  • 2 Post By darbula

Discussione: Applicare mysqli_fetch_assoc a query già esistente

  1. #1
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    127

    Predefinito Applicare mysqli_fetch_assoc a query già esistente

    Salve,
    sto tentando inutilmente di inserire mysqli_fetch_assoc nella mia pagina funzionante con mysqli_fetch_array.
    Ho la tabella chiamata dizgeagri in un database, ho i campi "Parola", "Traduz", "note", ecc. Nel campo "Parola" posso avere per esempio, "secchio" con relativa traduzione, ma posso avere anche il campo "secchio per l'acqua" con relativa Traduzione, ecc.
    Vorrei che inserendo, nel form di ricerca di una pagina.php , la parola "secchio" mi desse come risultato
    "secchio" con relativa traduzione, poi nella seconda riga mi desse anche "secchio per l'acqua" con rel. trad.
    Mi hanno detto che non devo estrarre il termine di ricerca, ma quello che leggo dal db.
    Ora devo applicare mysqli_fetch_assoc, ho provato diverse soluzioni (qui https://www.w3schools.com/php/func_m...etch_assoc.asp)
    Questo il codice da modificare
    Codice PHP:
    <?php
    // Reads word from GET or POST
    $aParola = null;
    if (isset(
    $_REQUEST['Parola']) && !empty($_REQUEST['Parola'])) {
    $aParola = $_POST['Parola'];
    }
    else {
    die(
    "Manca la parola");
    }

    // Connects to database
    $connection = mysqli_connect("localhost", "xxxxxx", "my_xxxxxx", "my_xxxxxx");
    if (!
    $connection) {
    die(
    "Impossibile connettersi alla base di dati: " . mysqli_connect_error());
    }

    // Reads word from database
    $query = "SELECT * FROM dizgeagri WHERE Parola LIKE '$aParola%'";
    $result = mysqli_query($connection, $query);
    if (!
    $result) {
    die(
    "Errore nella query: " . mysqli_error($connection));
    }
    $row = mysqli_fetch_array($result);

    // Redirects if word is not in the database
    if (!$row) {
    header("location: diz_ines.html");
    exit;
    }

    // Altrimenti se la parola è disponibile
    $traduzione = $row['Traduz'];
    $note = $row['note'];
    $categoria = $row['categ'];
    $immagine = $row['img'];
    $immagine_2 = $row['img2'];

    $link = stristr($anote, 'vedi')
    ?
    'dizge_rich-dati.php?Parola=' . substr($anote, -strlen($anote) + 5)
    :
    null;


    // Closes connection to database
    mysqli_free_result($result);
    mysqli_close($connection);
    ?>

    <div style="font-family: book antiqua,times new roman; font-size:18px; color:#B00000">
    <b><?php echo $aParola; ?> </b>
    <span style="font-family:book antiqua,times new roman; font-size:15px; color:#000000"><?php echo $categoria; ?></span>
    <span style="font-size:18px; color:#000040">=<b><?php echo $traduzione; ?></b></span>
    </div>

    <font face='arial,sans-serif' size='2' color='#000000'>
    <?php echo ($link ? "<b><a href=\"$link\">$note</a></b>" : $note); ?>
    </font><br>

    <?php
    if (!is_null($immagine)) {
    echo
    '<img src="http://paolin.altervista.org/immdiz/' . $immagine . '" class="img-responsive" >';
    }
    if (!
    is_null($immagine_2)) {
    echo
    '&nbsp; <img src="http://paolin.altervista.org/immdiz/' . $immagine_2 . '" class="img-responsive">';
    }
    ?>
    Ho provato a sostituire
    Codice PHP:
    $row = mysqli_fetch_array($result);
    con
    Codice PHP:
    $row = mysqli_fetch_assoc($result);
    ma non riesco a stampare tutti irisultati di ciò che leggo da db, ma solo il singolo termine di ricerca.
    Spero d'essermi spiegato. Come posso fare?
    Grazie

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

    Predefinito

    Usare mysqli_fetch_array o mysqli_fetch_assoc in questo caso è indifferente, entrambi restituiscono la prossima riga dell'insieme dei risultati prodotto dall'interrogazione, sotto forma di vettore associativo. L'unica differenza è che mysqli_fetch_array restituisce la riga anche sotto forma di vettore con indici numerici.

    Quello che va cambiato è il modo in cui mostri i risultati, col codice attuale ne stai mostrando uno solo:
    Codice PHP:
    $query = "SELECT * FROM dizgeagri WHERE Parola LIKE '$aParola%'";
    $result = mysqli_query($connection, $query);
    if (!$result) {
    die("Errore nella query: " . mysqli_error($connection));
    }

    // ^^^ Fin qui va bene ^^^

    $words = [];
    foreach ($result as $row) {
    $words[] = [
    'parola' => $row['Parola'],
    'traduzione' => $row['Traduz'],
    'note' => $row['note'],
    'categoria' => $row['categ'],
    'immagine' => $row['img'],
    'immagine_2' => $row['img2'],
    'link' => stristr($anote, 'vedi')
    ? 'dizge_rich-dati.php?Parola=' . substr($anote, -strlen($anote) + 5)
    : null
    ];
    }

    // Closes connection to database
    mysqli_free_result($result);
    mysqli_close($connection);

    // Redirects if word is not in the database
    if (empty($words)) {
    header("location: diz_ines.html");
    exit;
    }

    // Shows translations
    foreach ($words as $word) {
    ?>
    <div style="font-family: book antiqua,times new roman; font-size:18px; color:#B00000">
    <b><?php echo $word['parola']; ?> </b>
    <span style="font-family:book antiqua,times new roman; font-size:15px; color:#000000"><?php echo $word['categoria']; ?></span>
    <span style="font-size:18px; color:#000040">=<b><?php echo $word['traduzione']; ?></b></span>
    </div>

    <font face='arial,sans-serif' size='2' color='#000000'>
    <?php echo ($word['link'] ? "<b><a href=\"" . $word['link'] . "\">" . $word['note'] . "</a></b>" : " . $word['note']); ?>
    </font><br>

    <?php
    if (!is_null(
    $word['immagine'])) {
    echo '<img src="
    http://paolin.altervista.org/immdiz/' . $word['immagine'] . '" class="img-responsive" >';
    }
    if (!
    is_null($word['immagine_2'])) {
    echo
    '&nbsp; <img src="http://paolin.altervista.org/immdiz/' . $word['immagine_2'] . '" class="img-responsive">';
    }
    <?
    php } ?>
    Come al solito occhio ad eventuali errori di battitura.

    I suggerimenti che do più spesso:


  3. #3
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    127

    Predefinito

    Grazie mille per rispondermi!

    Ho provato il codice che hai scritto, mi dice
    Parse error: syntax error, unexpected '[' in /membri/paolin/dizge_rich-dati-prova23.php on line 49
    dove riga 49 corrisponde a $words = [];

    Ho cercato di risolvere, mi sembra che in questa riga mancassero le virgolette doppie (in rosso)
    <?php echo ($word['link'] ? "<b><a href="" . $word['link'] . "">" . $word['note'] . "</a></b>" : " . $word['note']);" ?>

    Mi sembra d'aver trovato un <?php senza relativa chiusura ?> prima della riga
    if (!is_null($word['immagine']))

    ho corretto tutto ma mi da sempre lo stesso errore.

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

    Predefinito

    Ho cercato di risolvere, mi sembra che in questa riga mancassero le virgolette doppie (in rosso)
    ...
    Mi sembra d'aver trovato un <?php senza relativa chiusura ?> prima della riga
    Esatto, mi erano sfuggiti!

    Ho provato il codice che hai scritto, mi dice
    Parse error: syntax error, unexpected '[' in /membri/paolin/dizge_rich-dati-prova23.php on line 49
    dove riga 49 corrisponde a $words = [];
    Forse stai utilizzando un versione di PHP che non supporta la sintassi abbreviata per i vettori? Prova così:
    Codice PHP:
    $words = array();
    foreach (
    $result as $row) {
    $words[] = array(
    'parola' => $row['Parola'],
    'traduzione' => $row['Traduz'],
    'note' => $row['note'],
    'categoria' => $row['categ'],
    'immagine' => $row['img'],
    'immagine_2' => $row['img2'],
    'link' => stristr($anote, 'vedi')
    ?
    'dizge_rich-dati.php?Parola=' . substr($anote, -strlen($anote) + 5)
    :
    null
    );
    }

    I suggerimenti che do più spesso:


  5. #5
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    127

    Predefinito

    Ora mi dà
    Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /membri/paolin/dizge_rich-dati-prova23.php on line 84
    dove riga 84 corrisponde a
    <?php echo ($word['link'] ? "<b><a href="" . $word['link'] . "">" . $word['note'] . "</a></b>" : " . $word['note']);" ?>
    forse c'è una virgoletta doppia di troppo...

    Forse stai utilizzando un versione di PHP che non supporta la sintassi abbreviata per i vettori?
    Non so, sul pannello Database di Altervista c'è scritto Classe Standard e Versione MySQL: 5.6

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

    Predefinito

    forse c'è una virgoletta doppia di troppo...
    Sì, ho ricontrollato. Ora dovrebbe andare:
    Codice PHP:
    <font face='arial,sans-serif' size='2' color='#000000'>
    <?php echo ($word['link'] ? "<b><a href=\"" . $word['link'] . "\">" . $word['note'] . "</a></b>" : $word['note']); ?>
    </font><br>

    <?php
    if (!is_null($word['immagine'])) {
    echo
    '<img src="http://paolin.altervista.org/immdiz/' . $word['immagine'] . '" class="img-responsive" >';
    }
    if (!
    is_null($word['immagine_2'])) {
    echo
    '&nbsp; <img src="http://paolin.altervista.org/immdiz/' . $word['immagine_2'] . '" class="img-responsive">';
    }
    }
    // End foreach
    ?>
    Non so, sul pannello Database di Altervista c'è scritto Classe Standard e Versione MySQL: 5.6
    Quella è la versione del database, mi riferivo invece alla versione di PHP .
    Il fatto che, dopo aver modificato [] in array(), l'interprete non abbia più segnalato errore in quel punto è indice del fatto che la versione che stai utilizzando non supporta la nuova sintassi. Nessun problema: si usa quella vecchia, che è equivalente.

    I suggerimenti che do più spesso:


  7. #7
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    127

    Predefinito

    Ora dovrebbe andare:
    Grazie per la dedizione, non mi da più nessun errore... ma non mi visualizza nulla, a parte quattro = .
    Non funziona neanche il redirect in caso d'inserimento di una parola inesistente nel db.

    Puoi fare la prova inserendo una parola (inesistente o esistente come "secchio") nel form e premere "cerca" in questa pagina http://paolin.altervista.org/dizge_richform.php

    mi riferivo invece alla versione di PHP
    Ho controllato sul pannelo AV: ho PHP 5.3

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

    Predefinito

    Ho controllato sul pannelo AV: ho PHP 5.3
    È del 2009 questo spiega la faccenda dei vettori, così come gli altri errori. Nella 5.3 mysqli_result non implementava gli iteratori, quindi il codice va cambiato:

    Codice PHP:
    $words = array();
    while (
    $row = mysqli_fetch_assoc($result)) {
    $words[] = array(
    'parola' => $row['Parola'],
    'traduzione' => $row['Traduz'],
    'note' => $row['note'],
    'categoria' => $row['categ'],
    'immagine' => $row['img'],
    'immagine_2' => $row['img2'],
    'link' => stristr($anote, 'vedi')
    ?
    'dizge_rich-dati.php?Parola=' . substr($anote, -strlen($anote) + 5)
    :
    null
    );
    }
    paolin likes this.

    I suggerimenti che do più spesso:


  9. #9
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    127

    Thumbs up

    Evviva! Ce l'abbiam fatta!! Fa proprio quel che volevo.
    GRAZIE di cuore!!!
    Da solo non ce l'avrei mai fatta.

    È del 2009 questo spiega la faccenda dei vettori, così come gli altri errori.
    Si può cambiare, per esempio col php 5.6 che è quello di default, o c'è il rischio che le pagine col vecchio codice (tipo sql) non funzionino più?

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

    Predefinito

    Molto bene !

    Si può cambiare, per esempio col php 5.6 che è quello di default, o c'è il rischio che le pagine col vecchio codice (tipo sql) non funzionino più?
    Purtroppo è così, è possibile che le pagine non funzionino più.
    Prima o poi dovrai quasi certamente passare ad una versione più recente, per la 5.3 è già terminato il supporto. Vuol dire che non è più ufficialmente mantenuta e non ci saranno ulteriori aggiornamenti, e lo stesso vale per la 5.6 che è "scaduta" il 31/12/2018.
    Probabilmente ti conviene passare alla versione più recente, 7.x, lavorando sui file di una cartella per volta. Mi sembra che tramite htaccess si possa specificare quale versione di PHP usare per ogni cartella.

    Oppure lasci tutto così com'è e finché funziona... funziona .

    I suggerimenti che do più spesso:


  11. #11
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    127

    Predefinito

    Grazie per la spiegazione, molto chiara.

    Ho optato per una soluzione "all'italiana": per il resto del sito mantengo il php 5.3 finché funge (guestbook, login, conta-download, ecc.);
    mentre ho creato una nuova cartella per il lavoro di cui sopra e relativi files collegati, ed ho settato php 7 ; ho usato il primo codice che m'avevi scritto
    Codice PHP:
    $words = [];
    foreach (
    $result as $row) {
    $words[] = [ ...
    funziona tutto. Unico problema mi visualizza i caratteri accentati con un ? (prima, quando era in root, tutto ok con gli accenti), ho inserito nella <head>
    Codice HTML:
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    oppure
    Codice HTML:
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1252">
    ma nulla.
    Come posso risolvere?
    Grazie!

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

    Predefinito

    È il charset, prova con UTF-8:
    Codice HTML:
    <meta charset="UTF-8">
    oppure
    Codice HTML:
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    per HTML < 5.

    I suggerimenti che do più spesso:


  13. #13
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    127

    Predefinito

    Grazie per rispondermi.
    Ho provato con
    Codice HTML:
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    ma non visualizza i caratteri accentati (php 7).

    Per prova, ho creato un'altra cartella con php 5.6 (default), con gli stessi files (ho solo modificato
    Codice PHP:
    $words = array();
    while (
    $row = mysqli_fetch_assoc($result)) {
    $words[] = array(
    'parola' => $row['Parola'] ...
    ), con charset=UTF-8 dà lo stesso problema, se invece inserisco charset=windows-1252 NESSUN PROBLEMA di accenti!

    Nella Root NON dava nessun problema a prescindere dal charset (php 5.3).

    La tabella db ha Codifica caratteri utf8_bin nei primi due campi (Parola e Traduz), utf8_general_ci nei restanti quattro campi; Formato dinamico.

    Come posso risolvere? O devo rassegnarmi a lasciare php 5.6 o 5.3 ?
    Grazie.

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

    Predefinito

    Sembra che database e pagina parlino lingue diverse, possono esserci varie cause ma molto probabilmente bisognerà intervenire sulla base di dati. Questo post su StackOverflow sembra piuttosto esaustivo: How can character encoding be made correctly in both php and mysql database [duplicate]. Non mi è chiaro però se sistemando questa cosa poi ci siano problemi nelle pagine attuali .

    I suggerimenti che do più spesso:


  15. #15
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    127

    Predefinito

    Ho letto il post StackOverflow (escluso il link all'interno perché il pc non me l'apre, dice pericoloso).
    Nelle impostazioni generali pannello AV c'è Collation della connessione del server "uft8mb4_general_ci"....
    Codifica caratteri del server: UTF-8 Unicode (utf8) ...
    La tabella: Row statistics
    Formato dinamico, Codifica caratteri utf8_bin ...

    Per quel che capisco io mi sembra ok.
    Penso che imposterò php 5.6 nella nuova cartella,
    e <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1252"> nella head delle pagine: così mi esce tutti gli accenti giusti, anche da smartphone e perfino dal mio Nokia c2-01! D'altronde...

    Faccio un'ultimissima domanda: quando inserisco nel form la parola da cercare (esistente, scritta nel DB tutta minuscola), se la scrivo per esempio con l'iniziale Maiuscola, NON me la trova e mi dice INESISTENTE. Come posso fare affinché non faccia distinzione tra Maiuscolo e minuscolo?
    Grazie ancora per la disponibilità

  16. #16
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    127

    Predefinito

    Sto cercando di risolvere questo problema di trasformare una parola (eventualmente digitata in maiuscolo) tutta in minuscolo, poiché nel DB le parole son in minuscolo.

    Ho visto che in php esiste
    Codice PHP:
    strtolower
    ma non so come e dove inserirla affinché la parola maiuscola inserita nel form sia trasformata in minuscolo.

    Ho cercato qualche javascript che mi converta la parola subito appena inserita nel form di ricerca, m i viene scritta in minuscolo anche se la digito in maiuscolo, ma comunque mi dà errore quando faccio la ricerca.

    Mi potete dare quest'ultimo (forse banale) aiuto?
    Grazie

  17. #17
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    127

    Predefinito

    Concludo:
    l'unico sistema che ho trovato (affinché inserendo un parola maiuscola mi trovi la stessa ma minuscola nel db),
    è sostituire nel DB nel campo "Parola" la codifica caratteri da utf8_bin a utf8_general_ci.
    D'altronde...

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

    Predefinito

    Un'alternativa è specificare COLLATE UTF8_GENERAL_CI direttamente nella query:
    Codice:
    SELECT * FROM dizgeagri WHERE Parola COLLATE UTF8_GENERAL_CI LIKE '$aParola%'

    I suggerimenti che do più spesso:


  19. #19
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    127

    Predefinito

    Un'alternativa è specificare COLLATE UTF8_GENERAL_CI
    Grazie.

    Avevo scritto sopra che era l'ultima domanda, ma ne avrei un'altra ...

    In base alla ricerca fatta su DB tramite form, mi dà un risultato (Parola),
    come posso fare ad estrarre i record di prossimità rispetto alla Parola cercata?
    Ovvero, in angolo della pagina, vorrei che mi venissero stampati i 5 campi che precedono e i 5 che seguono la parola cercata.

    Una cosa come in questa pagina, sul lato destro http://www.zeneize.net/itze/parole.asp?Parola=gatto

    Ho cercato di arrangiarmi sul web (LIMIT, CONTAINS) ma non so da dove cominciare
    Grazie per rispondermi, se non è troppo complicata la domanda.

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

    Predefinito

    In effetti è un po' complicata. Ci sono almeno 3 modi diversi di intendere la domanda:
    1. presa alla lettera: data una parola, estrarre le righe "precedenti" e "successive" a quella che contiene la parola data; in un database i dati non sono ordinati, quindi non esistono i "precedenti" o i "successivi"; se usi una chiave intera puoi indurre un ordine, ma nel 90% dei casi non è quello che ti aspetti
    2. data una parola, estrarre le righe che contengono le parole precedenti e successive, come in un dizionario cartaceo; così facendo i vicini di "abate" risultano essere "abaco" e "abavo", anche se non hanno nulla a che fare con "abate"
    3. data una parola, estrarre le righe che contengono parole ad essa simili, per esempio "gattonare", "gattoni", "gattopardo"


    MySQL non supporta nessuna di queste operazioni nativamente.

    Scartando la prima ipotesi, per realizzare la seconda potresti estrarre le righe ordinate alfabeticamente e, tramite PHP, cercare quella che contiene la parola data e prendere le sue vicine. Questo però vuol dire leggere tutta la tabella con le parole, quindi non è molto efficiente.

    La terza è ancora più complessa, bisogna definire una funzione che dica quanto due parole sono simili, ovvero una metrica su stringhe (ce ne sono di più o meno standard:Distanza di Levenshtein, quella di Hamming, la Damerau-Levenshtein, quella di Jaro-Winkler e la MostFreqK, e le più generali come Smith-Waterman e Needleman-Wunsch), e usarla su tutte le parole della tabella in modo da ordinarle per similarità, quindi prendere le prime (tutto questo in PHP). Anche questo soffre del problema dell'efficienza.

    C'è una soluzione alternativa che risolve il problema dell'efficienza, al costo di quello dell'occupazione di memoria: creare una tabella aggiuntiva che rappresenti, per ogni parola, quali sono quelle a lei simili. Bastano due colonne che referenzino la tabella dizgeagri. In questo modo, per avere le parole simili, basta selezionare da questa tabella effettuando una JOIN con l'originale. La tabella però va prima popolata: per ogni parola devi indicare tu quali sono quelle a lei vicine. Puoi farlo a mano, o usando un codice basato su una delle funzioni dette sopra, o un misto delle due cose. Forse sotto questo punto di vista è l'alternativa che ti dà maggior flessibilità. Puoi anche aggiungere colonne addizionali che dicano, per esempio, quanto due parole vanno considerate simili. Per esempio "gattino" è più simile a "gatto" di quanto non lo sia "micio".
    Probabilmente quest'ultimo approccio è quello migliore nel tuo caso. Nello scenario peggiore il costo di memoria è O(n^2) sul numero delle parole, ma il caso medio (supponendo che ogni parola abbia una quantità limitata di parole a lei simili) si mantiene lineare.

    I suggerimenti che do più spesso:


  21. #21
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    127

    Predefinito

    ehm... forse è più complicata di quel che pensavo...
    Per me andrebbe bene la soluzione 2, ovvero estrarre quelle alfabeticamente vicine, a prescindere che abbiano o meno a che fare con la parola ricercata (come nell'esempio linkato sopra).

    C'è una soluzione alternativa...
    La vedo troppo complicata, soprattutto per le mie conoscenze...

    Penso che sarò costretto a rinunciare.

    GRAZIE molte per la chiara e specifica spiegazione

  22. #22
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    127

    Predefinito

    Purtroppo Non posso fare a meno di chiedere aiuto... c'ho studiato e ristudiato, sembra scritto correttamente ma NON funziona!
    Mi riferisco alla risposta #6 ed in particolare a questa riga
    Codice PHP:
    <?php echo ($word['link'] ? "<b><a href=\"" . $word['link'] . "\">" . $word['note'] . "</a></b>" : $word['note']); ?>
    mi scrive la 'nota' ma SENZA LINK.
    Non legge
    Codice PHP:
    'link' => stristr($anote, 'vedi')
    ?
    'rich-dati.php?Parola=' . substr($anote, -strlen($anote) + 5)
    :
    null
    Dove sta l'errore?
    Grazie

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

    Predefinito

    Ho riguardato i vecchi messaggi, mi sembra che la variabile $anote non sia definita. Prova con:
    Codice PHP:
    'link' => stristr($row['note'], 'vedi')
    ?
    'dizge_rich-dati.php?Parola=' . substr($row['note'], -strlen($row['note']) + 5)
    :
    null

    I suggerimenti che do più spesso:


  24. #24
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    127

    Predefinito

    Grazie per rispondermi.
    Funziona ma non fino in fondo...
    Mi spiego: inserisco la parola nel form (per esempio "boragine"), dò invio
    mi esce il link "vedi borragine" che dovrebbe portarmi alla nuova parola, invece poi mi legge l'intera tabella con tutti i campi, dall'inizio.
    Posto tutto il codice php del caso, tanto perché sia tutto chiaro
    Codice PHP:
    <?php
    // Reads word from GET or POST
    $aParola = null;
    if (isset(
    $_REQUEST['Parola']) && !empty($_REQUEST['Parola'])) {
    $aParola = $_POST['Parola'];
    }
    else {
    die(
    "Manca la parola, <b><a href='index.php'>Riprova</a></b>");
    }

    // Connects to database
    $connection = mysqli_connect("localhost", "xxxxxx", "my_xxxxxx", "my_xxxxxx");
    if (!
    $connection) {
    die(
    "Impossibile connettersi alla base di dati: " . mysqli_connect_error());
    }

    // Reads word from database
    $query = "SELECT * FROM dizgeagri WHERE Parola LIKE '$aParola%'";
    $result = mysqli_query($connection, $query);
    if (!
    $result) {
    die(
    "Errore nella query: " . mysqli_error($connection));
    }

    $words = array();
    while (
    $row = mysqli_fetch_assoc($result)) {
    $words[] = array(
    'parola' => $row['Parola'],
    'traduzione' => $row['Traduz'],
    'note' => $row['note'],
    'categoria' => $row['categ'],
    'immagine' => $row['img'],
    'immagine_2' => $row['img2'],
    'link' => stristr($row['note'], 'vedi')
    ?
    'rich-dati.php?Parola=' . substr($row['note'], -strlen($row['note']) + 5)
    :
    null
    );
    }

    // Closes connection to database
    mysqli_free_result($result);
    mysqli_close($connection);

    // Redirects if word is not in the database
    if (empty($words)) {
    header("location: diz_ines.html");
    exit;
    }

    // Shows translations (foreach)
    foreach ($words as $word) {
    ?>
    <div style="font-family: book antiqua,times new roman; font-size:18px; color:#B00000">
    <b><?php echo $word['parola']; ?> </b>
    <span style="font-family:book antiqua,times new roman; font-size:15px; color:#000000"><?php echo $word['categoria']; ?></span>
    <span style="font-size:18px; color:#000040">= <b><?php echo $word['traduzione']; ?></b></span>
    </div>

    <font face='arial,sans-serif' size='2' color='#000000'>
    <?php echo ($word['link'] ? "<b><a href=\"" . $word['link'] . "\">" . $word['note'] . "</a></b>" : $word['note']); ?>
    </font> ...
    La pagina risultato si chiama rich-dati.php
    Grazie.

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

    Predefinito

    Ma il link che ti viene mostrato è corretto? Nel senso, porta alla pagina che ti aspetti con i parametri GET che ti aspetti?
    In caso affermativo bisogna controllare la pagina rich-dati.php.

    I suggerimenti che do più spesso:


  26. #26
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    127

    Predefinito

    La pagina col form dove inserire la parola da cercare si chiama index.php
    La pagina che dà il risultato (e dove appare il link) si chiama rich-dati.php (che ha il codice postato sopra in #24).
    Il link appare correttamente e porta al seguente link rich-dati.php?Parola=borragine ma invece che mostrarmi la parola "borragine" mi mostra l'intera tabella dall'inizio. Il link è sempre rich-dati.php con l'aggiunta della ?Parola=xxxxxx, così era nella vecchia versione mySql... O deve essere una pagina diversa da rich-dati, magari con una "SELECT * FROM dizgeagri WHERE Parola='$aParola'" ?

    Se non mi fossi spiegato bene, ecco la pagina dove inserire la parola "boragine" (con una sola r) http://paolin.altervista.org/dizge/index.php
    Grazie

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

    Predefinito

    $aParola viene definita solo con il metodo Post usa $_REQUEST['Parola'] per utilizzare sia get, post, cookie altrimenti vale null.

    $aParola = null;
    if (!empty($_REQUEST['Parola'])) {
    $aParola = $_REQUEST['Parola'];
    }
    Ultima modifica di darbula : 24-03-2019 alle ore 03.01.58
    mzanella and paolin like this.

  28. #28
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    127

    Predefinito

    Ho sostituito $_POST['Parola']; con $_REQUEST['Parola']; e funziona! Anche il resto funziona.
    GRAZIE MOLTE!

Regole di scrittura

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