Visualizzazione risultati 1 fino 5 di 5

Discussione: [PHP,MySQL] Cercasi aiuto

  1. #1
    Guest

    Angry [PHP,MySQL] Cercasi aiuto

    Salve, cerco aiuto per il mio sito in quanto non maneggio bene PHP con l'interazione su di un database MySQL il che mi porta a chiedere aiuto a qualcuno più esperto che magari possa aiutarmi e spiegarmi passo passo come fare a creare, per esempio, un form di login e registrazione .
    In questi giorni ho letto diverse guide ma capisco poco, ho visto anche diversi script come quelli di Alemoppo ma non mi piace copiare e poi vorrei capire ogni singola lettera a che serve

    Qualcuno sarebbe così gentile?

    Thanks..

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,354

    Predefinito

    Su altervista possono essere usati 2 tipi di database: mysql (più performante, ma ci sono le limitazioni che probabilmente sai, o ne hai sentito parlare), e sqlite (meno performante, ma per i siti piccoli va benissimo).

    L'interazione con database si fa tramite query, ovvero stringhe "di comando" al database.
    Sia nel mysql che nel sqlite, le query utilizzano lo stesso linuaggio: l'sql. La differenza tra i due database a livello di costrutti è poca. Per le prime cose più semplici, cambiano soltanto i tipi di dati (tipi mysql, tipi sqlite).

    In generale, un database è formato da tabelle. Per uno script di registrazione, può anche esserci una sola tabella, ad esempio chiamata utenti con le seguenti colonne:

    -id (tipo intero): è un campo che va impostato autoincrement e come primary_key, in modo di aver almeno un campo sicuramente univoco, per ogni riga.
    -nickname (tipo stringa): qui si può salvare il nick dell'utente
    -password (tipo stringa): qui si può salvare la password. Nota che è bene salvare soltanto l'hash della password, e non salvare la password in chiaro. Per vedere se la password inserita è corretta, confronti gli hash.
    -email (tipo stringa): qui si può salvare l'eventuale email dell'utente
    -ip (tipo intero: si trasforma in intero in php tramite la ip2long() ): Qui si salva l'ip dell'utente.

    Per creare questa tabella, occorre eseguire la query "CREATE TABLE" del tipo:

    Codice:
    CREATE TABLE utenti
    (
    id int autoincrement,
    nickname varchar(255),
    password varchar(255),
    email varchar(255),
    ip int
    )
    In php, per effettuare le query, si usano dei metodi (o le relative funzioni, in procedurale) apposite in funzione del database che utilizzi: con sqlte, lo puoi fare tramite il metodo query() di SQLite3. Analogamente, in mysql puoi farlo tramite il metodo query() di mysqli (nello script, avevo usato la vecchia e obsoleta mysql_query()).

    Una volta creata la tabella, puoi passare ad inserire gli utenti, sempre tramite query, con la INSERT. A modificare i dati degli utenti con la UPDATE o eliminare uno o più utenti con la DELETE e leggere uno o più utenti con la SELECT.

    Nelle query (dove ha senso), puoi specificare sia delle condizioni, con la clausola WHERE:
    Codice:
    SELECT ip, email FROM utenti WHERE username='mario' OR id=1
    E puoi anche ordinare i dati letti con la ORDER BY:
    Codice:
    SELECT nickname FROM utenti ORDER BY nickname
    (in questo caso i dati sono forniti in ordine alfabetico secondo il campo "nickname").

    Ovviamente, puoi utilizzare sia ORDER BY, sia WHERE:

    Codice:
    SELECT ip, email FROM utenti WHERE username='mario' OR id=1 ORDER BY nickname
    Forse, agli inizi una delle cose più complicate è leggere i dati (con la SELECT): sia con sqlite, che con mysqli ci sono metodi (rispettivamente fetchArray() e fetch_array()) che ad ogni invocazione, restituiscono una riga della tabella. Fai prima a guardare gli esempi nelle pagine che ti ho linkato.

    Spero di aver detto molto (tutto è impossibile). Ovviamente chiedi pure.
    Agli inizi (dopo esserti impadronito un po'), può sembrare facile, ma andando avanti facendo query complesse ti assicuro che è difficile! (in particolare, leggere particolari righe, prendendo dati da diverse tabelle).
    Gestire i database è aimé una delle cose che so far peggio...

    p.s: questa discussione era meglio farla nella sezione PHP.

    Ciao!
    Ultima modifica di alemoppo : 02-04-2013 alle ore 15.01.48

  3. #3
    Guest

    Predefinito

    Grazie :)
    Io sto usando PhpMyAdmin offerto da Altervista e già comunque so ed ho capito come creare le tabelle, anche se grazie l'interfaccia, il problema si presenta quando ho, per esempio, i vari dati memorizzati nelle variabili:
    $email
    $nickname
    $password

    Non ho ben capito come fare in modo da essere inseriti nel database?
    Altra cosa, tu hai detto di non inserire direttamente la password ma gli hash e poi confrontare questi ultimi, potresti spiegarti meglio?

    PS: Se preferisci puoi spostare la conversazione nella sezione PHP :)

  4. #4
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,354

    Predefinito

    Per inserire i dati nella tabella, devi usare la INSERT. Quindi una cosa del tipo:

    Codice PHP:
    if($mysqli->query('INSERT into nometabella (email, nickname, password) VALUES (\''.$email.'\',\''.$nickname.'\',\''.$password.'\')'))
    echo
    'Dati inseriti correttamete';
    else ...
    .

    Per evitare sql injection, tutti i dati che prelevi dagli utenti devi "filtrarli" attraverso la mysqli_real_escape_string() (nel caso di sqlite3, sarebbe il metodo ->escapeString()).

    Quindi potresti fare una cosa come:
    Codice PHP:
    $nick = mysqli_real_escape_string($nick);
    //...etc con gli altri dati
    Oppure, ovviamente, direttamente nella query:
    Codice PHP:
    if($mysqli->query('INSERT into nometabella (email, nickname, password) VALUES (\''.mysqli_real_escape_string($email).'\',\''.mysqli_real_escape_string($nickname).'\',\''.mysqli_real_escape_string($password).'\')'))
    echo
    'Dati inseriti correttamete';
    else ...
    Citazione Originalmente inviato da mathis Visualizza messaggio
    PS: Se preferisci puoi spostare la conversazione nella sezione PHP :)
    Non posso, non essendo moderatore di quest'area del forum... Anche se secondo me andrebbe fatto.

    Ciao!
    Ultima modifica di alemoppo : 02-04-2013 alle ore 16.35.19

  5. #5
    Guest

    Predefinito

    Ok grazie :)
    Sta sera/Domani proverò, se ho problemi non esiterò a contattarti haha ;)

Regole di scrittura

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