Kundennummer generieren - prüfen ob vorhanden

jackob100

Mitglied
Guten Abend

Wenn ich ein neuer Kunde erstellen möchte sollte dieser eine automatisch generierte Kundennummer erhalten.

PHP:
mt_srand(microtime()*1000000);
	$randvalkunde = mt_rand();
	$kunde = substr($randvalkunde, 0, 4);

es sollte nun überprüft werden ob die Nummer schon vergeben ist.

Die vorhandenen Nummern erhalte ich als Array.

PHP:
$Daten[0]['NUMMER'];

Mein Gedanke war eine Art Schleife die bei false wieder von neuem beginnt.
Doch meine bisherigen Versuche scheiteten.

Eine Idee?
 
Beim Eintragen machst du einfach davor eine Abfrage. Diese Überprüft ob schon die Kd Nr. existiert ;) Wenn sie existiert schaltest du eine Funktion dazwischen, die solange überprüft, ob die Kd.Nr existiert und wenn mal eine Nr nicht existiert wird diese Eingetragen und das Eintragen war komplett vollständig.
 
Idee:
PHP:
function generate_Kundennummer()
	{
	global $abstract;
    mt_srand(microtime()*1000000);
	$randvalkunde = mt_rand();
	$kunde = substr($randvalkunde, 0, 4);
    
	$queryDaten = "SELECT NUMMER FROM KUNDEN WHERE ID";
	$Daten = $abstract -> checkQuery ($queryDaten);
	
    if (in_array($kunde, $Daten))
		{
    	return generate_Kundennummer(); 
		}
	else
		{
        return $kunde;
    	}
	}

echo generate_Kundennummer();

Um das Script zu testen suche ich nach einer vorhandenen Zahl, also z.B. 9001
Eigentlich sollte jetzt die Meldung erscheinen: Vorhanden
doch es geschieht genau das Gegenteil

PHP:
function generate_Kundennummer()
	{
	global $abstract;
    mt_srand(microtime()*1000000);
	$randvalkunde = mt_rand();
	$kunde = substr($randvalkunde, 0, 4);
    
	$queryDaten = "SELECT NUMMER FROM KUNDEN WHERE ID";
	$Daten = $abstract -> checkQuery ($queryDaten);
	
    if (in_array('9001', $Daten))
		{
    	return "Vorhanden";
		}
	else
		{
        return "nicht Vorhanden";
    	}
	}

echo generate_Kundennummer();
 
Die Funktioniert einwandfrei...und liefert mir die gesuchten Datensätze im Array.

Und zwar so: z.B. $Daten[0]['NUMMER']

Und das ist glaub auch das Problem.
Suche ich geziehlt nach einem Wert, also so:

PHP:
if (in_array('9002', $Daten[2]))
        {
        return "Vorhanden";
        }

bekomme ich das was ich gerne möchte.

suche ich aber so:

PHP:
if (in_array('9002', $Daten))
        {
        return "Vorhanden";
        }

bekomme ich das falsche...
 
Ja is ja auch klar ;)

Die Funktion in_array prüft nicht auf mehreren Ebenen, sondern nur direkte Werte.

Schau, dass deine Checkquery Funktion ein Array erstellt, das so aussieht:

Code:
$array[0] = NUMMER1;
$array[1] = NUMMER2;
...


Gruß SimonErich
 
Kann ich aus "$Daten[0]['NUMMER']" nicht ein neues Array machen das so aus sieht:

$array[0] = NUMMER1;
$array[1] = NUMMER2;
...

Die Checkquery Funktion möchte ich nicht verändern...
 
Hi

Doch klar kannst du auch machen.
Ist halt dann naja etwas umständlich es in ein Format zu bringen und dann wieder in ein neues

Lass das Array doch einfach durch eine Schleife laufen und mach daraus ein neues.

Gruß SimonErich
 
So der Test funktioniert:
PHP:
function generate_Kundennummer()
    {
    global $abstract;
    mt_srand(microtime()*1000000);
    $randvalkunde = mt_rand();
    $kunde = substr($randvalkunde, 0, 4);
    
    $queryDaten = "SELECT NUMMER FROM KUNDEN";
    $Daten = $abstract -> checkQuery ($queryDaten);
	
	$vorhandene_Nummern = array();
	for ($zahl = 0; $zahl <= count($Daten); $zahl++)
		{
		$vorhandene_Nummern[] = $Daten[$zahl]['NUMMER'];
		}
    
    if (in_array('9002', $vorhandene_Nummern))
        {
        return "Vorhanden";
        }
    else
        {
        return "nicht Vorhanden";
        }
    }

echo generate_Kundennummer();

Fertiges Script:

PHP:
function generate_Kundennummer()
    {
    global $abstract;
    mt_srand(microtime()*1000000);
    $randvalkunde = mt_rand();
    $kunde = substr($randvalkunde, 0, 4);
    
    $queryDaten = "SELECT NUMMER FROM KUNDEN";
    $Daten = $abstract -> checkQuery ($queryDaten);
	
	$vorhandene_Nummern = array();
	for ($zahl = 0; $zahl <= count($Daten); $zahl++)
		{
		$vorhandene_Nummern[] = $Daten[$zahl]['NUMMER'];
		}
    
    if (in_array($kunde, $vorhandene_Nummern))
        {
        return generate_Kundennummer(); 
        }
    else
        {
        return $kunde;
        }
    }

echo generate_Kundennummer();

Vielen Dank an SimonErich...
 
Du musst das gar nicht rekursiv aufbauen, es geht auch iterativ:
PHP:
function generate_Kundennummer()
{
	global $abstract;
	mt_srand(microtime()*1000000);
	do {
		$kunde = substr(mt_rand(), 0, 4);
		$query = 'SELECT NUMMER FROM KUNDEN WHERE NUMMER="'.$kunde.'"';
		$result = $abstract->checkQuery($query);
	} while( count($result) );
	return $result[0]['NUMMER'];
}
 
Zurück