Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Web Development
You last visited: Today at 14:47

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Überprüfung eines strings

Discussion on Überprüfung eines strings within the Web Development forum part of the Coders Den category.

Reply
 
Old   #1

 
Cookie1337™'s Avatar
 
elite*gold: 140
Join Date: Apr 2013
Posts: 72
Received Thanks: 20
Überprüfung eines strings

Hätte eine frage bezüglich der Überprüfung eines Strings, und zwar geht es darum das ein 32 Stelliger Zufallswert generiert wird aus zahlen und Buchstaben das ganze dient so zu sagen als wieder Erkennung.

PHP Code:
function generate_ID($laenge=32) {
$zeichen '123456789abcdefghijklmnopqgrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

 
$zufalls_string '';
    
$anzahl_zeichen strlen($zeichen);
    for(
$i=0;$i<$laenge;$i++)
    {
        
$zufalls_string .= $zeichen[mt_rand(0$anzahl_zeichen 1)];
    }
    return 
$zufalls_string;

Der Ausgabewert wird an einer anderen stelle in einer Datenbank abgespeichert, wie könnte ich das jetzt umsetzten das vor dem speichern des Strings überprüft wird ob der String schon vorhanden ist mit denen die schon in der Datenbank vorhanden sind, und ggf. bei vorhanden sein ein neuer 32 stelliger String generiert wird ?
Cookie1337™ is offline  
Old 04/13/2013, 19:05   #2
 
elite*gold: 0
Join Date: Apr 2005
Posts: 323
Received Thanks: 114
Für deinen Zweck wahrscheinlich sinvoller:


Per SELECT mit WHERE prüfen ob ein Datensatz mit diesem String/Hash vorhanden ist. Ggf. UPDATE:
MrPuschel is offline  
Thanks
1 User
Old 04/13/2013, 19:37   #3
 
JPGaming's Avatar
 
elite*gold: 169
Join Date: Jul 2011
Posts: 394
Received Thanks: 261
Also, wenn dir die 32 Zeichen egal sind, könntest du auch folgendes machen:

PHP Code:
$range array_merge (range ('a''z'), range ('A''Z'), range (09));
$string md5(rand(0count($range )); 
Daraufhin der Select
PHP Code:
$SQL "SELECT `needle` FROM `table` WHERE `key` = $string";
$return mysql_query($SQL); 
Du solltest den key in der Table indizieren, spart Zeit.
$return hat dann, je nachdem ob dieser existiert oder nicht, das Ergebnis worauf du prüfen kannst.

Ein Update kannst du wie folgt durchführen:
PHP Code:
$SQL "UPDATE`table` SET `key` = $string WHERE `needle` = 'DEINE NEEDLE'";
$return mysql_query($SQL); 
Auch hier bekommst du, sofern du sicherstellen willst, das du erfolgreich geupdated hast, einen Wert aus der Query.

Wenn du den Key einfach nur neu einfügen willst, oder ändern, ohne zu prüfen, ob dieser existiert, empfehle ich dir einen "REPLACE INTO". Spart Zeit.
JPGaming is offline  
Thanks
1 User
Old 04/13/2013, 21:26   #4
 
flickz.'s Avatar
 
elite*gold: 5
Join Date: May 2012
Posts: 589
Received Thanks: 139
PHP Code:
<?php

$db 
= new PDO("mysql:host=localhost;dbname=DATENBANK""root""passwort_halt");

function 
gen_key_32() {
    
$chars array_merge(range("A""Z"), range("a""z"), range(09));
    
$random null;
    for(
$i 0$i 32$i++) {
        
$random .= $chars[rand(0count($chars) - 1)];
    }
    return 
$random;
}

function 
key_exists_32($key$connection) {
    
$query $connection->prepare("SELECT * FROM TABELLE_HIER WHERE KEY_SPALTE = '{$key}'");
    
$db_h $query->execute();
    
$result $db_h->fetch(PDO::FETCH_ASSOC);
    
$length count($result);
    if(
$length >= 1) {
        return 
true;
    } else {
        return 
false;
    }
    return 
false;
}

$generated_key gen_key_32();
while(
key_exists_32($generated_key$db)) {
    
$generated_key gen_key_32();
}

//hier kannste den key ausgeben, abspeichern, whatever

?>
Habs nicht getestet, jedenfalls sollte dadurch ein String generiert werden der 32 Bytes lang ist und über while() wird immer wieder ein neuer Code generiert wenn er bereits in der Datenbank exestiert, andernfalls gehts ganz normal weiter und du kannst irgendwas mit "$generated_key" machen.
flickz. is offline  
Thanks
1 User
Old 04/14/2013, 10:49   #5
 
JPGaming's Avatar
 
elite*gold: 169
Join Date: Jul 2011
Posts: 394
Received Thanks: 261
Quote:
Originally Posted by flickz. View Post
PHP Code:
<?php

$db 
= new PDO("mysql:host=localhost;dbname=DATENBANK""root""passwort_halt");

function 
gen_key_32() {
    
$chars array_merge(range("A""Z"), range("a""z"), range(09));
    
$random null;
    for(
$i 0$i 32$i++) {
        
$random .= $chars[rand(0count($chars) - 1)];
    }
    return 
$random;
}

function 
key_exists_32($key$connection) {
    
$query $connection->prepare("SELECT * FROM TABELLE_HIER WHERE KEY_SPALTE = '{$key}'");
    
$db_h $query->execute();
    
$result $db_h->fetch(PDO::FETCH_ASSOC);
    
$length count($result);
    if(
$length >= 1) {
        return 
true;
    } else {
        return 
false;
    }
    return 
false;
}

$generated_key gen_key_32();
while(
key_exists_32($generated_key$db)) {
    
$generated_key gen_key_32();
}

//hier kannste den key ausgeben, abspeichern, whatever

?>
Habs nicht getestet, jedenfalls sollte dadurch ein String generiert werden der 32 Bytes lang ist und über while() wird immer wieder ein neuer Code generiert wenn er bereits in der Datenbank exestiert, andernfalls gehts ganz normal weiter und du kannst irgendwas mit "$generated_key" machen.
Bist du kritikfähig?

Wieso genau zählst du noch gleich die returns einer fetch? Wozu gibt es bools? emtpy functions?

md5 generiert automatisch einen 32'er Key. Wieso dann eine Foreach auf einen array merge 32 mal durchlaufen?
Wenn der Key in der Select bereits existiert, kann man die Funktion aus Rekursiv aufbauen. Dafür sind die Dinger da.

Dann sparst du dir auch diesen while Loop.
JPGaming is offline  
Reply


Similar Threads Similar Threads
String anhand eines anderen Strings ver/entschlüsseln
12/31/2012 - General Coding - 4 Replies
Hallo Leute, Da ich zwischen einer Android App (Java) und einem PHP-Skript Zeichenketten hin und her schicken muss suche ich eine Möglichkeit ein String anhand eines anderen Strings zu verschlüsseln und entschlüsseln. Diese Möglichkeite sollte sowohl in Java als auch in PHP funktionieren mir fällt allerdings keine Lösung ein. Gruß Yissu



All times are GMT +1. The time now is 14:47.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.