[PHP] Funktion erneut durchlaufen

Dieses Thema im Forum "Webentwicklung" wurde erstellt von furious1, 30. Dezember 2009 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 30. Dezember 2009
    Funktion erneut durchlaufen

    Hallo PHP-Freunde ;P

    stehe hier auf dem Schlauch. Diese Funktion erzeugt nen Code. Dieser soll einzigartig in der Tabelle sein. Deswegen prüfe ich, ob dieser bereits in der DB vorhanden ist.

    Code:
    function create_pID($length) {
    
     $dummy = array_merge(range('0', '9'), range('a', 'z'), range('A', 'Z'));
    
     // shuffle array
     mt_srand((double)microtime()*1000000);
    
     for ($i = 1; $i <= (count($dummy)*2); $i++) {
     $swap = mt_rand(0,count($dummy)-1);
     $tmp = $dummy[$swap];
     $dummy[$swap] = $dummy[0];
     $dummy[0] = $tmp;
     }
    
     $export_pID = substr(implode('',$dummy),0,$length);
    
    # $CheckDuplicate = mysql_query("SELECT pID FROM tabelle WHERE pID = '".$export_pID."'");
    # if(mysql_num_rows($CheckDuplicate)) {
    # [B]#funktion nochmal durchlaufen.[/B]
    # } else {
    # // get password
    # return $export_pID;
    # }
     return $export_pID;
    }
    Wie mache ich das am besten, dass er die Funktion, wenn mysql_num_rows zutrifft, nochmal durchläuft?

    Hoffe es ist verständlich erklärt.

    Gruß
     
  2. 30. Dezember 2009
    AW: Funktion erneut durchlaufen

    Hast du es schonmal versucht, an der von dir vorgesehenen Stelle einfach die Funktion neu aufzurufen?

    Gib an die Stelle einfach mal "create_pID();" ein und dann sollte das eigentlich funktionieren.

    Achtung: Is nur ne Quick & Dirty Lösung aber es klappt!
     
  3. 30. Dezember 2009
    AW: Funktion erneut durchlaufen

    Wie sieht es denn aus, wenn du das ganze nicht mit einer if Abfrage löst, sondern mit einer while schleife? Schleife läuft so lange und erstellt ne neue export_pID bis num_rows 0 ausgibt.


    Ist aber bestimmt auch eher dirty die Methode. Würde mir so aber einfallen als Variante 2.
    Eigentlich das gleiche nur, dass du die funktion nicht immer wieder neu aufrufst, sondern innerhalb ihr arbeitest.
     
  4. 30. Dezember 2009
    AW: Funktion erneut durchlaufen

    okay danke, werd das mal so stehen lassen wie #2 es gesagt hat.

    Danke euch beiden

    Noch eine andere Frage:

    Wieso bekomme ich bei einer Domain (bsp. .tk) keine $_GET Variable?

    Bsp: meinedomain.tk

    Dann ist $_GET['test'] aber leer. Woran kann das liegen?

    Gruß
     
  5. 30. Dezember 2009
    AW: Funktion erneut durchlaufen

    1. do-while - siehe code
    2. bsp.: "tk" => da bist in nem frame, vielleicht übergeben die den querystring einfach ned.

    PHP:
    <? php
    function  create_pID ( $length ) {
        do {
            
    $dummy  array_merge ( range ( '0' '9' ),  range ( 'a' 'z' ),  range ( 'A' 'Z' ));

            
    // shuffle array
            
    mt_srand ((double) microtime ()* 1000000 );

            for (
    $i  1 $i  <= ( count ( $dummy )* 2 );  $i ++) {
                
    $swap  mt_rand ( 0 , count ( $dummy )- 1 );
                
    $tmp  $dummy [ $swap ];
                
    $dummy [ $swap ] =  $dummy [ 0 ];
                
    $dummy [ 0 ] =  $tmp ;
            }

            
    $export_pID  substr ( implode ( '' , $dummy ), 0 , $length );
            
            
    //check
            
    $check   mysql_query ( '
                SELECT pID 
                FROM tabelle
                WHERE pid = "' 
    $export_pID  '"
            '
    );
        } while(
    mysql_num_rows ( $check ) >  0 );
        
        return 
    $export_pID ;
    }
     
  6. 30. Dezember 2009
    AW: Funktion erneut durchlaufen

    Danke für die schnelle Antwort!

    Funktioniert das dann so oder hab ich was falsch?

    Code:
    function create_pID($length) {
    
     $CheckDuplicate = mysql_query("SELECT pID FROM tabelle WHERE pID = '".$export_pID."'");
    
     do {
     $dummy = array_merge(range('0', '9'), range('a', 'z'), range('A', 'Z'));
    
     // shuffle array
     mt_srand((double)microtime()*1000000);
    
     for ($i = 1; $i <= (count($dummy)*2); $i++) {
     $swap = mt_rand(0,count($dummy)-1);
     $tmp = $dummy[$swap];
     $dummy[$swap] = $dummy[0];
     $dummy[0] = $tmp;
     }
    
     $export_pID = substr(implode('',$dummy),0,$length);
     return $export_pID;
     } while (!mysql_num_rows($CheckDuplicate));
    }
    Und das mit dem Frame.. Kann man das irgendwie umgehen oder hilft da nur ne andere Domain?

    Danke
     
  7. 30. Dezember 2009
    AW: Funktion erneut durchlaufen

    siehe edit von mir,

    das mit der domain kannst ned umgehen, da hilft nur ne echte domain oder du fragst beim tx-support nach.
     
  8. 30. Dezember 2009
    AW: Funktion erneut durchlaufen

    Danke vielmals

    edit: Um ?test= auszulesen hab ich nun folgendes benutzt:

    Code:
    # .TK Domain abfragen und nach ID filtern
    $url = $_SERVER['HTTP_REFERER'];
    $geturlID = str_replace('?ID=', '', strstr($url, '?ID='));
    if($geturlID) $refID = $geturlID; else $refID = NULL;
     
  9. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.