2010-12-28 10 views
0

ich den folgenden Code verwenden:ob_start() wird die Erfassung teilweise Daten

PHP:

// Generate Guid 
function NewGuid() { 
    $s = strtoupper(uniqid(rand(),true)); 
    $guidText = 
     substr($s,0,8) . '-' . 
     substr($s,8,4) . '-' . 
     substr($s,12,4). '-' . 
     substr($s,16,4). '-' . 
     substr($s,20); 
    return $guidText; 
} 
// End Generate Guid 

$Guid = NewGuid(); 

$alphabet = '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ';  

function base_encode($num, $alphabet) { 
    $base_count = strlen($alphabet); 
    $encoded = ''; 

    while ($num >= $base_count) { 

     $div = $num/$base_count; 
     $mod = ($num-($base_count*intval($div))); 
     $encoded = $alphabet[$mod] . $encoded; 
     $num = intval($div); 
    } 

    if ($num) $encoded = $alphabet[$num] . $encoded; 
     return $encoded; 
} 


function base_decode($num, $alphabet) { 
    $decoded = 0; 
    $multi = 1; 

    while (strlen($num) > 0) { 
     $digit = $num[strlen($num)-1]; 
     $decoded += $multi * strpos($alphabet, $digit); 
     $multi = $multi * strlen($alphabet); 
     $num = substr($num, 0, -1); 
    } 

    return $decoded; 
} 

// Ob start 
ob_start(); 
echo base_encode($Guid, $alphabet); //should output: bUKpk 
$theid = ob_get_contents(); 
ob_get_clean(); 

Das Problem:

Als ich echo $theid, es den kompletten Eintrag zeigt, aber, wie es Wird in die Datenbank eingefügt, wird nur der erste Eintrag in der Sequenz eingefügt, zB für den Eintrag buKPK, nur 'b' wird eingefügt, nicht der Rest.

+0

Ich bekomme das erwartete Ergebnis, wenn ich dies ausführen. – DampeS8N

+0

Ich verwirrt über den Zweck der Ob_start-Problemumgehung in diesem spezifischen Code. Warum "echo" du das Ergebnis, anstatt es direkt zuzuweisen? – mario

+0

Ich nahm an, er vereinfachte den Code, um das Problem zu isolieren. – DampeS8N

Antwort

4

Überprüfung der Zeichenlänge in der Datenbank (das heißt, wenn es varchar (10) stellen Sie sicher ist, dass Sie nicht mehr als 10 Zeichen in diesem Feld zu speichern)

+0

OK, das hat den Trick gemacht, ich benutzte int() anstelle von varchar ... danke shankhan. – AAA

2

Versuchen ob_end_clean() statt ob_get_clean() verwenden. Aufeinanderfolgende Aufrufe von ob_start() erzeugen "verschachtelte" Pufferkontexte; ob_get_clean() ruft den aktuellen Kontext ab und löscht ihn, beendet ihn jedoch nicht, sodass ein zweiter Aufruf von ob_start() einen zweiten verschachtelten Pufferkontext erstellt. In diesem Fall möchten Sie nur den Ausgabepuffer erfassen und dann den Erfassungskontext beenden.

+0

Danke Chris. Dadurch habe ich tatsächlich den zweiten Charakter bekommen, aber danach nichts mehr. – AAA

Verwandte Themen