Pagina 1 di 2 12 UltimoUltimo
Visualizzazione risultati 1 fino 30 di 36
Like Tree2Likes

Discussione: creazione di un database con form per l'aggiornamento

  1. #1
    Guest

    Predefinito creazione di un database con form per l'aggiornamento

    Salve a tutti, vorrei creare una pagina dove sia presente una tabella che prende dati da un database creato da me su mysql. Il db in questione riguarda una libreria, con attributi "titolo, autore, lingua, proprietario_libro, contatto". Creare il db non è stato un grosso problema, il difficile viene ora:

    1) sono completamente neofita per quanto riguarda altervista o la creazione siti in generale. Quindi non date nulla di scontato.

    2) già visualizzare la tabella su una pagina del sito che ho creato rappresenta un grande ostacolo. Non ho la minima idea di come fare per inserire il mio database in una pagina internet. Problematiche anche dovute dal fatto che io solitamento gestisco i db con postgresql e non con mysql.

    3) vorrei poi inserire nella stessa pagina un form per la compilazione dei campi, in modo tale che chiunque possa aggiungere i propri libri. Qui ho letto qualche script, ma non saprei dove inserirli.


    Questi i problemi. Le ricerche su internet affrontate in questi giorni non hanno portato a grandi esiti: script tutti diversi ma che apparentemente fanno la stessa cosa, nessuno che spiega dove inserirli, chi parla di joomla(che non riesco a installare) insomma, gran casino. Chi mi da una mano? non mi pare una cosa complicata da fare, eppure sono impantanato.

    Grazie!

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

    Predefinito

    Innanzitutto devi decidere se utilizzare un CMS come Joomla! oppure creare ed accedere alla base di dati attraverso PHP. La differenza risiede nel fatto che i CMS gestiscono la base di dati per te, con PHP dovrai creare "manualmente" le tabelle (ad esempio con PHPMyAdmin dal pannello di controllo) ed accedervi tramite gli script che saranno integrati nelle pagine.

    Assumendo che tu non voglia un CMS e abbia delle conoscenze di base sulla programmazione (non necessariamente in PHP), quello che devi sapere in estrema sintesi è:
    • gli script PHP sono processati lato server, ogni qualvolta viene richiesta una pagina con estensione *.php
    • ciò che è racchiuso tra i tag <?php e ?> è considerato codice PHP e viene interpretato; tutto il resto (tipicamente HTML) viene ignorato
    • il risultato dell'elaborazione è una pagina HTML
    • il risultato della stampa su standard output (in altri termini, le echo) viene "inserito" nel codice HTML risultante
    • il resto è solo programmazione: funzioni, classi, oggetti, librerie, Design Pattern e tutto il resto

    Per interagire con la base di dati hai due scelte: MySQLi o PDO. Più di qualcuno trova il primo più semplice da utilizzare, quindi gli esempi seguenti si baseranno su di esso, per il resto sono equivalenti. Evita MySQL: è deprecato.

    Quale sia l'API che sceglierai, il tutto si riduce ad invocare un metodo (o funzione) query attraverso cui esegui l'omonima operazione sulla base di dati. C'è una guida basata su MySQLi grazie alla quale puoi farti un'idea.

    Esempio:
    Codice HTML:
    <html>
      <head>...</head>
      <body>
        <?php echo "<p>Hello, world!</p>";  ?>
      </body>
    </html>
    Il cui risultato, ovvero ciò che alla fine è "visto" dal browser, è:
    Codice HTML:
    <html>
      <head>...</head>
      <body>
        <p>Hello, world!</p>
      </body>
    </html>
    Riguardo alle tue domande:
    2) Non "inserisci il database in una pagina internet", piuttosto "utilizzi una pagina web come interfaccia per l'accesso alla base di dati". Ad esempio, per mostrare il contenuto di una tabella:
    Codice PHP:
    $mysqli = new mysqli("host", "user", "password", "database");
    $result = $mysqli->query("SELECT my_column1, my_column2 FROM my_table");
    while (
    $row = $result->fetch_assoc()) {
    echo
    "column1: " . $row['my_column1'] . "\tcolumn2: " . $row['my_column2'] . "<br />";
    }
    In un caso reale è bene controllare il valore di ritorno di metodi e funzioni, per sincerarsi che le operazioni abbiano avuto buon esito.


    3) L'inserimento è diviso in due parti, una in cui usi un form HTML ed un'altra in cui elabori i dati inviati dal suddetto form. Il campo action del form altro non è che l'URL della pagina (php) che gestirà la richiesta, ad esempio validando i dati ed effettuando una query di inserimento. Per la "lettura" dei dati ricevuti, probabilmente avrai bisogno di $_GET e $_POST, due vettori associativi che contengono tutti i dati inviati dal form.

    Queste sono le basi, di strategie alternative, come hai visto, ce ne sono tante (anche troppe, e non tutte valide...). Quale usare dipende dal contesto.

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

    Predefinito

    mzanella aggiungo 1)che deve considerare i dati con il proprio charset, questo si traduce nel creare database con charset e collocation in utf-8 i campi anch'essi in utf-8 e la pagina php che invia il form (o comunque qualsiasi pagina che deve mostrare output) con l'header utf-8, da non dimenticare che le query di selezione,inserimento,aggiornamento dovranno riferirsi anche a utf-8. Poiché noto che nel database ha un campo lingua.
    2)devi creare un sistema di login ed eventualmente dare la possibilità hai propri utenti di inserire contenuti nel database. Ovvio che deve controllare l'input inserito e quindi usare un qualcosa come bindValue o mysqli_real_escape_string. ps. mysqli consente di interagire con stile procedurale o orientato agli oggetti, pdo solo orientato agli oggetti.
    Ultima modifica di darbula : 22-02-2016 alle ore 15.38.55
    mzanella likes this.

  4. #4
    Guest

    Predefinito

    grazie della risposta. Allora, tutto più o meno chiaro, il dubbio forte che ho in questo momento è: dove inserisco i codici che mi hai scritto?

    Per il controllo sugli inserimenti, presumo tu voglia evitare casi di sqlinjection. Implementare un tale sistema sarebbe meglio, ma voglio fare una cosa alla volta. Già ho parecchi problemi con una semplice interfaccia web per il mio database

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

    Predefinito

    ehm tu sei un utente alterblog e quindi non hai accesso via ftp, mzanella quale cms permette di creare strutture di dati in mysql?joomla per creare tabelle mysql e pagine php,va bene?

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

    Predefinito

    dove inserisco i codici che mi hai scritto?
    All'interno di un file di testo con estensione .php. Il procedimento è simile alla creazione di una pagina HTML, cambia appunto l'estensione. Vedi La prima pagina PHP.

    Per il controllo sugli inserimenti, presumo tu voglia evitare casi di sqlinjection. Implementare un tale sistema sarebbe meglio, ma voglio fare una cosa alla volta.
    Sì, SQL injection ed altre situazioni, e sì: meglio fare una cosa alla volta, finché non acquisisci dimestichezza .


    Edit: non avevo notato che fosse AlterBlog! Non puoi installare Joomla!, puoi usare solo WordPress. Si tratta di un CMS, quindi tutte le considerazioni precedenti non valgono.

    Ritorno alla prima domanda del messaggio precedente: puoi continuare con questo strumento, oppure passare ad AlterSito e gestire "manualmente" base di dati con MySQL e PHP.
    Ultima modifica di mzanella : 22-02-2016 alle ore 16.29.14

  7. #7
    Guest

    Predefinito

    Allora, io ti consiglio di fare quanto segue...
    Installi Wordpress nella cartella blog, poi fai il redirect ad un sito che compri qua su altervista, lo compri perchè la spesa è più che accessibile e sono più che onesti :)
    Costa 10 euro l'anno un dominio lo puoi comprare.
    Una volta che hai installato wordpress ti fai un sito alla veloce con wordpress, giusto le cose che ti servono diciamo di vetrina, la vetrina la gestisci con wordpress, quindi le foto, tutto quello che serve, gli articoli etc..etc...
    Poi ti scarichi un IDE, ti consiglio vivamente APTANA STUDIO, che è gratuito e funziona alla grande è un IDE di PHP di eclipse, puoi anche metterci Java plugin se vuoi e fare progetti in java.Ma tu lo userai per PHP in FTP.
    Una volta che hai scaricato APtana, fai file new PHP project e lo metti in una cartella e nomini la cartella mioProgetto, quando ti si apre il progetto con aptana hai una icona di MONDO, clicchi con il pulasante destro e fai aggiungi FTP connection, e ti connetti alla tua cartella su altervista seguendo le istruzioni che trovi sulla tua bacheca come FTP...Scarichi FILEZILLA che è gratis...EDd hai finito...Nella cartella Blog avrai il tuo sito vetrina nella cartella NOME CARTELLA ci metti il tuo progetto(Come ho fatto io) e con Aptana basta che fai ctrl+shift+U e carichi direttamente il file sul sito che modifcherai con l'editor di aptana, aptana supporta PHP RUBY PYTHON CSS JAVASCRIPT XML Html e molto altro...
    E ti fai le tue pagine in php...Puoi anche non installare wordpress fai tutto con aptana studio.
    Comunque se decidi di intraprendere questa strada scrivimi anche privatamente, lavoro permettendo, quindi ti risponderò di sera e ti aiuterò, per quanto possibile.
    Altrimenti da altervista puoi creare direttamente le pagine e le metti online da gestione file crei pagina php html, ma è meglio che usi un IDE secondo me...Poi lavorerai in unione con gestione file e Aptana...È più ordinato.
    Ciao fammi sapere.

    Ps:Ahhh ovviamente mi sono scordato di dire che il database lo crei direttamente dal phpmyadmin, cioè il database già c'è tu creerai te tabelle che ti servono e ti connetti e poi dalle pagine che gestisci in php recuperi tutto quello che devi recuperare guarda è più difficile a dirsi che a farsi...Compra un dominio, scaricati Aptana e in 5 minuti fai la pagina di hello world....L'unica cosa è che ad Aptana gli devi dare il path corretto dove deve andare a salvare i file o sovrascrivere se già esistenti, io ad esempio ho tutto il mio progetto nella cartella webLog quindi nel remote path di Aptana basta inserire /nomeCartella nel server il tuo dominio ftp lo username e la password che usi su altervista...è semplicissimo..Ciao
    Ultima modifica di fractalcosmo : 22-02-2016 alle ore 21.17.09

  8. #8
    Guest

    Predefinito

    ok, fermi tutti e riflettiamo un attimo ^^

    prima cosa che mi sento di dire: io ho già effettuato la conversione ad altersito, non so perchè dite che sono utente alterblog.

    seconda cosa: io ho aperto un dominio di prova (il nome lascia intuire) per fare delle prove e vedere come raggiungere il mio obiettivo. Di fatto, una volta imparato, dovrò trasferire queste conoscenze all'amministratore della pagina che è REALMENTE il target di questo lavoro. Non so se mi sono spiegato ^^

    EDIT:

    con gioia ma senza troppa difficoltà (piccole soddisfazioni) sono riuscito a creare una pagina hello world. Parto fiducioso a testare il codice per il database, vediamo che accade

    EDIT 2:

    un po con sorpresa, non riesco a installare joomla3, anche se ho creato una cartella apposta, dato che prima mi diceva:
    Errore L'installazione è fallita
    Non è possibile installare l'applicazione perché ne è già stata installata un'altra nella cartella principale del sito.
    ora però anche se ho reato la cartella rinominata "Joomla" con tanto di file index.php,mi da lo stesso errore. Come è possibile? devo forse aspettare?
    Ultima modifica di sitodiprovadiandrea : 23-02-2016 alle ore 10.51.46

  9. #9
    Guest

    Predefinito

    Si infatti ho visto il tuo link con la pagina standard di wordpress, adesso scaricati Filezilla e Aptana Studio, in FileZilla fai click su apri gestione siti e inserisci il tuo host username e password porta 21 tls esplicito, tipo accesso normale ed inserisci username e password che hai su altervista, fai connetti, bene quello è tutta la tua cartella del sito dovrebbe nominarsi così:

    "/"

    Ok una volta fatto questo puoi trasportare cartelle da filezilla direttamente dal tuo computer sulla tua cartella di sito, ed ovviamente anche scaricare.

    Adesso installa Aptana crea una cartella BIBLIOTECALIBRI chiamala come vuoi e la inserisci in una cartella dove terrai tutti i progetti di aptana.In Aptana quando si apre gli dici il path che deve aprire, aptana può aprire 50 finestre con 50 progetti diversi, poi fai file new PHP proget e gli dai il nome della tua cartella BIBLIOTECALIBRI, se hai fatto tutto bene Aptana ti dirà la cartella già esiste con lo stesso nome, tu te ne freghi altamente e continui, aptana inserisci il progetto di BIBLIOTECALIBRI, tu non avrai file per il momento ma te ne freghi...ovviamente BIBLIOTECALIBRI la inserirai anche nella directory del tuo sito OVVIAMENTE, quindi creerai la stessa cartella anche nel tuo sito.
    Bene a questo punto vai nell'icona monda di aptana e fai
    Add new connection
    in remote clicchi su NEW ed inserisci le credenziali ftp per connetterti al tuo sito, perfetto, adesso se dai il path della cartella /BIBLIOTECALIBRI Aptana caricherà i tuoi file dentro quella cartella, comunque fai connect e ti rendi conto subito di come funziona...
    Adesso sei operativo...Puoi iniziare a fare le tue pagine ;)
    Ciao per qualsiasi cosa fammi sapere...Ma è semplice impostare Aptana...

    Ps:IMPORTANTE E' SOLO IN GIUSTO PATH, quando però fai ctrl+shift+U con Aptana e carichi online, dopo ovviamente esseri connesso in remoto, Aptana ti avverte se ha CREATO UN FILE O AGGIORNATO IL FILE ESISTENTE...In questo modo se devi aggiornare un file indice.php che già c'è e però vedi che Aptana ti dice ho creato un nuovo file vuol dire che devi rivedere il path, quindi ti connetti e gestione file e vedi dove lo ha caricato ed aggiusti il path.Tu comunque devi dargli la tua cartella /BIBLIOTECALIBRI...è molto semplice.Se vuoi caricare nella cartella blog come path metterai /blog etc..etc...Ricordati lo slash prima della cartella nel remote path.
    Da aptana poi avrai due progetti quello in locale con tutti i file che ci sono anche in remoto e sotto nell'icona mondo i file in remoto quelli online, quando aggiorni quelli in locale facendo ctrl+shit+U si aggiorna anche il remoto...Una volta che hai iniziato vedrai che è semplicissimo.prima pagina di php


    Da aptana --File->new php project poi fai
    file-new from template PHP

    e poi scrivi
    Codice PHP:
    <?php

    print 'Questa è la mia prima pagina'

    ?>
    e la carichi.

    Ma lascia perdere joomla tu devi creare delle pagine tue con connessione e tutto lascia perdere joomla che non impari niente con joomla o worpress devi farti delle tabelle in phpmyadmin e crearti le pagine tue e la connessione ti senti anche piu soddisfatto poi ciao
    Ultima modifica di fractalcosmo : 23-02-2016 alle ore 10.59.00 Motivo: joomla

  10. #10
    Guest

    Predefinito

    ciao, ti ringrazio per i tuoi consigli, se non ho capito male questi due programmi mi semplificano la vita senza usare troppo codice, giusto?


    Io vorrei riuscire, per mio obiettivo personale, a visualizzare le tabelle e modificarle (intanto visualizzarle ^_^ ) solamente caricando delle pagine in php con del puro codice. Nel momento in cui mi troverò seriamente in difficoltà, farò come dici :) Grazie!

  11. #11
    Guest

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Codice HTML:
    <html>
      <head>...</head>
      <body>
        <?php echo "<p>Hello, world!</p>";  ?>
      </body>
    </html>
    e questo ok
    Codice PHP:
    $mysqli = new mysqli("host", "user", "password", "database");
    $result = $mysqli->query("SELECT my_column1, my_column2 FROM my_table");
    while (
    $row = $result->fetch_assoc()) {
    echo
    "column1: " . $row['my_column1'] . "\tcolumn2: " . $row['my_column2'] . "<br />";
    }

    Ok, ho inserito il tuo codice in ambiente table, ma mi da questo errore:
    Fatal error: Call to a member function fetch_assoc() on a non-object in /membri/sitodiprovadiandrea/libreria.php on line 5
    io ho trovato questo codice per la visualizzazione, te lo posto omettendo la password del server:

    Codice PHP:
    $db_connection= mysql_connect(my_sitodiprovadiandrea,sitodiprovadiandrea,PASSWORD);
    $db_selection = mysql_select_db(Libreria,$db_connection);

    $query = mysql_query("SELECT * FROM Libreria");
    while(
    $cicle=mysql_fetch_array($query)){
    echo
    "<tr>
    <td>"
    .$cicle['Titolo']."</td>
    <td> - </td>
    <td>"
    .$cicle['Autore']."</td>
    <td> - </td>
    <td>"
    .$cicle['Lingua']."</td>
    <td> - </td>
    <td>"
    .$cicle['Proprietario']."</td>
    <td> - </td>
    <td>"
    .$cicle['Contatto']."</td>
    <td> - </td>
    </tr>"
    ;
    }
    ?>
    </table>
    mi sembra di aver inserito tutto correttamente, eppure la pagina risulta completamente bianca (http://sitodiprovadiandrea.altervista.org/Libreria1.php)

    la password che inserisco è la stessa con cui faccio il login ad altervista, è corretto?
    Ultima modifica di sitodiprovadiandrea : 23-02-2016 alle ore 11.54.55

  12. #12
    Guest

    Predefinito

    Mahh non ho capito tu come pensi di fare del codice?
    Con WORD?
    Ti serve un IDE, un interprete, i linguaggi di programmazione hanno degli IDE che interpretano il codice altrimenti come pensi di fare?

    Mi dici:

    solamente caricando delle pagine in php con del puro codice

    Appunto ti serve un IDE che tu scrivi il tuo codice e poi lo salvi online con un semplice click, io ti consiglio Aptana Studio è gratuito ed è un software che usano in moltissimi anche a livello business/professionale, se vuoi fare del web devi per forza prendere un buon IDE, altrimenti usi wordpress o Joomla ma quello non è fare web e poi come fai scusa con le tue tabelle mica puoi mettere il codice che ti ha dato zanella in wordpress, lo devi mettere in una pagina PHP e caricarla online...Usare wordpress o joomla o qualsiasi altro CMS si usa per fare sitti vetrina o per comodità ma quello è fare finta di scrivere codice, ma nel momento in cui ti serve una connessione, gestione dati, gestione tabelle inserimento salvataggio modifica, DEVI SCRIVERE CODICE DA ZERO e ti serve un IDE.

    Ciao

    Ps:Ma se metti il codice di zanella e non hai creato una tabella in phpmyadmin non potrà mai funzionare nulla.Buhh va behh vedi tu ciao.
    Ultima modifica di fractalcosmo : 23-02-2016 alle ore 11.42.05 Motivo: codice connessione

  13. #13
    Guest

    Predefinito

    Citazione Originalmente inviato da fractalcosmo Visualizza messaggio
    Mahh non ho capito tu come pensi di fare del codice?
    Con WORD?
    Ti serve un IDE, un interprete, i linguaggi di programmazione hanno degli IDE che interpretano il codice altrimenti come pensi di fare?

    Mi dici:

    solamente caricando delle pagine in php con del puro codice

    Appunto ti serve un IDE che tu scrivi il tuo codice e poi lo salvi online con un semplice click, io ti consiglio Aptana Studio è gratuito ed è un software che usano in moltissimi anche a livello business/professionale, se vuoi fare del web devi per forza prendere un buon IDE, altrimenti usi wordpress o Joomla ma quello non è fare web e poi come fai scusa con le tue tabelle mica puoi mettere il codice che ti ha dato zanella in wordpress, lo devi mettere in una pagina PHP e caricarla online...Usare wordpress o joomla o qualsiasi altro CMS si usa per fare sitti vetrina o per comodità ma quello è fare finta di scrivere codice, ma nel momento in cui ti serve una connessione, gestione dati, gestione tabelle inserimento salvataggio modifica, DEVI SCRIVERE CODICE DA ZERO e ti serve un IDE.

    Ciao

    Ps:Ma se metti il codice di zanella e non hai creato una tabella in phpmyadmin non potrà mai funzionare nulla.Buhh va behh vedi tu ciao.
    perdona l'ardire, il fatto che non abbia mai avuto a che fare con php, html e pubblicazioni web fa di me un ignorante in materia, ma non propriamente un C*****e :)

    Ovviamente,io ho creato e importato un database di prova. Ho già creato una pagina in php e importata con il pannello di controllo altervista via ftp (ho altersito, non alterblog).

    Dalla pagina di phpmyadmin riesco perfettamente a gestire il database (per adesso ha solo una riga, ma tant'è, devo fare una prova per capire come si fa, non di più.
    Il codice me lo scrivo o con l'editor interno di altervista o con notepad++ (word? seriamente? Suvvia :))
    Detto ciò, a titolo informativo, io ho seguito all'università corsi di base di dati (e quindi sql), C, sicurezza informatica. Quindi qualcosa mastico. Sfortunatamente, nessuno di questi corsi prevedeva di insegnarci a inserire quanto da noi creato su pagine internet (o per meglio dire, configurare pagine internet affinchè interpretassero i nostri lavori, in questo caso un db.) e quindi eccomi qua a chiedere consigli.

  14. #14
    Guest

    Predefinito

    Allora, finalmente sono riuscito a impostare i codici php affinchè i dati presenti nel db vengano fuori in forma tabellare. Questo può definirsi un buon risultato.


    Ecco i codici che stousanto. per adesso, Libreria1 mi soddisfa di più.

    http://sitodiprovadiandrea.altervista.org/Libreria1.php
    Codice PHP:
    <table border=”1″ bordercolor=”dark” bordercolorlight=”#000099” bordercolordark=”#000099″>

    <tr>
    <td><b>Titolo</b></td>
    <td> - </td>
    <td><b>Autore</b></td>
    <td> - </td>
    <td><b>Lingua</b></td>
    <td> - </td>
    <td><b>Proprietario</b></td>
    <td> - </td>
    <td><b>Contatto</b></td>

    </tr>
    <?php
    $db_connection
    = mysql_connect(my_sitodiprovadiandrea,sitodiprovadiandrea,PASSWORD);
    $db_selection = mysql_select_db(my_sitodiprovadiandrea,$db_connection);

    $query = mysql_query("SELECT * FROM Libreria");
    while(
    $cicle=mysql_fetch_array($query)){
    echo
    "<tr>
    <td>"
    .$cicle['Titolo']."</td>
    <td> - </td>
    <td>"
    .$cicle['Autore']."</td>
    <td> - </td>
    <td>"
    .$cicle['Lingua']."</td>
    <td> - </td>
    <td>"
    .$cicle['Proprietario']."</td>
    <td> - </td>
    <td>"
    .$cicle['Contatto']."</td>
    <td> - </td>
    </tr>"
    ;
    }
    ?>
    </table>

    http://sitodiprovadiandrea.altervista.org/Libreria.php
    Codice PHP:
    <table>
    <?php
    $mysqli
    = new mysqli("localhost", "sitodiprovadiandrea", "PASSWORD", "my_sitodiprovadiandrea");
    $result = $mysqli->query("SELECT * FROM Libreria");
    while (
    $row = $result->fetch_assoc()) {
    echo
    "<b>Titolo</b>" . $row['Titolo'] . "\t<b>Autore</b>" . $row['Autore'] . "<br />";
    }

    ?>
    </table>
    per quest'ultimo codice ho omesso di inserire gli altri campi.
    Ultima modifica di sitodiprovadiandrea : 23-02-2016 alle ore 13.04.55
    mzanella likes this.

  15. #15
    Guest

    Predefinito

    <table border="1">

    <tr>
    <td><b>Titolo</b></td>
    <td> - </td>
    <td><b>Autore</b></td>
    <td> - </td>

    etc..etc....

    comunque io non intendevo che tu fossi un C..., ma non posso sapere se sei alle prime armi o no, per me è meglio creare codice da un IDE, ovviamente, non sarebbe nemmeno da mettere in discussione, un IDE tiene il progetto ordinato, puoi debuggare, puoi avere l'autocompletamente, gli help vedere le variabili, clicchi sulla variabile o sulla funzione ed entri automaticamente nella definizione e dentro la funzione....Penso sia logico installarsi un IDE di lavoro se si vuole fare un progetto dati...Poi ognuno fa le sue scelte.Ciao buona giornata.

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

    Predefinito

    allora le domande giuste da porti sono le seguenti.
    1) Il mio server che linguaggi supporta? In altervista solo php.
    2)php come interagisce con un database? Con una libreria che per interagire con mysql deve essere presente nel php, (mysql,mysqli,pdo ecc..) l'output ottenuto può anche essere semplice testo (altrimenti può darsi che l'output di default sia con l'header text/html quindi una pagina internet) se configurato con i giusti header e supportati dal webserver e browser. altervista è ok con header text/plain (paragonabile a un file .txt come estensione).
    3) Assodato che io scelga la libreria mysqli posso affidarmi al manuale di php per quella libreria, dove in questo caso mi rimanda al costrutto mysqli per i dettagli.
    4)Che tipo di operazione devo effettuare con php e la libreria mysqli? Devo effettuare una selezione dei dati, Assumendo che già abbia creato il database (in altervista è già presente un database my_username) e la tabella. Devo creare una connessione al database con la libreria mysqli di php solo per avere accesso al mio database (dove potrò utilizzarla una singola volta per selezione,inserimento,aggiornamento o anche tutte e tre con la stessa connessione già aperta, cioè è bene evitare sovrapposizioni del tipo per diverse tabelle con lo stesso database o diverso dove può essere richiamata nello stesso momento) posso inserire questo codice in un'altro file php tramite la funzione include di php, e poi decido di fare delle selezioni di dati (tramite sintassi sql decido quale dati prelevare) ad esempio
    Codice:
    SELECT * FROM `Libreria`
    Faccio una selezione di tutte le colonne per la tabella Libreria (quindi recupero ogni singola riga di ogni colonna). sql INSERT INTO serve per inserire nuovi dati (possono essere nuovi dati solo se già non li ho presenti nel database, quindi tra tutte le colonne almeno un dato valore in una colonna deve essere diverso). sql UPDATE indica un aggiornamento dei dati già presenti nel database.
    Codice PHP:
    while ($row = $result->fetch_assoc()) {
    echo
    "column1: " . $row['my_column1'] . "\tcolumn2: " . $row['my_column2'] . "<br />";
    }
    Tenendo sempre a mente che la connessione al database dovrebbe essere già aperta è ho effettuato una sql SELECT faccio un ciclo indefinito e se è vero $row sarà un array associativo e mostrerò il/i valore/i di $row['my_column1'] e $row['my_column2'] altrimenti senza un ciclo (while in questo caso) sovrascriverò ogni volta $row['my_column1'] e $row['my_column2'] dove il risultato sarà l'ultima riga per entrambe le due colonne, per stampare a video il risultato utilizzerò echo..
    Quindi se faccio una ricerca login con php e mysql devo verificare se la libreria utilizzata sia mysqli e non altre, altrimenti devo fare il port tra le due librerie. Consultando il manuale online posso fare questo.
    come creare una pagina internet con php? semplicemente creando un file con estensione .php racchiuso tra i tag
    Codice:
    <?php echo 'ciao';?>
    ma la voglio creare in html valido, allora devi studiare le specifiche html, poiché php è un linguaggio dove non necessariamente voglio mostrare output ma fare delle operazioni, (echo è un costrutto del linguaggio e non propio una funzione, serve per far visualizzare il contenuto inserito in una variabile o semplice testo direttamente sull'output al browser) e non un markup di marcatura.Beh spero di aver chiarito il concetto.
    5)Come prelevare i dati inviati da un form html con php? Se utilizza il metodo POST si recupera con $_POST['un_nome'] o con GET $_GET['un_nome'] esiste un'altra sintassi $_REQUEST['un_nome'] che li recupera entrambi, se invio con metodo POST enctype text/plain posso recuperarlo solo tramite standard input file_get_contents('php://input'); se php lo permette. Per dettagli su come vengono creati un_nome si rimanda alle specifiche html (cioè cosa invia il browser) inoltre siccome è un array deve rispettare la sintassi per gli array di php altrimenti ogni carattere non valido verrà convertito con un underscore.
    Ultima modifica di darbula : 23-02-2016 alle ore 17.43.43

  17. #17
    Guest

    Predefinito

    Grazie ai vostri suggerimenti, ho raggiunto con soddisfazione lo scopo e imparato qualcosa in più sul php. Grazie mille! Un'ultima cosa, un capriccio dato il contesto in cui questo lavoro va a inserirsi, è la creazione di uno script di verifica.

    Io memorizzo la stringa da input (il form) e la assegno a una variabile, poi passo quella variabile al database. In mezzo, mi occorre qualcosa che eviti casi di SQL injection. Ho pensato di far passare tutto TRANNE le stringhe che contengono caratteri non alfabetici (numeri e caratteri speciali). Fosse un confronto con un singolo carattere, nessun problema, ma come posso fare per confrontare i caratteri della stringa di input con un intero assieme di caratteri?

    Questo è il codice per la pagina di inserimento:

    Codice PHP:
    <?
    //la stringa mysql_connect deve essere compilata con i dati relativi al proprio database
    // HOST = IP server Mysql
    // USER = Nome utente databse
    // PASSWORD = Password utente databse
    mysql_connect(localhost,sitodiprovadiandrea,PASSWORD);//database connection
    // Qui sotto al posto di NOME_DATABASE, inserite il nome del vostro DB
    mysql_select_db(my_sitodiprovadiandrea);

    // recupero i valori di NOME e INDIRIZZO e li assegno alle variabili $name e $address
    $Titolo = $_POST['Titolo'];
    $Autore = $_POST['Autore'];
    $Lingua = $_POST['Lingua'];
    $Proprietario = $_POST['Proprietario'];
    $Contatto = $_POST['Contatto'];


    //inserting data order
    $toinsert = "INSERT INTO Libreria
    (Titolo, Autore, Lingua, Proprietario, Contatto )
    VALUES
    ('
    $Titolo', '$Autore', '$Lingua', '$Proprietario', '$Contatto')";

    //declare in the order variable
    $result = mysql_query($toinsert); //order executes
    if($result){
    echo(
    "<br>Inserimento avvenuto correttamente");


    } else{
    echo(
    "<br>Inserimento non eseguito");
    }
    ?>

    <meta http-equiv="refresh" content="3;URL=http://www.sitodiprovadiandrea.altervista.org/Libreria.php">
    Ultima modifica di sitodiprovadiandrea : 23-02-2016 alle ore 17.51.01

  18. #18
    Guest

    Predefinito

    Non puoi fare i controlli sulla input, perchè qualsiasi cosa tu faccia basta che un malintenzionato con un semplice debug o gestione sviluppo del browser inserisca i valori non dalla input ma direttamente dall'html, tu nella input puoi anche permettere la digitazione di soli numeri o sole lettere ma questo non impedisce che uno possa inserire quello che vuole dal form html recuperato con un debug.
    Devi fare i controlli lato server, quindi lato PHP, se tu scrivi nella tua input di inserimento

    Codice:
    <script type="text/javascript">alert('ciao')</script>
    e poi premi salva su DB vedrai l'alert javascript per esempio..Ci sono vari injection code.

    https://en.wikipedia.org/wiki/Code_injection

    Devi creare codice lato server che blocchi l'esecuzione di comandi script javascript innanzi tutto con strip_tags poi devi fare le query sql con un bind dei parametri una prepare query e dovresti comunque avere un'area di login, altrimenti tutti potrebbero inserire quello che vogliono.

    Io ho dato una mano a creare un form di inserimento dati con delle prepare e dei bind in questa discussione se vuoi darci un'occhiata...Ciao

    http://forum.it.altervista.org/php-m...i-tabella.html
    Ultima modifica di fractalcosmo : 23-02-2016 alle ore 18.03.46

  19. #19
    Guest

    Predefinito

    uao, qua mi sembra che andiamo sul complicato. In effetti, lo scopo è quello, ricordo che il sito che ospiterà questa pagina è il sito di un circolo scacchistico che conterà 50 iscritti, quindi non è un sito che contiene dati pericolosi. Mi preoccupava di più un drop table che mi cancellasse la tabella. Ho circa capito quello che mi stai dicendo, certo però non mi aspetto questo tipo di attacchi. Ripeto, come sicurezza, oltre al SQL Injection non penso mi serva qualcosa di particolare.

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

    Predefinito

    ideologicamente dovresti affidarti a linguaggi client/side JavaScript o suo figlio jquery cioè con una espressione regolare, è buona norma valutare anche dal server con php preg_match. Però non stai considerando che il nome di autore potrebbe essere del tipo O'Reilly. Secondo me potresti utilizzare semplicemente mysql_real_escape_string leggi sul manuale.

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

    Predefinito

    Per gli attacchi SQL injection il primissimo passo è MySQLi::real_escape_string. L'argomento è molto più articolato, e c'è una bella pagina su PHP.net: SQL Injection.

    In sintesi si tratta di:
    • Limitare i privilegi sulla base di dati al minimo indispensabile (ad esempio creando una vista)
    • Eseguire controlli lato server (i dati in ingresso hanno il tipo giusto? Le stringhe contengono comandi SQL?), i prepared statements sono d'aiuto
    • Non mostrare informazioni sulla struttura interna delle tabelle


    PS: Ricorda che mysql è deprecato e nelle prossime versioni di PHP non sarà più possibile utilizzarlo. Abituati ad usare mysqli o PDO.


    ideologicamente dovresti affidarti a linguaggi client/side JavaScript o suo figlio jquery cioè con una espressione regolare, è buona norma valutare anche dal server con php preg_match
    Piuttosto il contrario: devi affidarti alla validazione lato server, ed eventualmente usare tecnologie lato client come JavaScript e librerie/framework derivati per avvisare l'utente in caso di form non valido prima di effettuare la richiesta al server.
    Il motivo risiede nel fatto che non esistono in generale garanzie sul fatto che i dati arrivino al server attraverso la pagina web con la validazione, una pagina HTML creata ad hoc può inviare dati non preventivamente validati al server.
    Ultima modifica di mzanella : 23-02-2016 alle ore 18.17.42

  22. #22
    Guest

    Predefinito

    mi sono letto la pagina relativa, ma non ho afferrato cosa facciano mysqli::real_escape_string e mysqli_real_escape_string.

    Se non ho capito bene, fanno un match con la stringa input e se la stringa input contiene dei caratteri inseriti nella libreria di queste funzioni, da errore?

  23. #23
    Guest

    Predefinito

    e così? Mi stavo chiedendo se esiste una regex che includa caratteri speciali tipo [,], ' , !, ecc.

    Codice PHP:
    var regexp = /^[a-zA-Z]+$/;
    if (
    regexp.test(stringa) == false)
    {
    alert("Puoi usare solo caratteri alfanumerici");
    }
    else
    {
    alert("Ok, la stringa è corretta!");
    }
    Ultima modifica di sitodiprovadiandrea : 23-02-2016 alle ore 18.34.11

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

    Predefinito

    No, semplicemente prende un dato di tipo stringa in ingresso, e restituisce la stessa stringa in cui caratteri speciali (apostrofo, virgolette, ritorno a capo...) sono sostituiti con la relativa versione escaped, cioè preceduti da un backslash.

    Una funzione utile per prevenire il JavaScript Injection di cui parlava fractalcosmo è htmlentities.

    Fermo restando che il metodo migliore per contrastare gli attacchi SQL injection sono i prepared statements.

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

    Predefinito

    mzanella certo intendevo JavaScript per avvertire l'utente, altrimenti che senso ha dire "anche dal server". La funzione htmlentities è buona solo se saputa usare. Nel senso io dal form invio htmlentities('<>'); salvo nel database in un secondo momento lo recupero e lo invio via POST tramite php inteso come codice e non inviò di una form ,recupero l'array $_POST['un_nome']; magicamente se lo inserisco/stampo nel database/browser sarà <>. perché quando recupero $_GET o $_POST viene effettuato automaticamente urldecode();. quindi per inviare un dato in formato testo via GET o POST devo usare urlencode. È solo una piccola considerazione da farsi.
    Ultima modifica di darbula : 23-02-2016 alle ore 19.11.23

  26. #26
    Guest

    Predefinito

    Si ma l'html entities non va bene, l'htmlentities converte e quando ci provai io mi sembra che l'injection veniva comunque eseguito, mentre lo strip_tags ci vuole per eliminare definitivamente i tag HTML...altrimenti sul DB rischi di avere uno stringone che non si capisce niente...poi devi fare l'encode, un bordello, strip_tags in tutte le variabili in post recuperate via server e fatta la festa :) ciao
    Ultima modifica di fractalcosmo : 23-02-2016 alle ore 20.59.37

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

    Predefinito

    http://www.html.it/articoli/javascri...ni-regolari-1/ i Meta caratteri devono essere escape cioè preceduti da "\" se lo voglio inserire in una classe /^[\[\]\?a-zA-Z0-9\/]+$/ questa sintassi sta ad indicare che deve iniziare '^' con una parentesi quadra aperta "[","]","?", da a fino z, da A fino Z,qualsiasi numero,"/" e deve finire '$' con uno slash per essere una stringa valida il backslash nel slash si deve inserire perché ho racchiuso l'espressione regolare anch'essa con gli slash. Invece devi cercare se ci sono caratteri non consentiti e fermare lo script /[^a-z]+/ non deve essere presente neanche una volta la sequenza di a fino z. Si presti attenzione che se il tag script deve essere creato da php cioè echo("<script> facciamo finta che ci sia l'espressione"); si deve aggiungere un "\" ad ogni "\" in pratica diventano due se una stringa è racchiusa in apici doppi o singoli, casi particolari con apici doppi se io devo rappresentare una nuova linea,ritorno accapo,il segno del dollaro e molti altri. posso solo con "\n" o "\r" o "\$" (si il segno del dollaro va anche con escape se racchiuso da apici doppi e deve rappresentare se stesso e non una variabile) esattamente un backslash per php. Mentre per preg_match sono due o quattro "\" (dei casi particolari solo "$" deve essere ulteriormente escape una volta se racchiuso con apici singoli o due volte se racchiuso con apici doppi se si deve ricercare nell'espressione regolare) perché per php ha un valore speciale e quindi diventa speciale per l'espressione regolare preg_match http://php.net/manual/it/regexp.reference.escape.php. Tutto questo è vero se non presente nemmeno uno dei tre disponibili della famiglia MAGIC_QUOTES cercare nel manuale online per info.
    Ultima modifica di darbula : 24-02-2016 alle ore 03.04.14

  28. #28
    Guest

    Predefinito

    Scusate, vorrei un attimo rimanere nelle mie corde. Certamente i vostri sono consigli preziosi e vi ringrazio per il tempo dedicatomi. Io, per conto mio, ho guardato tutto quello che mi avete indicato, ma davvero siamo in un mondo troppo lontano dal mio.

    La strada che mi sembra più interessante è quella di usare le funzioni MySQLi::real_escape_string.

    Non cerco la protezione MIGLIORE, ne cerco una minimale, giusto per non lasciare a eventuali (e credo vivamente che non ci saranno interessati a dropparmi una libreria scacchistica) malintenzionati o semplici script kidders che vogliono testare SQL injection di base su database apparentemente indifesi come questo.

    Ho capito bene cosa fa, e mi sembra la soluzione che sto cercando. Nella pagina che mi hai indicato però non ne capisco l'implementazione. Ti posto il codice del mio input.php, tralasciando la parte della connessione.

    Codice PHP:
    $Titolo = $_POST['Titolo'];
    $Autore = $_POST['Autore'];
    $Lingua = $_POST['Lingua'];
    $Proprietario = $_POST['Proprietario'];
    $Contatto = $_POST['Contatto'];


    //inserting data order
    $toinsert = "INSERT INTO Libreria
    (Titolo, Autore, Lingua, Proprietario, Contatto )
    VALUES
    ('
    $Titolo', '$Autore', '$Lingua', '$Proprietario', '$Contatto')";

    //declare in the order variable
    $result = mysql_query($toinsert); //order executes
    if($result){
    echo(
    "<br>Inserimento avvenuto correttamente");


    } else{
    echo(
    "<br>Inserimento non eseguito");
    }
    ?>

    <meta http-equiv="refresh" content="3;URL=http://www.sitodiprovadiandrea.altervista.org/Libreria.php">

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

    Predefinito

    praticamente devi utilizzarla prima di fare mysql_query. Devi aggiungere
    Codice PHP:
    $Titolo = mysql_real_escape_string($_POST['Titolo']);
    $Autore = mysql_real_escape_string($_POST['Autore']);
    $Lingua = mysql_real_escape_string($_POST['Lingua']);
    $Proprietario = mysql_real_escape_string($_POST['Proprietario']);
    $Contatto = mysql_real_escape_string($_POST['Contatto']);
    prova se ti funzioni.
    EDIT: devi vedere se gli array sono stati creati e solo allora devi fare eseguire lo script (in verità dovresti anche controllarli).
    Codice PHP:
    <?php
    error_reporting
    (E_ALL | E_NOTICE | E_STRICT | E_DEPRECADED);
    ini_set("display_errors" , "stdout");
    ini_set("display_startup_errors" , 1);
    if(isset(
    $_POST['Titolo'],$_POST['Autore'],$_POST['Lingua'],$_POST['Proprietario'],$_POST['Contatto'])){
    $Titolo = mysql_real_escape_string($_POST['Titolo']);
    $Autore = mysql_real_escape_string($_POST['Autore']);
    $Lingua = mysql_real_escape_string($_POST['Lingua']);
    $Proprietario = mysql_real_escape_string($_POST['Proprietario']);
    $Contatto = mysql_real_escape_string($_POST['Contatto']);



    //inserting data order
    $toinsert = "INSERT INTO Libreria
    (Titolo, Autore, Lingua, Proprietario, Contatto )
    VALUES
    ('
    $Titolo', '$Autore', '$Lingua', '$Proprietario', '$Contatto')";

    //declare in the order variable
    $result = mysql_query($toinsert); //order executes
    if($result){
    echo(
    "<br>Inserimento avvenuto correttamente");
    echo(
    "<meta http-equiv=\"refresh\" content=\"3;URL=http://www.sitodiprovadiandrea.altervista.org/Libreria.php\">");


    } else{
    echo(
    "<br>Inserimento non eseguito");
    }
    }else{
    echo(
    "accesso non consentito");
    }
    ?>
    . Significa se sono tutti definiti (e quindi vera) allora recupero i dati ed eseguo il codice e solo in caso positivo effettuo il redirect altrimenti (se è falsa) mostro "<br>Inserimento non eseguito" (se risulta falsa sin dall'inizio) mostro "accesso non consentito". Senza questo controllo potrebbe darti i notice.
    EDIT2: Se stai utilizzando la libreria mysql non puoi utilizzare altre (mysqli,pdo).. Anche io ripeto quello che ti ha detto mzanella,non utilizzare mysql perché è deprecato e rimosso in alcune versioni di php. Quando farai il port tra le due librerie presta molto attenzione in $conn ;)
    EDIT3:Ho inserito anche error_reporting ciò è utile nella segnalazione degli errori, dopo aver ampliato il progetto ed ovviamente testato lo toglierai. ps. Non so se ti può creare problemi OR E_DEPRECATED al limite toglilo.
    Ultima modifica di darbula : 24-02-2016 alle ore 14.49.01

  30. #30
    Guest

    Predefinito

    Allora, ho provato a girare il codice, e ho anche modificato alcune cose come il reindirizzamento alla pagina della libreria in quanto vorrei che mi tornasse a tale pagina anche in caso di inserimento non riuscito. Mi dice che c'è un carattere ',' inaspettato alla linea 15, cioè quella con if(isset......



    Codice PHP:
    <?
    //la stringa mysql_connect deve essere compilata con i dati relativi al proprio database
    // HOST = IP server Mysql
    // USER = Nome utente databse
    // PASSWORD = Password utente databse
    mysql_connect(localhost,sitodiprovadiandrea,PASSWORD);//database connection
    // Qui sotto al posto di NOME_DATABASE, inserite il nome del vostro DB
    mysql_select_db(my_sitodiprovadiandrea);

    // recupero i valori di NOME e INDIRIZZO e li assegno alle variabili $name e $address

    error_reporting(E_ALL | E_NOTICE | E_STRICT | E_DEPRECADED);
    ini_set("display_errors" , "stdout");
    ini_set("display_startup_errors" , 1);
    if(isset(
    $_POST['Titolo']),$_POST['Autore'],$_POST['Lingua'],$_POST['Proprietario'],$_POST['Contatto'])){
    $Titolo = mysql_real_escape_string($_POST['Titolo']);
    $Autore = mysql_real_escape_string($_POST['Autore']);
    $Lingua = mysql_real_escape_string($_POST['Lingua']);
    $Proprietario = mysql_real_escape_string($_POST['Proprietario']);
    $Contatto = mysql_real_escape_string($_POST['Contatto']);



    //inserting data order
    $toinsert = "INSERT INTO Libreria
    (Titolo, Autore, Lingua, Proprietario, Contatto )
    VALUES
    ('
    $Titolo', '$Autore', '$Lingua', '$Proprietario', '$Contatto')";

    //declare in the order variable
    $result = mysql_query($toinsert); //order executes
    if($result){
    echo(
    "<br>Inserimento avvenuto correttamente");
    } else{
    echo(
    "<br>Inserimento non eseguito");
    }

    ?>


    <meta http-equiv="refresh" content="3;URL=http://www.sitodiprovadiandrea.altervista.org/Libreria.php">

    EDIT Forse ho trovato, c'è una parentesi dopo $_POST['Titolo']) che forse non dovrebbe esserci. Togliendola, mi dice che trova un carattere $end in riga 41 che non dovrebbe esserci. Qui mi affido a voi :)
    Ultima modifica di sitodiprovadiandrea : 24-02-2016 alle ore 14.02.04

Pagina 1 di 2 12 UltimoUltimo

Regole di scrittura

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