php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 25.04.2006, 13:32  
Erfahrener Benutzer
 
Registriert seit: 20.06.2003
Beiträge: 233
andrew22
Standard Gibt es eine bessere Möglichkeit ?

Code:
$kunden_id = '';
		for($i=1; $i<=7;$i++)
		{
			srand ((double) microtime() * 1000000);
			$kunden_id.=rand(1,9);
		}
damit erstelle ich eine 7 stellige Kunden ID .

Ich weiss nicht warum aber leider kam es jetzt ein paar mal vor das 2 unterschiedliche Kunden die gleiche Kunden ID haben was doch eigentlich fast unmöglich sein sollte ?!

wo könnte da der fehler sein bzw. gibt es noch eine bessere Variante eine siebenstellige Kunden ID zu erstellen als diese.

bzw. könnte man auch in der Datenbank schaun ob diese kunden id schon existiert wenn ja soll er hat ne neue erstellen etc. ?!

bin etwas schockiert
andrew22 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 25.04.2006, 13:35  
Gast
 
Beiträge: n/a
Standard

Du musst bei einem Zufallsgenerator immer damit rechnen, dass du auch mal identische Werte bekommst. Allerdings verstehe ich den Sinn auch nicht. Du solltest ein ID-Spalte mit auto_increment haben, damit hast du deine eindeutige ID.

Gruß
phpfan
 
Alt 25.04.2006, 13:39  
Erfahrener Benutzer
 
Registriert seit: 08.05.2005
Beiträge: 814
andy
andy eine Nachricht über ICQ schicken
Standard

Ja, du könntest nachschauen.

Und du kannst die Spalte auch auf Unique setzen,
dann kann ein Wert nicht zweimal gespeichert werden.

Oder du lässt den Kram mit dem manuellen Erstellen und lässt das auto-icement von mysql das machen.


Edit: too late...
__________________
Zitat:
Diese Erweiterung ist EXPERIMENTELL.
[...]
Seien Sie gewarnt und verwenden Sie diese Erweiterung auf eigenes Risiko..
andy ist offline  
Alt 26.04.2006, 07:08  
Erfahrener Benutzer
 
Registriert seit: 30.06.2008
Beiträge: 152
solitaer befindet sich auf einem aufstrebenden Ast
Standard

Habe mal vor Jahren in der Ausbildung gehört das das so eine Sache ist mit den Zufallszahlen.

Im Hintergrund liegt nämlich eine einfache Liste von durcheinander gereihten Zahlen.

Deswegen gibt es in manschen Programmiersprachen einen sogenanten
RANDOMIZE

Den gestartet mit der Zeit :

RANDOMIZE(TIMER)

setzt den Zeiger auf eine Position in dieser "Zufallsliste".

Startet man RND ohne Randomize, so bekommt man wenn man dies
zweimal an der gleichen Position macht, die gleiche "ZUFALLSZAHL"

Was ein Zufall?!

Vieleicht gibt es die Möglichkeit bei PHP auch ?

Nächste Möglichkeit wäre in der DB nachzusehen ob der Eintrag schon vorhanden ist, wenn ja, Zahl am Ende ++

Was sehr ungenau sein kann wenn Bspweise jemand seinen Usernamen

Wilhelm3

gibt. Soll ja vorkommen.

Andere Möglichkeit :

array_search

Aber das selbe Problem wie oben.

Ich würde keine Doppelnahmen zulassen. Ist glaube ich am Schönsten.

Stattdessen wie Beispielweise bei Hotmail :

Bei Doppeleinträgen Vorschläge machen :

1. Buchstabe von Vorname + Nachname
2. Vorname_Nachname
3. Vorname_1. Buchstabe von Nachname

Aber dann müssen die vorher in der DB geprüft sein.

Gruss,

Werner
solitaer ist offline  
Alt 26.04.2006, 09:43  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Welchen Sinn macht es denn überhaupt, eine Kundennummer durch Zufall zu erstellen?
Was spricht denn dagegen, den Wert der auto_increment Spalte in der DB zu nehmen?

Musst ja nicht bei 1 beginnen zu zählen - Kunde "3" klingt echt etwas mager, aber das lässt sich ja deixeln (+100)

Zu deiner letzten Frage:
http://de.php.net/mt_rand
Zitat:
Anmerkung: Seit PHP 4.2.0 ist es nicht mehr nötig, den Zufallszahlengenerator zu initialisieren, bevor man ihn benutzt.
Zergling-new ist offline  
Alt 26.04.2006, 10:01  
Erfahrener Benutzer
 
Registriert seit: 23.08.2007
Beiträge: 1.510
M3g4Star befindet sich auf einem aufstrebenden Ast
Standard

Ich würd das auc hso machen .. Also die ID nehmen aber vorher das ganze so bearbeiten:

PHP-Code:
<?php
$id
string_i 
sprintf("%04s",$id);

//"0001"
//"0002"
//...
//"0011"
?>
Damit das ganze dann "sortierbar" ist

Natürlich würde ich das ganze nicht nur mit 4 Stellen
sondern vielleicht mit 10 oder so machen ..
und wenn du verschiedene Geschäftszweige hast setzt einfach 'n präfix
M3g4Star ist offline  
Alt 27.04.2006, 02:45  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Zitat:
Habe mal vor Jahren in der Ausbildung gehört das das so eine Sache ist mit den Zufallszahlen.

Im Hintergrund liegt nämlich eine einfache Liste von durcheinander gereihten Zahlen.

Deswegen gibt es in manschen Programmiersprachen einen sogenanten
RANDOMIZE

Den gestartet mit der Zeit :

RANDOMIZE(TIMER)

setzt den Zeiger auf eine Position in dieser "Zufallsliste".
Das tut die Funktion srand() bereit durch übergabe der Systemzeit. Desweiteren nutzen die meisten Zufallsfunktionen bereits die Systemzeit zur Initialisierung (wenn nich anders angegeben), wodurch es mittlerweile oftmals unnötig ist sie zu intialisieren.
KingCrunch ist offline  
Alt 27.04.2006, 07:54  
Erfahrener Benutzer
 
Registriert seit: 30.06.2008
Beiträge: 152
solitaer befindet sich auf einem aufstrebenden Ast
Standard

Jou.

Genau das habe ich doch gesagt und wurde von Zergling auch schon bestätigt :



Anmerkung: Seit PHP 4.2.0 ist es nicht mehr nötig, den Zufallszahlengenerator zu initialisieren, bevor man ihn benutzt.
solitaer ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
bessere Firewall als XP Anubis2183 Off-Topic Diskussionen 15 28.03.2006 21:19
das bessere Datenbankschema micbur Datenbanken 1 29.12.2005 14:18
Bilderstellung aus einem Text - bessere Qualität? PHP Tipps 2005-2 7 11.09.2005 18:11
Undefined Index Problem. Bessere Loesung als diese? PHP-Fortgeschrittene 8 30.12.2004 11:24
[Erledigt] Das bessere Template-System PHP-Fortgeschrittene 7 23.09.2004 14:50
BCC Versand bei mail() funktioniert nicht PHP-Fortgeschrittene 4 09.09.2004 13:31
mit php bessere Bildqualität? Rotti PHP Tipps 2004 2 14.08.2004 09:36

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php mt_rand ungenau

Alle Zeitangaben in WEZ +2. Es ist jetzt 14:54 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.