Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 25
  1. #11
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306
    Quote Originariamente inviata da boots Visualizza il messaggio
    In questo caso io farei cos�:

    Codice PHP:
    <?php
      
    ....
      
    $data = array();
      while (
    $riga mysqli_fetch_array($rs)) {
        
    $data[]=$riga['textarea'];
      }
    ?>
    ....
    <p><?php echo $data[0?></p>
    .... da qualche altra parte
    <p><?php echo $data[2?></p>
    questo codice è stupendo per facilità ed efficacia....
    cioè che faccio??: vado a definire un array di appoggio $data, scorro tutte le righe della tabella del mio db e le salvo in una variabile di appoggio $riga che risulta essere un array associativo (a questo ci ero arrivato).
    Questo array associativo $riga, lo vado a salvare in un altro array $data perchïè ad ogni lettura di riga $riga viene sovrascritto , e così in questo modo posso andare a memorizzare in $data[] tutto quello che a me serve separatamente, e per questo posso utilizzarlo quando e come voglio



    Negli esercizi precedenti che ho fatto, andavo a visualizzare tutti i campi della riga della tabella
    e memorizzavo i vari campi in semplici variabili d'appoggio, che erano cmq legati al ciclo while.
    Sfruttando questa tecnica, posso andare ad usare diversi array di appoggio per poter così riempire a piacere la pagina..Se è così è fantastica
    Ultima modifica di Alfoxx; 18-09-2016 a 13:18

  2. #12
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    htmlentities e escape son due cose diverse. E poi htmlentities l'avevi messo tu all'inizio ed io l'ho lasciato

    Come ti ho detto l'escape "toglie" il significato ad i caratteri speciali usati da sql (fondamentalmente l'apice) ma non a quelli html:

    Codice PHP:
    $_POST['textarea'] = '<script>window.location="url_malevolo";</script>';
    $textarea mysqli_real_escape_string($link$textarea);
    mysqli_query($link"INSERT INTO ...."); 
    Ti viene salvato correttamente sul db. tuttavia se poi vai a riprenderlo

    Codice PHP:
    ...
    while (
    $riga mysqli_fetch_array($rs)) {
        echo 
    $riga['textarea'];
    }
    ... 
    il browser interpreterà il codice js (ma potrebbe essere anche quello html) facendo un redirect sul un url malevolo (Cross Site Scripting)
    Usando htmlentities i tag html vengono solo stampati e non interpretati. Ovviamente puoi salvarli già convertiti nel db

    Codice PHP:
    $mess=mysqli_real_escape_string($link,htmlentities($_POST['messaggio']));  
    .... 
    // nel recuperarli
    ....
    while (
    $riga mysqli_fetch_array($rs)) {
        echo 
    $riga['textarea'];

    oppure farlo al momento della stampa

    Codice PHP:
    $mess=mysqli_real_escape_string($link,$_POST['messaggio']);  
    .... 
    // nel recuperarli
    ....
    while (
    $riga mysqli_fetch_array($rs)) {
        echo 
    htmlentities($riga['textarea']);

    Ultima modifica di boots; 18-09-2016 a 13:13

  3. #13
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306
    ma quindi htmlentities non riesce a fare tutto, cioè converte solo i simboli che vengono usati in html, mentre invece per gli apici c'è bisogno di mysqli_real_escape_string pensavo che bastava solo htmlentities per fare tutto....non avevo capito la differenza tra apice e gli altri gli altri caratteri come < o >

    DEVO usarli entrambi per andar bene

  4. #14
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306
    Grazie mille, sembra che funzioni tutto. Ho modificato i codici, e viene memorizzato tutto in maniera corretta


    Mi potresti spigare quale è il vantaggio di una simile procedura?


    Quote Originariamente inviata da boots Visualizza il messaggio
    oppure, con i prepared statement

    Codice PHP:
    $mess=htmlentities($_POST['messaggio']));
    $stmt mysqli_prepare($link"INSERT INTO campi(textarea,checkbox,radio,select) VALUES (?,'-','-','-')");
    mysqli_stmt_bind_param($stmt"s"$mess); // la s sta per string
    mysqli_stmt_execute($stmt); // esegue la query

    // Con più parametri sarebbe

    $mess=htmlentities($_POST['messaggio']));
    $stmt mysqli_prepare($link"INSERT INTO campi(textarea,checkbox,radio,select) VALUES (?, ?, ?, ?)");
    mysqli_stmt_bind_param($stmt"ssss"$mess$checkbox$radio$select); 
    // la s sta per string. In questo caso tutti i paramentri sono string
    mysqli_stmt_execute($stmt); // esegue la query 
    "mysqli_prepare" prepara un'istruzione SQL per l'esecuzione ed ha come parametri l'identificativo di connessione e la query

    "mysqli_stmt_bind_param" associa variabili per una dichiarazione preparata come parametri , che vuol dire????

    ha come parametri di ingresso:
    il risultato dell'istruzione mysqli_prepare ,
    "ssss", indica la stringa, ma di cosa? o indica il tipo di dato?

    $mess, $checkbox, $radio, $select questi vengono ad essere ciò che vado a recuperare dal modulo web, immagino.
    Ultima modifica di Alfoxx; 18-09-2016 a 16:40

  5. #15
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Come ti ho detto con i prepared statements tu gli passi i dati. Ci pensa poi il driver a fare l'escaping e tutto ciò che serve per eseguire la query in modo corretto.
    "mysqli_stmt_bind_param" associa variabili per una dichiarazione preparata come parametri , che vuol dire????
    Se hai notato, nella query non ci sono i valori ma dei ?

    Codice PHP:
    $stmt mysqli_prepare($link"INSERT INTO campi(textarea,checkbox,radio,select) VALUES (?, ?, ?, ?)"); 
    Ovviamente bisogna sostituire i ? con i dati veri e propri. questo lo si fa con la mysqli_stmt_bind_param.
    Ci sono 4 punti interrogativi, quindi devi passargli 4 valori. Inoltre va specificato di che tipo sono (il secondo parametro)
    Codice PHP:
    mysqli_stmt_bind_param($stmt"ssss"$mess$checkbox$radio$select); 
    $mess prenderà il posto del promo ?, $checkbox del secondo e così via.
    "ssss": ogni lettera rappresenta il tipo del valore da inserire di un singolo parametro. la s sta per string. gli altri possibili valori sono i (intero), d(double), b(blob).
    Quindi se il campo radio fosse un intero, dovresti scrivere "ssis"

    ps: ovviamente anche $checkbox $radio e $select sono valori che vai a recuperare da qualche parte

  6. #16
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306
    ma quindi associa variabili per una dichiarazione preparata come parametri

    la dichiarazione preparata come parametri è quella con le ??
    mentre le variabili sono quelle messe come parametri a questa mysqli_stmt_bind_param
    codice:
    $stmt = mysqli_prepare($link, "INSERT INTO campi(textarea,checkbox,radio,select) VALUES (?, ?, ?, ?)");  
    i vari ? stanno ad indicare che ci andrà qualcosa....se ci fosse stato un solo messaggio predefinito (per esempio in "radio") avrei dovuto scrivere al posto di un ?, un trattino?

    e poi in questa
    codice:
    mysqli_stmt_bind_param($stmt, "ssss", $mess, $checkbox, $radio, $select); 
    avrei dovuto modificare il numero i s nel secondo parametro?
    e non scrivere il parametro relativo al campo radio?
    Ultima modifica di Alfoxx; 18-09-2016 a 17:47

  7. #17
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    esatto. i ? sono per i paramtri. Se hai dei valori fissi, non serve.
    Cambiando il numero dei parametri cambia anche il secondo parametro

  8. #18
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306
    Quote Originariamente inviata da boots Visualizza il messaggio
    esatto. i ? sono per i paramtri. Se hai dei valori fissi, non serve.
    Cambiando il numero dei parametri cambia anche il secondo parametro

    Andando in generale, se vado ad impostare nella costruzione della mia tabella un valore predefinito per tutti i campi colonna, e quindi il mio utente nella pagina non setta qualcosa, per esempio non setta il campo radio, io che faccio?
    in automatico il programma lasciato così come hai scritto dovrebbe capire
    codice:
    
    $stmt =mysqli_prepare($link,"INSERT INTO campi(textarea,checkbox,radio,select) VALUES (?, ?, ?, ?)");
    mysqli_stmt_bind_param($stmt, "ssss", $mess, $checkbox,$radio,$select); 
    mysqli_stmt_execute($stmt);

  9. #19
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    scusa, forse non ho capito. Vuoi sapere come comportarti in caso mancasse qualche parametro? tipo

    "INSERT INTO campi(textarea,checkbox,select) VALUES (?, ?, ?)"

  10. #20
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306
    si ,nel caso in cui l'utente non inserisse qualcosa

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 © 2026 vBulletin Solutions, Inc. All rights reserved.