Pagina 2 di 5 primaprima 1 2 3 4 ... ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 41
  1. #11
    Utente di HTML.it L'avatar di bANART
    Registrato dal
    Jul 2005
    Messaggi
    662
    Ciao Piero, rieccomi.
    Faccio una breve premessa a questo mio nuovo messaggio:
    Io non sono un programmatore, sono un web designer. Stavo portando avanti un progetto con un programmatore che però si è trasferito e quindi mi trovo a dover fare da solo in una jungla che non conosco.
    E' ovvio che non chiedo la pappa pronta, ma non posso (per questioni di tempo) studiarmi tutto il manuale MySql (che da quanto sto capendo è molto più complesso di PHP)

    Ad ogni modo ho consultato il manuale di HTML.it, quello ufficiale di MySQL e ricerche varie sul web... inoltre ho avuto un bell'aiuto da satifal in un'altra discussione. Finalmente mi è chiaro che i campi da relazionare bisogna che siano prima riempiti e poi messi in relazione.
    Sono arrivato a questa conclusione che, apparentemente non presenta problemi, ma ancora non va...

    Codice SQL:
    Codice PHP:
    CREATE TABLE users (
       
    id int(11NOT NULL AUTO_INCREMENT,
       
    nome varchar(20NOT NULL,
       
    cognome varchar(20NOT NULL,
       
    username varchar(20NOT NULL,
       
    email varchar(60NOT NULL,
       
    password varchar(50NOT NULL,
       
    key_control varchar(50NOT NULL,
       
    ver int(1NOT NULL DEFAULT '0',
       
    PRIMARY KEY  (id)
    ENGINE=InnoDB;

    CREATE TABLE profile (
       
    id INT(11AUTO_INCREMENT,
       
    user_check  varchar(20NOT NULL,
       
    opz1 varchar(100NOT NULL,
       
    opz2 TINYINT(1)  NOT NULL DEFAULT '0',
       
    opz3 TINYINT(1)  NOT NULL DEFAULT '0',
       
    opz4 TINYINT(1)  NOT NULL DEFAULT '0',
       
    PRIMARY KEY (id),
       
    INDEX users_key (user_check),
       
    FOREIGN KEY (user_checkREFERENCES users(username)
       
    ON DELETE CASCADE
    ENGINE=InnoDB
    Codice PHP:
    Codice PHP:

    INSERT INTO users 
    (nome,cognome,username,password,email,key_controlVALUES ('$_POST[nome]','$_POST[cognome]','$_POST[username]','$password','$_POST[email]','$key_control')";
    INSERT INTO profile (user_check,opz1,opz2,opz3,opz4) VALUES ('
    $_POST[username]','$_POST[opz1]','$_POST[opz2]','$_POST[opz3]','$_POST[opz4]')"
    Ti andrebbe di porre fine a quest'agonia?
    Matteo Coletta - fotografia
    Fotografo Lanciano - Fotografia a Lanciano e Pescara

  2. #12
    Utente di HTML.it L'avatar di Mashin
    Registrato dal
    Jul 2010
    Messaggi
    187
    Ci puoi spiegare cosa e' che "non va" ?

    Apparentemente hai fatto tutto a dovere.
    -Tabella primaria,
    -tabella secondaria con un campo che contiene il riferimento a un campo della tabella primaria,
    -insert record nella tab primaria,
    -insert record nella tabella collegata valoirzzando il campo chiave esterna.

    Unica piccola nota e' che di solito la relazione tra tabelle si usa tramite il campo chiave primaria. Ovvero avrebbe avuto piu' senso aver un campo Profilo.User_ID come chiave esterna che contenga il valore di Utente.ID, anziche' legare le tabelle sul campo User.

  3. #13
    Utente di HTML.it L'avatar di bANART
    Registrato dal
    Jul 2005
    Messaggi
    662
    Ciao Mashin, grazie per l'interesse.

    Il problema è che creando le due tabelle, inserendo i dati e poi cancellando il record dalla tabella users non mi cancella il record nella tabella profile.

    Ho pensato di associare gli username perchè credo risulti più comodo.
    Mattiamo caso io abbia 10 tabelle (come probabile che sia per 64 campi necessari), se dovessi identificare un utente facilmente tramite l'username farei prima. ..e poi l'username è univoco come l'id!

    Ma, correggimi se sbaglio, il comportamento che dovrebbe adottare questo sistema è che in caso di eliminazione del record nella prima tabella mi va ad eliminare anche il record nella seconda tabella?
    Matteo Coletta - fotografia
    Fotografo Lanciano - Fotografia a Lanciano e Pescara

  4. #14
    Utente di HTML.it L'avatar di Mashin
    Registrato dal
    Jul 2010
    Messaggi
    187
    Sincero? Non mi ricordo assolutamente il funzionamento dei Cascade Ora come ora non ho nemmeno le risorse per documentarmi un attimo e confermare/smentire.

    Riguardo al discorso dei campi chiave esterna non ho capito che intendi per "piu' comodo".
    Sull'univoco si e no. Nel senso che nulla ti vieterebbe (per come hai scritto le tabelle) di avere 2 user diversi (quindi due ID diversi) ma con il medesimo campo username.
    Dovresti gestirti tu tutto tramite controlli vari all'atto dell'inserimento, cancellazione e modifica. Legando per ID e' piu' automatico. Valuta bene la scelta che vuoi fare.

  5. #15
    Utente di HTML.it L'avatar di Enoa
    Registrato dal
    Jul 2005
    Messaggi
    573
    l'unsername della tabella users non è un campo index:
    codice:
    CREATE TABLE users ( 
       id int(11) NOT NULL AUTO_INCREMENT, 
       nome varchar(20) NOT NULL, 
       cognome varchar(20) NOT NULL, 
       username varchar(20) NOT NULL, 
       email varchar(60) NOT NULL, 
       password varchar(50) NOT NULL, 
       key_control varchar(50) NOT NULL, 
       ver int(1) NOT NULL DEFAULT '0', 
       PRIMARY KEY  (id),
       KEY `username` (`username`)
    ) ENGINE=InnoDB;
    Visto che non hai tempo di studiarti le guide consigliate, perchè non usi qualche GUI tipo phpmyadmin per fare tutte le operazioni? Ha il tool grafico per creare le relazioni, è il link "Designer" che si trova tra il link "Importa" e "Operazioni" nella pagina di riepilogo del database, dove c'è l'elenco delle tabelle

    Le due query che hai postato sono di esempio? perchè devi filtrare i dati prima di passarle alla query, pena errori e sql_injectpion

    Per il discorso di relazionare il campo id numerico, sono d'accordo con Mashin

  6. #16
    Utente di HTML.it L'avatar di bANART
    Registrato dal
    Jul 2005
    Messaggi
    662
    La mia paura sai qual'è?
    E' che se per qualche ragione andassi a creare un record su una tabella "secondaria" (che non sia users) mi va a creare un id+1 (giusto?) ...e quindi mi va a sballare i riferimenti:

    es:

    Codice PHP:
    1  1 
    2  2 
    3  3
    4  4
       5 
    5  6
    6  7 
    7  8 
    Mentre con l'username siamo sicuri che il riferimento a quell'utente è corretto.
    Non so, correggimi se sbaglio.
    Matteo Coletta - fotografia
    Fotografo Lanciano - Fotografia a Lanciano e Pescara

  7. #17
    Utente di HTML.it L'avatar di Mashin
    Registrato dal
    Jul 2010
    Messaggi
    187
    Ahem o mi sto perdendo un pezzo io o tu.

    Ogni tabella ha il suo ID, che e' univoco per tabella. non per intero schema.

    Mettiamo esempio utente ForumistaHtml.

    Questo utente puo' essere identificato sulla tabella User come il record avente ID 1, ma sulla tabella profile come record avente ID 5.

    Il legame tra le tabelle lo tieni appunto sulla chiave esterna. Ovvero sulla tabella profilo il record con ID 5 avra' il campo utente_ID pari a 1. Quindi le tabelle le incroci con da un lato il campo chiave (utente.ID) e dall'altro lato il campo chiave esterna(profilo.user_ID).

    Tutto cio' ovviamente supponendo il caso di avere il campo ID come chiave esterna per utente e non lo username


    Non so se hai capito o ho solo creato piu' confusione

  8. #18
    Utente di HTML.it L'avatar di bANART
    Registrato dal
    Jul 2005
    Messaggi
    662
    Ciao Enoa, in base a que che mi dici ho modificato la tabella come segue:
    Codice PHP:
    CREATE TABLE users 
       
    id int(11NOT NULL AUTO_INCREMENT
       
    nome varchar(20NOT NULL
       
    cognome varchar(20NOT NULL
       
    username varchar(20NOT NULL
       
    email varchar(60NOT NULL
       
    password varchar(50NOT NULL
       
    key_control varchar(50NOT NULL
       
    ver int(1NOT NULL DEFAULT '0'
       
    PRIMARY KEY  (id),
       
    KEY `username` (`username`)
    ENGINE=InnoDB


    CREATE TABLE profile (
       
    id INT(11AUTO_INCREMENT,
       
    user_check  varchar(20NOT NULL,
       
    opz1 varchar(100NOT NULL,
       
    opz2 TINYINT(1)  NOT NULL DEFAULT '0',
       
    opz3 TINYINT(1)  NOT NULL DEFAULT '0',
       
    opz4 TINYINT(1)  NOT NULL DEFAULT '0'
       
    PRIMARY KEY (id),
       
    INDEX users_key (user_check),
       
    FOREIGN KEY (user_checkREFERENCES users(username)
       
    ON DELETE CASCADE
    ENGINE=InnoDB
    Ho fatto una prova ma continuano a non interagire le due tabelle.
    Quando elimino il record nella tabella users non elimina il corrispettivo nella tabella profile.
    Giusto per aggiungere un dettaglio, l'operazione è questa:
    DELETE FROM `SqlXXXXXX`.`users` WHERE `users`.`id` = 2 LIMIT 1


    Visto che non hai tempo di studiarti le guide consigliate, perchè non usi qualche GUI tipo phpmyadmin per fare tutte le operazioni?
    Io uso il database di Aruba (non so se potevo fare il nome ma non so come dirlo), dici che si può utilizzare phpmyadmin?

    Le due query che hai postato sono di esempio? perchè devi filtrare i dati prima di passarle alla query, pena errori e sql_injectpion
    Ma che significa??

    Per il discorso di relazionare il campo id numerico, sono d'accordo con Mashin
    Il problema è che in un ipotetico campo id_user nella tabella profile bisogna inserire l'id della tabella users (giusto?)... ma se l'id della tabella users me lo genera in automatico come posso andare a riempire il campi id_user in profile?

    Non so se hai capito o ho solo creato piu' confusione
    ...ehm... il discorso fila, ma come rispondevo a Enoa, dovrei riempire il campo id_user in profile non conoscendo cosa inserire...
    Matteo Coletta - fotografia
    Fotografo Lanciano - Fotografia a Lanciano e Pescara

  9. #19
    Utente di HTML.it L'avatar di Enoa
    Registrato dal
    Jul 2005
    Messaggi
    573
    Io uso il database di Aruba ....
    Le puoi creare tabelle InnoDB ?

    In questa query sembri passare i valori direttamente senza eseguire alcun controllo ne escape:
    codice:
    INSERT INTO users (nome,cognome,username,password,email,key_control) VALUES ('$_POST[nome]','$_POST[cognome]','$_POST[username]','$password','$_POST[email]','$key_control')";
    questo ti espone all'sql_injection e ad errori, se il nome dell'utente ($_POST[nome]) è pippo d'agostino, la query non verrà eseguita.

    esiste la funzione php mysql_insert_id() che ti dice qual'è il valore assunto dalla colonna auto-increment durante l'ultima query eseguita, http://it.php.net/manual/en/function...-insert-id.php

  10. #20
    Utente di HTML.it L'avatar di Enoa
    Registrato dal
    Jul 2005
    Messaggi
    573
    Non puoi creare InnoDB

    Bello, nemmeno errori o warning durante il create table restituisce
    Immagini allegate Immagini allegate

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.