Oppure

Loading
16/09/11 10:13
Bonny
salve ragazzi sto cercando si implementare uno script che generi delle chiavi primarie univoche
in un file di testo chiamato campoID dove le righe sono le seguenti:

ART77339
ART2
ART88367
ART8267
ART83527899
ART1234
ART988766666
COD678
COD2639
COD6543999
COD536372828
ART647281035666
COD3

lo script php è il seguente:
<?php

$tabella = "articoli";

$var = fopen("campoID.txt", "r");
$record = file("campoID.txt");
fclose($var);

for ($j = 0; $j < count($record); $j++) {

    echo $record[$j];
    echo '<br/>';
}
echo '<br/>';
$id = generaID($tabella, $record);


echo $id;

function generaID($tipo, $records) {

    $dim = count($records);
    $codice = "";
    $code = "";

    switch ($tipo) {

        case 'articoli':
            $codice = "ART";
            break;

        case 'sorgenti':
            $codice = "COD";
            break;
    }

    $flag = true;

    while ($flag == true) {

        $code = $codice;
        $num = mt_rand(2, 3);
        $code = $code . $num;

        for ($i = 0; $i < $dim; $i++) {

            if (strcmp($code, $records[$i]) == 0) {
                $flag = true;
                $i = $dim + 10;
            } else {
                $flag = false;
                $i = $dim + 10;
            }
        }
    }
    return $code;
}

?>

in questo caso dovrebbe generare solo il codice ART3
invece genera anche ART2
Dove sbaglio?
potete darmi qualche indicazione o suggerimenti
aaa
16/09/11 12:00
Mte90
mt_rand se non sbaglio in questo modo prende tutti i valori tra 2 e 3 escluso 3.
guarda la documentazione sul sito di php.
aaa
18/09/11 21:15
albertking82
Il ciclo while aggiustalo cosi :


$flag=true;
while ($flag)
{
    $code=rand($min,$max);
    $flag=false;
    for($i=0;$i<$dim;$i++)
     {
	  
         if($code==$records[$i])
		   {
		    $flag=true;
		    $i=$dim+1; //esco dal ciclo
		   }
     }
}

Ultima modifica effettuata da albertking82 18/09/11 21:16
aaa