Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    11

    MYSQL - Inserimenti duplicati

    Ciao

    ho sviluppato un piccolo sito web per la gestione di attività per cui tutti possono inserire attività, aggiornarne la pianificazione, eliminarle etc etc.
    Non so perchè ma a volte (capita randomicamente) quando inserisco un record questo viene inserito due volte (per cui devo cancellarne uno).
    Ad esempio vedete il codice che ho inserito sotto, è per inserire nuovi utenti nella tabella "utenti", quando clicco su salva mi trovo (ma solo a volte) due record uguali.
    La stessa cosa mi capita anche in altre pagine che inseriscono dati in altre tabelle.
    Gli "include" iniziali servono solo per verificare che l'utente che sta facendo l'inserimento sia autorizzato.
    Se serve allego anche quello, ma non dovrebbe essere il colpevole.
    Qualcuno sa dirmi perchè?
    Se può servire il sito è in hosting su Aruba.

    Ciao e grazie
    giorgio


    <?php
    include_once("include/config.php");
    include_once("include/auth.lib.php");

    list($status, $user) = auth_get_status();
    ?>


    <html>
    <head>
    <title>Ricerca</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

    <style>
    <!--
    #foldheader{cursor:pointer;cursor:hand ; font-weight:bold ;
    list-style-image:url(fold.gif)}
    #foldinglist{list-style-image:url(list.gif)}
    //-->
    </style>

    </head>


    <body>
    <?php // Verifica di autenticazione
    if ($status != AUTH_LOGGED) {
    header ("Refresh: 3;URL=index.html"); ?>
    <table width="94%" border="0">
    <tr>
    <td width="23%" height="112"> </td>
    <td width="74%"> </td>
    <td width="3%"> </td>
    </tr>
    <tr>
    <td> </td>
    <td>
    <fieldset><legend>Login</legend>
    <font size="+2"><br>
    <?php echo ("<br>Non sei autenticato.<br><br>Attendi..."); ?>
    </font>
    </fieldset></td>
    <td> </td>
    </tr>
    <tr>
    <td> </td>
    <td> </td>
    <td> </td>
    </tr>
    </table>

    <?php
    exit;
    }else{

    header ("Refresh: 1;URL=gestisciutenti.php?uid=".$user['uid']."&order=cliente");

    ?>

    <table width="92%" border="0">
    <tr>
    <td width="25%"><img src="images/Windgrande.bmp" width="100" heigth="100"> </td>
    <td width="74%"><div align="center"><font color="#FF0000" size="8" face="Arial, Helvetica, sans-serif">Service
    Management</font></div></td>
    <td width="1%"> </td>
    </tr>
    <tr valign="top">
    <td><br><br><?php include_once ("include/menu.php"); ?></td>
    <td>

    <?php
    $query="INSERT INTO utenti (nome, cognome, username, password, tipo_utente) VALUES (
    '".$_GET['nome']."',
    '".mysql_real_escape_string($_GET['cognome'])."',
    '".$_GET['username']."',
    '".$_GET['password']."',
    '".$_GET['tipo_utente']."');";
    mysql_query($query, $conn_ID) or die(mysql_error());
    ?>

    <fieldset><legend>Salvataggio in corso</legend>
    <font size="+2"><br>
    <br>Utente in corso di inserimento.<br><br>Attendi...
    </font>
    </fieldset></td>

    </td>
    <td> </td>
    </tr>
    <tr>
    <td> </td>
    <td> </td>
    <td> </td>
    </tr>
    </table>

    <?php
    } // Fine IF verifica autenticazione
    ?>

    </body>
    </html>

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Non è che quelle volte che ti inserisce dei duplicati è perché fai un refresh della pagina?

    Comunque, se avessi ben progettato il db, avresti associato ad ogni record, oltre all'id univoco (primary key), anche dei campi unique, per esempio il nome utente e l'indirizzo email.
    In tal caso anche se ci fosse un tentativo di secondo inserimento, questo fallirebbe perché violerebbe l'unicità del campo username e/o email e/o altri campi.

    p.s.: quando posti del codice, racchiudilo nei tag [code] o [php] così si legge meglio e prima di inviare il messaggio visualizza l'anteprima per assicurarti che sia formattato correttamente.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    11
    Nessun refresh, clicco su salva e mi trovo due record uguali eccetto l'ID Auto Increment.
    Comunque grazie, il discorso dei primary key lo adotto subito, da neofita non ci avevo pensato.
    Il problema però è che mentre per una tabella di username è semplice (non ha senso creare due username uguali), per l'elenco delle attività meno.
    Non sono esperto di MySQL, è possibile impostare un controllo di unicità su un'insieme di campi anzichè su un singolo campo? (in effetti non è una domanda da HTML ma magari qualcuno può aiutarmi).

    Per i tag sorry, mi sono dimenticato.

    ciao
    giorgio

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Sì, si può.
    Esempio
    codice:
    CREATE TABLE prova (
        id INT UNSIGNED AUTO INCREMENT PRIMARY KEY,
        campo1 VARCHAR(40),
        campo2 VARCHAR(255),
        campo3 INT,
        KEY(campo1,campo3)
    );
    ora la coppia campo1, campo3 è univoca, non potranno mai esistere 2 record con tale coppia uguale.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    11
    Grande!
    grazie

Tag per questa discussione

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.