Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
PHP - Problema con una funzione
Forum - PHP - Problema con una funzione

Avatar
Bonny (Member)
Expert


Messaggi: 435
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 12:13
Venerdì, 16/09/2011
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:
Codice sorgente - presumibilmente Php

  1. <?php
  2.  
  3. $tabella = "articoli";
  4.  
  5. $var = fopen("campoID.txt", "r");
  6. $record = file("campoID.txt");
  7. fclose($var);
  8.  
  9. for ($j = 0; $j < count($record); $j++) {
  10.  
  11.     echo $record[$j];
  12.     echo '<br/>';
  13. }
  14. echo '<br/>';
  15. $id = generaID($tabella, $record);
  16.  
  17.  
  18. echo $id;
  19.  
  20. function generaID($tipo, $records) {
  21.  
  22.     $dim = count($records);
  23.     $codice = "";
  24.     $code = "";
  25.  
  26.     switch ($tipo) {
  27.  
  28.         case 'articoli':
  29.             $codice = "ART";
  30.             break;
  31.  
  32.         case 'sorgenti':
  33.             $codice = "COD";
  34.             break;
  35.     }
  36.  
  37.     $flag = true;
  38.  
  39.     while ($flag == true) {
  40.  
  41.         $code = $codice;
  42.         $num = mt_rand(2, 3);
  43.         $code = $code . $num;
  44.  
  45.         for ($i = 0; $i < $dim; $i++) {
  46.  
  47.             if (strcmp($code, $records[$i]) == 0) {
  48.                 $flag = true;
  49.                 $i = $dim + 10;
  50.             } else {
  51.                 $flag = false;
  52.                 $i = $dim + 10;
  53.             }
  54.         }
  55.     }
  56.     return $code;
  57. }
  58.  
  59. ?>


in questo caso dovrebbe generare solo il codice ART3
invece genera anche ART2
Dove sbaglio?
potete darmi qualche indicazione o suggerimenti


Bonny
PM
Avatar
albertking82 (Member)
Pro


Messaggi: 112
Iscritto: 14/08/2006

Up
1
Down
V
Segnala al moderatore
Postato alle 23:15
Domenica, 18/09/2011
Il ciclo while aggiustalo cosi :

Codice sorgente - presumibilmente PHP

  1. $flag=true;
  2. while ($flag)
  3. {
  4.     $code=rand($min,$max);
  5.     $flag=false;
  6.     for($i=0;$i<$dim;$i++)
  7.      {
  8.          
  9.          if($code==$records[$i])
  10.                    {
  11.                     $flag=true;
  12.                     $i=$dim+1; //esco dal ciclo
  13.                    }
  14.      }
  15. }


Ultima modifica effettuata da albertking82 il 18/09/2011 alle 23:16
gazie Albertking82 ;) - Bonny - 20/09/11 15:40


Albertking82
PM
Avatar
Mte90 (Member)
Guru


Messaggi: 1144
Iscritto: 25/03/2008

Up
-2
Down
V
Segnala al moderatore
Postato alle 14:00
Venerdì, 16/09/2011
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.

Lo so come funziona mt_rand e se è come dici tu in teoria dovrebbe andare in loop infinito - Bonny - 16/09/11 15:45
ringrazio tutti per i meno due - Mte90 - 17/09/11 17:02


http://www.mte90.net/
Kde, Debian e Programmazione web/Desktop!


Linux Counter.li #482442
PM