Pagina 2 di 7 PrimoPrimo 1234 ... UltimoUltimo
Visualizzazione risultati 31 fino 60 di 184
Like Tree7Likes

Discussione: Login PHP non indirizza alla pagina privata

  1. #31
    relettronico non è connesso Utente giovane
    Data registrazione
    03-01-2016
    Messaggi
    97

    Predefinito

    Per qualche giorno ha inserito i dati ma ora ha iniziato ad inserire nel db righe vuote ma io non ho toccato il codice ha fatto tutto da solo. Ho provato a ricontrollare tutti i codici e mi sembrano corretti e il method è POST

  2. #32
    relettronico non è connesso Utente giovane
    Data registrazione
    03-01-2016
    Messaggi
    97

    Predefinito

    Il problema sono ancora le variabili della query che non sono definita ma l'html e il php sono corretti perché ho provato anche con dei siti online per verificarli e non mi dava errori di sintassi e il method è POST quindi non saprei dove trovare altri errori

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

    Predefinito

    PHP ha molti difetti, ma è ancora un linguaggio deterministico: se osservi dei comportamenti non corretti significa che ci sono degli errori nel codice, per quanto questo possa risultare frustrante o fastidioso.

    Il fatto che non ci siano errori di sintassi è una condizione necessaria ma non sufficiente per una dimostrazione di correttezza. Prendi questo programma:
    Codice PHP:
    <?php
    echo "No syntax errors";
    ?>
    è sintatticamente corretto, ma non realizza la funzione di cui tu hai bisogno, dunque è semanticamente errato. La verifica di questo tipo di proprietà è un procedimento piuttosto complicato, dubito che i siti di cui parli siano in grado di realizzarla.

    Il var_dump ti dà qualche informazione utile?
    Se proprio non sai da dove partire, mostra il codice aggiornato.

    I suggerimenti che do più spesso:


  4. #34
    relettronico non è connesso Utente giovane
    Data registrazione
    03-01-2016
    Messaggi
    97

    Predefinito

    questo è quello che ricevo dal var_dump e da error_reporting
    array(7) {
    ["doc_ass"]=>
    string(3) "ddd"
    ["data"]=>
    string(2) "dd"
    ["ora"]=>
    string(2) "dd"
    ["classe"]=>
    string(2) "dd"
    ["materia"]=>
    string(2) "dd"
    ["doc_sos"]=>
    string(2) "dd"
    ["conferma"]=>
    string(1) "0"
    }


    Notice: Undefined variable: doc_ass in /membri/relettronico/gestionesupplenze/input.php on line 19



    Notice: Undefined variable: data in /membri/relettronico/gestionesupplenze/input.php on line 19



    Notice: Undefined variable: ora in /membri/relettronico/gestionesupplenze/input.php on line 19



    Notice: Undefined variable: classe in /membri/relettronico/gestionesupplenze/input.php on line 19



    Notice: Undefined variable: materia in /membri/relettronico/gestionesupplenze/input.php on line 19



    Notice: Undefined variable: doc_sos in /membri/relettronico/gestionesupplenze/input.php on line 19



    Notice: Undefined variable: conferma in /membri/relettronico/gestionesupplenze/input.php on line 19



    Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in /membri/relettronico/gestionesupplenze/input.php on line 23

    E questo è lo script aggiornato
    Codice PHP:
    <?php
    error_reporting
    (E_ALL);
    define('DBHOST', 'localhost');
    define('DBUSER', 'relettronico');
    define('DBPASS', '');
    define('DBNAME', 'my_relettronico');

    // Connessione alla base di dati
    $conn = mysqli_connect(DBHOST,DBUSER,DBPASS,DBNAME);
    if (!
    $conn) {
    die(
    "Connection failed : " . mysqli_connect_error);
    }

    echo
    "<pre>";
    var_dump($_POST);
    echo
    "<pre>";


    $result =mysqli_query($conn, "INSERT INTO salva_supplenze (doc_ass, data, ora, classe, materia, doc_sos, conferma ) VALUES ('$doc_ass', '$data', '$ora', '$classe', '$materia', '$doc_sos', '$conferma')");
    if (
    $result === false) {
    die(
    mysqli_error($conn));
    }
    if(
    mysqli_num_rows(($result) === 1)) {
    header("Location:inserimentosupplenze.php");
    }

    ?>
    Spero di trovare una soluzione... Grazie mille...

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

    Predefinito

    È piuttosto chiaro, nessuna delle variabili che usi nella query è stata precedentemente inizializzata.

    Ti manca come minimo un pezzo:
    Codice PHP:
    $doc_ass = $_POST['doc_ass'];
    $data = $_POST['data'];
    $ora = $_POST['ora'];
    $classe = $_POST['classe'];
    $materia = $_POST['materia'];
    $doc_sos = $_POST['doc_sos'];
    $conferma = $_POST['conferma'];
    Mancano anche tutti i controlli del caso, ma quello è senz'altro l'ostacolo più grosso...
    testwp85 likes this.

    I suggerimenti che do più spesso:


  6. #36
    Guest

    Predefinito

    Prova

    Codice:
    <?php 
    error_reporting(E_ALL); 
    define('DBHOST', 'localhost');  
    define('DBUSER', 'relettronico');  
    define('DBPASS', '');  
    define('DBNAME', 'my_relettronico');  
    
    // Connessione alla base di dati 
    $conn = new mysqli(DBHOST,DBUSER,DBPASS,DBNAME);  
    if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error);} 
    
    echo "<pre>";  
    var_dump($_POST);  
    echo "<pre>";  
    
    if(isset($_POST['invia_dati']){
    
    $doc_ass0 = filter_var($_POST['doc_ass'], FILTER_SANITIZE_STRING);
    $data0 = filter_var($_POST['data'], FILTER_SANITIZE_STRING);
    $ora0 = filter_var($_POST['ora'], FILTER_SANITIZE_STRING);
    $classe0 = filter_var($_POST['classe'], FILTER_SANITIZE_STRING);
    $materia0 = filter_var($_POST['materia'], FILTER_SANITIZE_STRING);
    $doc_sos0 = filter_var($_POST['doc_sos'], FILTER_SANITIZE_STRING);
    $conferma0 = filter_var($_POST['conferma'], FILTER_SANITIZE_STRING);
    
    $doc_ass = mysqli_real_escape_string($conn, $doc_ass0);
    $data = mysqli_real_escape_string($conn, $data0);
    $ora = mysqli_real_escape_string($conn, $ora0);
    $classe = mysqli_real_escape_string($conn, $classe0);
    $materia = mysqli_real_escape_string($conn, $materia0);
    $doc_sos = mysqli_real_escape_string($conn, $doc_sos0);
    $conferma = mysqli_real_escape_string($conn, $conferma0);
    $query = "INSERT INTO salva_supplenze (doc_ass, data, ora, classe, materia, doc_sos, conferma ) 
                                   VALUES (?, ?, ?, ?, ?, ?, ?)";
    $preparedSTM = $conn->prepare($query);	
    $preparedSTM->bind_param("sssssss", $doc_ass, $data, $ora, $classe, $materia, $doc_sos, $conferma);
    $preparedSTM->execute;
    	                           } 
    ?>
    mettendo
    <form method="POST" action="inserimentosupplenze.php">

    e il pulsante

    <input type="submit" name="invia_dati" value="INSERISCI">
    Ultima modifica di testwp85 : 19-07-2018 alle ore 21.00.52

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

    Predefinito

    Citazione Originalmente inviato da testwp85 Visualizza messaggio
    Prova

    Codice:
    <?php 
    error_reporting(E_ALL); 
    define('DBHOST', 'localhost');  
    define('DBUSER', 'relettronico');  
    define('DBPASS', '');  
    define('DBNAME', 'my_relettronico');  
    
    // Connessione alla base di dati 
    $conn = mysqli_connect(DBHOST,DBUSER,DBPASS,DBNAME);  
    if (!$conn) { 
        die("Connection failed : " . mysqli_connect_error); 
    } 
    
    echo "<pre>";  
    var_dump($_POST);  
    echo "<pre>";  
    
    if(isset($_POST['invia_dati']){
    
    ...
    
    $query = "INSERT INTO salva_supplenze (doc_ass, data, ora, classe, materia, doc_sos, conferma ) 
                                   VALUES (?, ?, ?, ?, ?, ?, ?)";
    $preparedSTM = $conn->prepare($query);	
    $preparedSTM->bind_param("sssssss", $doc_ass, $data, $ora, $classe, $materia, $doc_sos, $conferma);
    $preparedSTM->execute;
    	                           } 
    ?>
    Stai mescolando la versione procedurale di mysqli con quella ad oggetti: non va bene.

    Se usi i prepared statement (che è un'ottima cosa) non serve a nulla usare anche mysqli_real_escape_string, né filter_var: sono ridondanti.

    Bisognerebbe piuttosto verificare se i parametri di interesse sono stati inviati (con isset) e che non siano "nulli" (con empty), ma questo al momento è in secondo piano rispetto al problema principale, ovvero la mancata inizializzazione delle variabili usate nella query.
    testwp85 likes this.

  8. #38
    Guest

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Stai mescolando la versione procedurale di mysqli con quella ad oggetti: non va bene.

    Se usi i prepared statement (che è un'ottima cosa) non serve a nulla usare anche mysqli_real_escape_string, né filter_var: sono ridondanti.

    Bisognerebbe piuttosto verificare se i parametri di interesse sono stati inviati (con isset) e che non siano "nulli" (con empty), ma questo al momento è in secondo piano rispetto al problema principale, ovvero la mancata inizializzazione delle variabili usate nella query.
    Un attimo, magari sto sbagliando alla grande ed è meglio chiarire la cosa:

    Si, la $conn è vero, si tratta della versione procedurale e devo aggiornarla con quella a oggetti!
    (anche se funziona ahahahah :p )

    Ma per quanto riguarda il filter_var + l'escape io lo faccio sempre, perchè con filter_var vai a validare una stringa e <div> blabla </div> è una stringa a tutti gli effetti, mentre con l'escape vai a eliminare i marcatori html e i vari caratteri non validi, tipo ' " .

    In più, che io sappia, alcuni attacchi riescono ad andare OLTRE il filter_var, quindi alla fine con l'escape hai un livello extra di protezione.
    E' un pò come quando si fà l'upload dei file:
    controllare il mime và bene, ma poi serve un'altro livello di protezione e quindi controllare le estensioni e/o ricreare le immagini togliendo eventuali script nelle exif.

    Magari sbaglio, ma a me è stato detto così.
    Per questo chiedo, così correggo subito il tiro :D
    Ultima modifica di testwp85 : 19-07-2018 alle ore 20.39.13

  9. #39
    relettronico non è connesso Utente giovane
    Data registrazione
    03-01-2016
    Messaggi
    97

    Predefinito

    Ma dovrei provare questo script?...
    Ora il mio inserisce i dati nel db ma persiste l'errore del mysqli_num_rows dicendo che do un valore booleano...

  10. #40
    Guest

    Predefinito

    Citazione Originalmente inviato da relettronico Visualizza messaggio
    Ma dovrei provare questo script?...
    Ora il mio inserisce i dati nel db ma persiste l'errore del mysqli_num_rows dicendo che do un valore booleano...
    Dovrebbe funzionare anche se c'è roba "extra"( anche se penso non lo sia in quanto ci sono varie tipologie di attacco e alcune, come scrivevo vanno oltre il filter_var, quindi avere più livelli è meglio).

    Fatti una copia del form e una copia dell'uploader e provalo, male non fà ;)

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

    Predefinito

    mysqli_real_escape_string, o qualunque altro meccanismo di escaping è superfluo, i prepared statement eseguono quest'operazione automaticamente (PHP: Is mysql_real_escape_string sufficient for cleaning user input?, Why would a prepare statement be safer?, 5 Common Mistakes PHP Developers Make when Writing SQL). Usarlo non è sbagliato, solo inutile

    Per quanto riguarda filter_var serve qualche precisazione in più. In base ai Sanitize filters opzionali può fare diverse cose. Il comportamento standard comprende l'escaping degli apici e la rimozione dei tag.
    Il primo è inutile: lo fanno già i prepared statement automaticamente.
    Il secondo... dipende! In generale è perfettamente legittimo volere dei tag HTML all'interno della base di dati. Ad esempio CKEditor è un editor WYSIWYG che genera del codice HTML, generalmente ha senso usarlo per la pubblicazione di contenuti come articoli: in quel caso è essenziale non filtrare i tag.
    Quindi finché l'autore non decide esplicitamente di non volere tag HTML nel proprio database, rimuoverli è da considerarsi sbagliato.

    Altra osservazione collegata: non tutti i campi sono per forza stringhe. Il $_POST['ora'] potrebbe essere benissimo un intero, in quel caso non è FILTER_SANITIZE_STRING il filtro da usare, bensì FILTER_SANITIZE_NUMBER_INT. Anche questa però è un'assunzione che non va fatta: può essere che l'autore voglia accettare orari come 4:00 PM.

    Ora il mio inserisce i dati nel db ma persiste l'errore del mysqli_num_rows dicendo che do un valore booleano...
    C'è una coppia di parentesi di troppo:
    Codice PHP:
    if (mysqli_num_rows($result) === 1) {
    header("Location:inserimentosupplenze.php");
    }
    Fatti una copia del form e una copia dell'uploader e provalo, male non fà ;)
    ... non proprio!
    Questo tipo di approccio si basa sull'intuizione che un software funzioni quasi per caso: se non va si aggiungono o tolgono pezzi finché magicamente non funziona (cargo cult programming). A volte è meglio fermarsi a riflettere sul codice che ci sta scrivendo. Se una linea di codice è giustificata da "mi hanno detto che bisogna fare così", molto probabilmente c'è qualcosa che non va.
    testwp85 likes this.

    I suggerimenti che do più spesso:


  12. #42
    relettronico non è connesso Utente giovane
    Data registrazione
    03-01-2016
    Messaggi
    97

    Predefinito

    Non funziona neanche togliendo una copia di parentesi e ho tolto anche un uguale dei tre ma l'errore persiste anche se l'inserimento funziona

  13. #43
    Guest

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    mysqli_real_escape_string, o qualunque altro meccanismo di escaping è superfluo, i prepared statement eseguono quest'operazione automaticamente (PHP: Is mysql_real_escape_string sufficient for cleaning user input?, Why would a prepare statement be safer?, 5 Common Mistakes PHP Developers Make when Writing SQL). Usarlo non è sbagliato, solo inutile

    Per quanto riguarda filter_var serve qualche precisazione in più. In base ai Sanitize filters opzionali può fare diverse cose. Il comportamento standard comprende l'escaping degli apici e la rimozione dei tag.
    Il primo è inutile: lo fanno già i prepared statement automaticamente.
    Il secondo... dipende! In generale è perfettamente legittimo volere dei tag HTML all'interno della base di dati. Ad esempio CKEditor è un editor WYSIWYG che genera del codice HTML, generalmente ha senso usarlo per la pubblicazione di contenuti come articoli: in quel caso è essenziale non filtrare i tag.
    Quindi finché l'autore non decide esplicitamente di non volere tag HTML nel proprio database, rimuoverli è da considerarsi sbagliato.

    Altra osservazione collegata: non tutti i campi sono per forza stringhe. Il $_POST['ora'] potrebbe essere benissimo un intero, in quel caso non è FILTER_SANITIZE_STRING il filtro da usare, bensì FILTER_SANITIZE_NUMBER_INT. Anche questa però è un'assunzione che non va fatta: può essere che l'autore voglia accettare orari come 4:00 PM.


    C'è una coppia di parentesi di troppo:
    Codice PHP:
    if (mysqli_num_rows($result) === 1) {
    header("Location:inserimentosupplenze.php");
    }

    ... non proprio!
    Questo tipo di approccio si basa sull'intuizione che un software funzioni quasi per caso: se non va si aggiungono o tolgono pezzi finché magicamente non funziona (cargo cult programming). A volte è meglio fermarsi a riflettere sul codice che ci sta scrivendo. Se una linea di codice è giustificata da "mi hanno detto che bisogna fare così", molto probabilmente c'è qualcosa che non va.
    Perfetto!
    Rifletterò su quanto hai scritto

    Comunque si, chiaro, sono partito dal concetto che sono tutte stringhe e ovviamente non lo sono, ma visto che php riconosce le variabili io di solito faccio così e se poi in un database metto "1" e faccio il fetch, poi posso sommarlo perchè appunto lo riconosce come intero.

    Per quanto riguarda il codice html, non sono molto d'accordo. Quando hai un campo <form> e ti chiedono il nome, NESSUNO si aspetta un <p>myname</p> come imput, è piuttosto assurdo

    Che però vale solo in questo caso specifico.
    mzanella likes this.

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

    Predefinito

    Per quanto riguarda il codice html, non sono molto d'accordo. Quando hai un campo <form> e ti chiedono il nome, NESSUNO si aspetta un <p>myname</p> come imput, è piuttosto assurdo
    In generale mi trovi d'accordo
    Allo stesso tempo non voglio proporre una soluzione solo perché a me l'alternativa sembra assurda

    Non funziona neanche togliendo una copia di parentesi e ho tolto anche un uguale dei tre ma l'errore persiste anche se l'inserimento funziona
    Ho riletto con più calma il codice:
    Codice PHP:
    if(mysqli_num_rows(($result) === 1)) {
    header("Location:inserimentosupplenze.php");
    }
    mysqli_num_rows serve per "contare" quante righe ci sono in un record set, ovvero nel risultato di una SELECT. Non ha senso chiamarlo sul risultato di un'INSERT.
    Probabilmente intendevi effettuare la redirezione solo se l'inserimento ha successo: in questo caso puoi scrivere direttamente:
    Codice PHP:
    if ($result === false) {
    die(
    mysqli_error($conn));
    }
    header("Location:inserimentosupplenze.php");
    Se $result è false interrompi lo script (questo già lo avevi messo). Altrimenti $result vale true in quanto risultato di una INSERT riuscita con successo, dunque puoi effettuare la redirezione.
    testwp85 likes this.

    I suggerimenti che do più spesso:


  15. #45
    relettronico non è connesso Utente giovane
    Data registrazione
    03-01-2016
    Messaggi
    97

    Predefinito

    Ah... Quindi lo script era giusto non serviva solo la parte del num_rows.. Mentre per estrarre i dati da questa tabella e metterli in un altra devo mettere nella query l'INSERT seguito dal SELECT ?

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

    Predefinito

    Puoi estrarre i dati dalla tabella con una SELECT, ed inserirli in un'altra utilizzando delle INSERT (normalmente una per ogni riga che hai estratto).

    Questo può essere utile quando la tabella di partenza è quella di destinazione fanno parte di due database diversi. Se appartengono alla stessa base di dati, normalmente, è preferibile non copiare i dati, bensì mettere in relazione le due tabelle (tipicamente la seconda contiene un riferimento alla prima tramite chiave esterna).

  17. #47
    relettronico non è connesso Utente giovane
    Data registrazione
    03-01-2016
    Messaggi
    97

    Predefinito

    io ho una tabella nella quale salvo le supplenze e poi tramite questo secondo script voglio portare i dati di questa tabella in un'altra e poi cancellarli nella prima. Ce una prima tabella in cui si inserisce e si salva e poi tramite un bottone diciamo che vengono confermate le supplenze e pubblicate in una seconda tabella e la prima si deve svuotare per essere compilata nuovamente la settimana seguente

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

    Predefinito

    Le due tabelle hanno la stessa struttura?
    Se è così non c'è motivo di usarne due, ne basta una sola aggiungendo eventualmente una colonna confermata (che mi sembra sia già presente e si chiami conferma).

    I suggerimenti che do più spesso:


  19. #49
    relettronico non è connesso Utente giovane
    Data registrazione
    03-01-2016
    Messaggi
    97

    Predefinito

    Ma i dati non devono essere visualizzati finché il responsabile non schiaccia su pubblica comunque hanno la stessa struttura

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

    Predefinito

    Allora aggiungi una colonna pubblica il cui valore è true se e solo se il dato deve essere mostrato (sempre che questo non sia già il ruolo della colonna conferma).
    Tutto il resto si può definire in funzione di questa colonna.

    I suggerimenti che do più spesso:


  21. #51
    relettronico non è connesso Utente giovane
    Data registrazione
    03-01-2016
    Messaggi
    97

    Predefinito

    Ma la tabella quando viene pubblicata si deve svuotare dal backoffice deve rimanere piena solo nella visualizzazione è uno script complesso da mettere dietro una colonna

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

    Predefinito

    Una tabella rappresenta un'entità. Se due tabelle hanno la stessa struttura, quasi certamente rappresentano la stessa entità, come in questo caso.

    Usare due tabelle diverse per la stessa entità, che si sposta dall'una all'altra a seconda di un "criterio" temporale, è un po' come assumere che ci sia una relazione tra un'idea ed il naso di chi la espone, per dirla à la Uno, nessuno e centomila.

    Poiché ti ritrovi in questa situazione, la cosa migliore è risolvere i problemi dell'architettura alla base, modificandola.

    Ovviamente c'è anche la "soluzione" faccio finta di niente, tengo quello che già ho con tutti i possibili errori, e spero che nessuno se ne accorga mai (che non consiglio ): esegui una SELECT con cui estrai i dati di interesse, quindi li inserisci nella seconda tabella con delle INSERT.

  23. #53
    relettronico non è connesso Utente giovane
    Data registrazione
    03-01-2016
    Messaggi
    97

    Predefinito

    Quindi tu cosa mi dici di fare? Mettere una colonna con valore booleano e dire alla pagina pubblica di selezionare quelle con valore 1 mentre nella pagina del responsabile quelle con valore 0 e il tasto cambia il valore da 0 a 1 giusto?

  24. #54
    relettronico non è connesso Utente giovane
    Data registrazione
    03-01-2016
    Messaggi
    97

    Predefinito

    Quindi nella pagina pubblica nella query dovrei scrivere cosi? (non credo che la variabile scritta cosi sia sintatticamente corretta ma voglio sapere se ho capito)
    Codice PHP:
    mysqli_query($con, SELECT * FROM supplenze WHERE conferma='$1')
    Mentre nella pagina del responsabile ce lo 0 al posto del 1.

    Mentre il tasto in cui io copiavo i dati da una tabella ad un'altra devo usare:
    Codice PHP:
    mysqli_query($conn, UPDATE supplenze SET conferma='1')
    Ho capito bene?

  25. #55
    relettronico non è connesso Utente giovane
    Data registrazione
    03-01-2016
    Messaggi
    97

    Predefinito

    Ho fatto le modifiche come ho detto io nel post precedente (le variabili le ho messe nel modo corretto non come ho detto prima) e funziona perfettamente ti ringrazio tantissimo...

    Mi dovresti dare ancora un piccolo aiuto perché non ho capito come devo inserire il password_hash ho letto un po in internet ma non capisco com'è la sintassi mi potresti aiutare?

    Per curiosità se volessi che nel login più persone possono accedere ma ogni persona abbia la sua pagina privata come devo fare per indirizzarle alle pagine diverse?

    Grazie per l'aiuto

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

    Predefinito

    Quindi nella pagina pubblica nella query dovrei scrivere cosi? (non credo che la variabile scritta cosi sia sintatticamente corretta ma voglio sapere se ho capito)
    Codice PHP:
    mysqli_query($con, SELECT * FROM supplenze WHERE conferma='$1')
    Mentre nella pagina del responsabile ce lo 0 al posto del 1.

    Mentre il tasto in cui io copiavo i dati da una tabella ad un'altra devo usare:
    Codice PHP:
    mysqli_query($conn, UPDATE supplenze SET conferma='1')
    Ho capito bene?
    Esattamente!
    Nella pagina pubblica, se ne hai bisogno, puoi anche filtrare le righe per data, per esempio mostrare solo quelle relative ad una certa settimana:
    Codice:
    SELECT * FROM supplenze WHERE conferma='$1' AND data BETWEEN '2018-07-23' AND '2018-07-29';
    (assumendo che la colonna data sia di tipo DATE o simile).

    Mi dovresti dare ancora un piccolo aiuto perché non ho capito come devo inserire il password_hash ho letto un po in internet ma non capisco com'è la sintassi mi potresti aiutare?
    A grandi linee il procedimento è così:
    • durante l'inserimento/registrazione usi password_hash per generare l'hash della password che andrai ad inserire nella tabella assieme all'username (o indirizzo email a seconda di cosa preferisci usare)
    • durante l'autenticazione, la tua pagina riceverà username e password da un form: dovrai effettuare una SELECT per recuperare dalla base di dati la riga contenente l'username:
      Codice:
      SELECT * FROM utente WHERE username = '$username';
    • quindi dovrai usare password_verify per verificare che la password inserita corrisponda a quella memorizzata:
      Codice PHP:
      if (password_verify($_POST['password'], $record['password'])) {
      echo
      "Credenziali corrette";
      }
      else {
      echo
      "Password errata";
      }

    Complessivamente l'autenticazione diventa qualcosa come:
    Codice PHP:
    $conn = ... // Connessione alla base di dati

    $username = $_POST['username'];
    $password = $_POST['password'];

    $query = "SELECT * FROM utente WHERE username = ?";
    $stmt = mysqli_prepare($conn, $query);
    mysqli_stmt_bind_param($stmt, "s", $username);
    mysqli_stmt_execute();
    mysqli_stmt_bind_result($stmt, $row);
    mysqli_fetch($stmt);

    if (
    password_verify($password, $row['password'])) {
    echo
    "Credenziali corrette";
    }
    else {
    echo
    "Password errata";
    }

    mysqli_stmt_close($stmt);
    Per curiosità se volessi che nel login più persone possono accedere ma ogni persona abbia la sua pagina privata come devo fare per indirizzarle alle pagine diverse?
    Hai bisogno delle sessioni: quando un utente si autentica, memorizza il suo id (o qualunque chiave) nella sessione:
    Codice PHP:
    session_start();
    ...
    if (
    password_verify($password, $row['password'])) {
    echo
    "Credenziali corrette";
    $_SESSION['id_utente'] = $row['id'];
    }
    in questo modo ti basterà chiamare session_start all'inizio del codice della pagina privata, così da avere a disposizione l'identificativo dell'utente collegato. Con quello potrai estrarre dalla base di dati tutte le informazioni di cui hai bisogno e usarle per costruire i contenuti della pagina.

    I suggerimenti che do più spesso:


  27. #57
    relettronico non è connesso Utente giovane
    Data registrazione
    03-01-2016
    Messaggi
    97

    Predefinito

    Non ho creato la pagina di registrazione perché gli utenti li aggiungo io direttamente nel database devo per forza creare la pagina di registrazione per mettere l'hash?

    Per selezionare solo le supplenze di una certa data io avevo pensato di mettere un form per la selezione della data:
    Codice PHP:
    <form method="POST" action="Visualizzazionesupplenze.php">
    <
    label for="data"><b>Data</b></label>
    <
    input type="date" placeholder="Inserire data" name="data">
    </
    form>
    e quindi poi di aggiungere nella query:
    Codice PHP:
    $data=$_POST['data'];

    $query = mysqli_query($con, "SELECT * FROM supplenze Where pubblico='1' AND data='$data'");
    ho provato a farlo cosi ma credo che anche se inserisco la data non carica subito la tabella perché io la inserisco e non cambia nulla

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

    Predefinito

    Non ho creato la pagina di registrazione perché gli utenti li aggiungo io direttamente nel database devo per forza creare la pagina di registrazione per mettere l'hash?
    No, non è necessario. Quando dici che li inserisci direttamente tu nel database intendi dire che hai creato una pagina PHP che utilizzi solo tu (se è così ti basta usare password_hash lì dentro), oppure che inserisci i dati da PHPMyAdmin o simili?
    In quest'ultimo caso devi calcolare password_hash autonomamente (ad esempio usando uno script che prenda in input una stringa e ne calcoli l'hash) e poi inserire il risultato nella tabella.

    Per selezionare solo le supplenze di una certa data io avevo pensato di mettere un form per la selezione della data:
    Il form è corretto.

    ho provato a farlo cosi ma credo che anche se inserisco la data non carica subito la tabella perché io la inserisco e non cambia nulla
    Cosa intenti? Che quella query non restituisce risultati? È possibile che il formato per la data usato nel database non coincida con quello in arrivo dal form. Ad esempio il primo potrebbe usare 2018-07-23 mentre il secondo 23/7/2018.

    I suggerimenti che do più spesso:


  29. #59
    relettronico non è connesso Utente giovane
    Data registrazione
    03-01-2016
    Messaggi
    97

    Predefinito

    Io ho messo direttamente la password in phpmyadmin tu mi consigli di mettere autonomamente l'hash o di creare una pagina di login?
    Ma il date di phpmyadmin con cosa coincide in html? Io ho messo in tutti e due date ma è diverso

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

    Predefinito

    Creare una pagina di inserimento a cui solo tu hai accesso probabilmente è la scelta più pratica.

    Entrambi i DATE seguono il formato YYYY-MM-DD, quindi dovrebbe funzionare. L'esecuzione della query produce un errore o restituisce semplicemente 0 risultati?
    In quest'ultimo caso è utile dare un'occhiata al contenuto della tabella per vedere se è sbagliata l'interrogazione o se effettivamente non ci sono elementi da restituire.

Pagina 2 di 7 PrimoPrimo 1234 ... UltimoUltimo

Regole di scrittura

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