Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Base
    Registrato dal
    Apr 2001
    Messaggi
    822

    Generazione di codici alfanumerici

    ... per l'esattezza ne devo generare 25000 ognuno di 10 cifre alfanumeriche e inserire come id univoco in una tabella mysql

    per generare i codici non ho problemi... non so però come unirli ad uno script che mi faccia degli INSERT con un ciclo for... per 25mila volte...

    allora, ad esempio, questo script mi genera 1 codice alfanumerico di 10 caratteri (l'ho "prelevato" da un'altro thread, mi sembra buono):
    Codice PHP:

    function CreateCode($Length,$Elements) {
    mt_srand((double)microtime()*1000000); 
    $sCode="";
    for(
    $i=0;$i<$Length;$i++) 
    $sCode .= $Elements
    mt_rand(0,strlen($Elements)-1) ]; 
    return 
    $sCode;
    }

    echo(
    CreateCode(10,"1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ")); 
    tenendo conto che includo la connessione al db all'inizio, e debba inserire in record differenti nella tabella "miatabella"...come proseguo con lo script? mi sapreste aiutare?
    grazie.

  2. #2
    Utente di HTML.it L'avatar di Base
    Registrato dal
    Apr 2001
    Messaggi
    822
    ho provato così:
    Codice PHP:
    include('db.php');

    function 
    CreateCode($Length,$Elements) {
    mt_srand((double)microtime()*1000000); 
    $sCode="";
    for(
    $i=0;$i<$Length;$i++) 
    $sCode .= $Elements
    mt_rand(0,strlen($Elements)-1) ]; 
    return 
    $sCode;
    }
    for (
    $j=0;$j<=25;$j++){
    $codice = (CreateCode(10,"1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"));
    mysql_query("INSERT INTO miatabella (id_codice) VALUES ('$codice')") or die("Query Fallita: " mysql_error());

    ma mi da errore: Query Fallita: Duplicate entry '0' for key 1

    nessuno mi sa aiutare?

  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Vuol dire che è stato generato un codice identico a un altro già inserito in tabella. Prova a fare così:

    Codice PHP:
    <?php
    for ($i=1;$i<=100;$i++)
    {
    $codice = (CreateCode(10,"1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"));
    $query mysql_query("select id_codice from tabella where id_codice = '$codice' ") or die(mysql_error());
    if (
    mysql_num_rows($query) == 0)
    $query2 mysql_query("insert into tabella (id_codice) values ('$codice') ") or die(mysql_error());
    }

    ?>
    Cicla per un numero limitato di volte perchè dubito riesca ad inserire in 30 secondi 25000 record, per giunta con la probabilità che debba generare più codice in caso di eguaglianza.

  4. #4
    Utente di HTML.it L'avatar di Base
    Registrato dal
    Apr 2001
    Messaggi
    822
    Originariamente inviato da nicola75ss
    Vuol dire che è stato generato un codice identico a un altro già inserito in tabella. Prova a fare così:

    Codice PHP:
    <?php
    for ($i=1;$i<=100;$i++)
    {
    $codice = (CreateCode(10,"1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"));
    $query mysql_query("select id_codice from tabella where id_codice = '$codice' ") or die(mysql_error());
    if (
    mysql_num_rows($query) == 0)
    $query2 mysql_query("insert into tabella (id_codice) values ('$codice') ") or die(mysql_error());
    }

    ?>
    Cicla per un numero limitato di volte perchè dubito riesca ad inserire in 30 secondi 25000 record, per giunta con la probabilità che debba generare più codice in caso di eguaglianza.
    mi da lo stesso errore....

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Originariamente inviato da Base
    mi da lo stesso errore....
    Mi sembra molto strano. A rigor di logica una volta che fa la select e trova anche un solo record con id uguale a quello generato dalla tua funzione non esegue la query2 di inserimento.
    Mi spiace, sicuramente qualcuno saprà consigliarti meglio.

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