Wie gehen solche Urls? http://beispiel.com/o7ftv6

  • Hallo,
    ich frage mich schon länger ob Urls aus Buchstabenmischungen
    und Zahlen mit folgenden Anforderungen gehen.


    • Urlid sollte sich automatisch verlängern, wenn für die Ziffern/Zahlen keine weiteren Möglichkeiten mehr vorhanden sind.
    • Urlid sollte nicht erst in der Datenbank auf bestehen abgefragt werden müssen.


    Wie würde der Algorythmus hierfür aussehen und wie könnte man dies erreichen?

    Danke

  • Achso sorry , na wenn du db nicht dabei abfragen willst würde ich mit zeit arbeiten :)

    Die Frag ist, darf man die ID erraten?

    Dann zb die Aktuelle Zeit in Microtime, dann zb die ersten paar Zahlen wegnehmen und zb die letzten zahlen um wandeln zb 9 steht für E 8 für F

    Sprich du hast so eine Zeit 1251200912 dann schneidest die 1251 weg ider so dann hast 200912 und dann zb den wert umdrehen und dann vllt jede 2te Zahl in Buchstabe umwandeln, sei kreativ


    mfg

  • String in Integer umwandeln?
    Ich schreib mal was:


    Du kannst dann einen ganz normalen INT UNSIGNED PRIMARY KEY nehmen. Für die Url wandelst du ihn dann per convertToString() um, wenn du die Url bekommst, verwendest du convertToInt(). Ganz einfach. ;)
    Du kannst natürlich weitere Zeichen hinzunehmen, _, Sonderzeichen... Deutsche Umlaute etc. in UTF-8 sind allerdings problematisch, weil sie mehrere Bytes einnehmen.

  • Schonmal was von lesen gehört. Hör bitte auf hier zu spammen und
    mach die Augen auf.

    Du mich auch, ich hab dir ne Lösung gegeben wenn du irgentwas net verstehst oder irgentwas von Anfordungs laberst selber schuld sollen dir halt andere helfen


    ade

  • @ The User
    Danke für den Lösungsvorschlag.

    Ich habe mir das ganze jetzt einige Minuten angeguckt,
    aber noch nicht alles verstanden.

    Was macht den folgendes:

    PHP
    $chars[$int & $l]

    Und warum der Int Wert durch die Stringlänge abgerundet wird,
    verstehe ich auch noch nicht.

    PHP
    $int = floor($int / $l);

    Wenn die ID beispielsweise 13 ist.
    Die Ziffern 29 Zeichen lang sind.
    ABRUNDEN(13/29) = 0
    [0,44827586206896551724137931034483]
    Hier würde wenn ich das richtig sehe ja nur die 1 umgewandelt.
    Bei den anderen Sachen geht es hingegen, dass keine 0 rauskommt,
    wenn Beispielsweise die ID 500 ist.

    Hast du Mathe studiert? ^^

  • Was das macht? Ein Vertipper sein. :D Es muss so heißen:

    PHP
    $chars[$int % $l]

    Schau mal hier. Das versteht man auch als Schüler. :D

    Das Verfahren ist nicht 100%ig optimal, da es soetwas wie "führende Nullen" gibt. Ist 'a' die 0 (0te Stelle in $chars), dann ist 'aaa23' das selbe wie '23'. Aber der Verlust ist nicht allzu groß. Ansonsten wird alles ausgenutzt. Eine 0 wird nunmal gebraucht.

  • Achso die Sache mit den Zahlensystemen kenne ich ja auch noch.
    Okalt, Hexal, Binär, BCD, Real Format, Integer ...
    Ich kann mich noch erinnern was wir da damals alles mit gemacht
    hatten :D

    Edit:

    ich habe gerade schon geguckt aber finde keine Ursache woran es liegen könnte.

    Zitat

    Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 33292265 bytes) in C:\xampp\htdocs\algo.php on line 21

    Einmal editiert, zuletzt von Darkxor (17. Mai 2009 um 17:27)

  • Also bei mir klappt es...
    Also mal mein Test:

    Achso:
    Wenn du leere Strings zulassen willst, musst du bei convertToInteger eine solche Abfrage einbauen.

  • Hallo,
    ich habe eben noch eine sehr einfache Möglichkeit herausgefunden
    wie optimal diese ist weiß ich noch nicht in meinem Test war es aber
    recht akzeptabel:

    Ergebnis:

    Zitat

    25 : MjU=
    3546148 : MzU0NjE0OA==

  • Kannst ja auch microtime nehmen oder eine beliebige Zahlenfolge. Dann wandel das um per md5 oder sha1. Aber falls du das wieder zurückwandeln willst, ist TheUser's Möglichkeit die beste.

  • Schonmal was von lesen gehört. Hör bitte auf hier zu spammen und
    mach die Augen auf.

    Das find ich ja mal gar nicht OK er wollte dir helfen,

    halt mal die Füße still !!

    Du, Nase !

    und ich werde von Moderatoren angemacht weil ich jemanden aus Spaß,
    du Nase genannt habe, aber deine Aussage geht ja mal gar nicht !

    Ist das dein Dank !