Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 28
  1. #1

    [PHP+MySQL] Come gestire più utenti nello stesso database

    Salve a tutti, avrei un quesito da proporvi.
    Ultimamente sto creando un sito dove c'è la necessità di avere una struttura simile per tutti i clienti registrati, infatti è un sistema di booking online per alberghi.
    Siccome sono già a buon punto, vorrei essere però in grado di procedere senza intoppi.
    Il mio sistema per ora è il seguente e fa uso di un solo database (pseudo-codice):
    Codice PHP:
    //quando si crea un nuovo cliente...
    create_user();
    //automaticamente si creano delle tabelle con il suo id all'inizio...
    $query "crea 1_tabella_struttura_stanza ";
    $query2""crea 1_tabella_prenotazioni "; 
    Ma come posso fare in modo che il sistema non abbia bisogno di creare ogni volta tabelle diverse con questi sistemi, che mi sembrano poco professionali?
    Come posso assegnare un db per ogni cliente o fare in modo che il tutto venga gestito in modo "professionale"?
    Ad esempio, mettiamo che su un sito io abbia un solo db a disposizione, come posso fare?
    E possibile dire su un hosting professionale di volere db illimitati a disposizione?
    Ho sentito inoltre che sia possibile partizionare il db, è questa la tecnica dei booking online tipo expedia? Lo partizionano e con il nome della partizione fanno lavorare il cliente?
    Grazie anticipate, siete grandi!

  2. #2
    up

  3. #3
    Posso inoltre dire che so come gestire più utenti tramite un sistema di ID con auto increment, ma non so in caso di cancellazione di un utente come cancellare ripristinare l'index.

  4. #4
    non è certo encessario un DB per ogni utente, anzi èp altissamemnte sconsigliata una cosa del genere! MySQL è un RDBMS cioè un database relazionale multi-utente che consente anche a centinaia di utenti contemporaneamente di entrare e fare quel che vogliono perchè ogni utente usa una ISTANZA o copia di mysql generata automaticamente dal server.
    Nel tuo caso bastano due tabelle tipo CLIENTE e PRENOTAZIONI. Te immetti i dati di un nuovo cliente e poi nella tabella prenotazioni inserisci l'ID di quel cliente e la sua prenotazione. Se poi vuoi cercare tutte le rpenotazioni di un cliente basta fare una bella query tipo

    SELECT * FROM prenotazioni WHERE ID_Cliente=12345

  5. #5
    Grazie della risposta, questo cmq lo sapevo... quello che non so è come fare a mantenere in perfetto ordine un db... nel senso che se cancello un utente, e quindi l'id se ne va, come posso fare per avere un database che abbia l'indice in ordine(1,2,3,ecc...) e non (1,3,ecc...), e come posso applicare lo stesso effetto di ottimizzazione alla tabella prenotazioni?

    @emulman: grazie... ed eventualmente per cercare in base alla data come mi consiglieresti di fare? Voglio dire, come si dovrebbe cercare in base alla data? Dovrei salvare la data in un database mysql in formato DATE o TIMESTAMP?

    Grazie infinite, guru !

  6. #6
    a che ti serve mantenere l'ordine negli id? credo a niente....
    Administrator of NAMDesign.Net

  7. #7
    Originariamente inviato da Nemesis_DaRk
    Grazie della risposta, questo cmq lo sapevo... quello che non so è come fare a mantenere in perfetto ordine un db... nel senso che se cancello un utente, e quindi l'id se ne va, come posso fare per avere un database che abbia l'indice in ordine(1,2,3,ecc...) e non (1,3,ecc...), e come posso applicare lo stesso effetto di ottimizzazione alla tabella prenotazioni?
    questo non è molto importante, se hai mesos l'ID come AUTO_INCREMENT allora non c'è certo bisogno di modificarlo ogni volta che cancelli un record, tanto ad ogni record nuovo viene generato un nuovo ID..quello è utile solo per fare ricerche!

    [QUOTE[ emulman: grazie... ed eventualmente per cercare in base alla data come mi consiglieresti di fare? Voglio dire, come si dovrebbe cercare in base alla data? Dovrei salvare la data in un database mysql in formato DATE o TIMESTAMP? [/QUOTE]

    sì, usa DATE o TIME così puoi fare ricerche come puoi vedere su http://dev.mysql.com/doc/refman/5.0/...nction_adddate
    ad esempio per avere il mese successivo a quello attuale scrivi

    SELECT DATE_ADD(NOW(), INTERVAL 31 DAY);

    Grazie infinite, guru !
    troppo umano lei...

  8. #8
    Anche se non ho ancora capito come usare la funzione che mi hai detto (penso che cmq a forza di sperimentare lo scoprirò ) come posso avere la data che mi serve per fare i confronti in mysql?
    Voglio dire, nel DB mysql le date hanno questo formato (anno-mese-giorno), giusto?
    Come posso, a partire da un input post generato automaticamente da un calendario (che già ho ottenuto, tipo selezioni l'input della data e ti appare il calendario, selezioni la data sullo stesso la data ti spunta sull'input, insomma un calendario che restituisce l'input della data), fare in modo che la data sia riconosciuta in mysql o funzione php di confronto?
    Dovrei usare una soluzione simile con un formato data così dal (01/12/2008) al (05/12/2008)
    Codice PHP:
    /*SCRIPT PER CONTROLLARE SE UNA CAMERA E' DISPONIBILE IN UN DETERMINATO PERIODO*/

    //data inizio periodo
    $INIdata explode("/",$_POST['data_inizio']);//data presa dal form inviato
    $INIgiorno int($INIdata[0]);//questo dovrebbe essere il giorno (01);
    $INImese int($INIdata[1]);//questo il mese (12);
    $INIanno int($INIdata[2]);//questo l'anno (2008);

    //data fine periodo
    $FINdata explode("/",$_POST['data_fine']);//data presa dal form inviato
    $FINgiorno int($FINdata[0]);//questo dovrebbe essere il giorno (05);
    $FINmese int($FINdata[1]);//questo il mese (12);
    $FINanno int($FINdata[2]);//questo l'anno (2008);

    //dovrei ricomporre nel formato che m'interessa, giusto?
    //quindi ricompongo il tutto per "combaciare" in mysql...
    $dataINI_per_mysql $INIanno."-".$INImese."-".$INIgiorno;

    $dataFIN_per_mysql $FINanno."-".$FINmese."-".$FINgiorno;

    $periodo = array();//mi creo un array per il periodo
    $disponibilita = array(); //un altro per la disponibilità

    //devo ancora pensare come fare una funzione per calcolare il $periodo, se potete gentilmente aiutarmi ve ne sarei grato...

    //in mysql potrei fare la query per vedere se un dato giorno è occupato tipo "DAL - AL"
    for ($i=0;$i<$periodo;$i++){ //penso che si debba fare con un ciclo for il controllo, giusto?

    $query="SELECT date FROM prenotazioni WHERE date='{$periodo[$i]}';";
    if (!
    $query) {
      
    $disponibilita[$i]=$periodo[$i]; //quel giorno si può prenotare;
     
    }else{
      
    $disponibilita[$i]=0//così mi sfrutto lo zero per dire "Non c'è dispobilità per quel giorno";
     
    }
    }

    //ho pensato che potesse uscire dall'eventuale funzione del periodo un array dove ogni slot è //una data calcolata in base al periodo... 
    Le mie domande adesso sono:
    1. Come fare per calcolare il periodo?
    2. Cosa sbaglio o come si calcola nella realtà una cosa del genere?
    3. E se avessi più di una camera lo stesso giorno (come nei booking che ti danno ad esempio 5 camere disponibili di quelle che hanno creato precedentemente).

    Grazie anticipate,

  9. #9
    la data in mysql viene memorizzata in effetti in formato americano, cioè come hai detto tu anno-mese-anno. Ma con in mezzo il trattino, non il / ricordalo..
    Se quindi chiedi una data in formato giorno-mese-anno puoi fare come hai fatto tu con explode o ancora meglio con la funzione date (http://it2.php.net/manual/en/function.date.php) :

    Codice PHP:
    $INIdata explode("/",$_POST['data_inizio']);//data presa dal form inviato 
    $INIgiorno int($INIdata[0]);//questo dovrebbe essere il giorno (1); 
    $INImese int($INIdata[1]);//questo il mese (12); 
    $INIanno int($INIdata[2]);//questo l'anno (2008); 
    $MYSQLdata date("Y-m-d"mktime(000$INImese$INIgiorno$INIanno));// scriverà 2008-12-01 
    la funzione MKTIME (http://it2.php.net/manual/en/function.mktime.php) rappresenta una dtaa in formato unix e unita a DATE puoi formattarla come meglio ti pare. Anzi, le due funzioni insieme ti permettono di fare calcoli su date, ad esempio

    Codice PHP:
    <?php
    echo mktime(000date("m")  , date("d")+1date("Y"));// visualizza il giorno domani
    echo mktime(000date("m")-1date("d"),   date("Y"));// visualizza la data di un mese fa
    echo mktime(000date("m"),   date("d"),   date("Y")+1);// visualizza la data fra un anno
    ?>

    IL metodo che scrivi per ottenere le disponibilitàò un buon mezzo ma forse è meglio confrontare due date. Avendo a disposizione $INIdata e $FINdata puoi scrivere

    Codice PHP:
    $query="SELECT date FROM prenotazioni WHERE date>='$INIdata' AND date <='$FINdata'"
    come risultato avrai un array con tutte le date comrpese fra quelle due.

  10. #10
    Grazie, sei un mito !
    Solo che non so come fare per quanto riguarda il sistema di controllo per gli utenti, tipo va bene una cosa come
    Codice PHP:
    //utente classificato come id=1
    le tabelle saranno allora create come:
    $query="CREATE TABLE {$id}_stanze_create_dal_cliente (id,nome,optionals)"
    Il problema nasce quando creo le tabelle delle prenotazioni, che sono associate all'ID della camera, come posso fare per non avere problemi in caso di cancellazione della camera? Devo per forza trasferire i dati in un'altra tabella prima di fare il DROP?

    E se avessi più di una camera lo stesso giorno (come nei booking che ti danno ad esempio 5 camere disponibili di quelle che hanno creato precedentemente)?

    Il momento è catartico :berto:

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