2016-02-08 11 views
6

Wenn ich diese Funktion in einer anderen Datei aufruft, gibt die Funktion keinen eindeutigen Wert (einen inkrementierten Wert) zurück. Auch wenn ich diese Funktion in der gleichen Datei (wo die Funktion gemacht wird) echo, funktioniert es gut. Ich kenne das Konzept des Umfangs der statischen Variablen, wie ich bereits versucht habe, indem ich $ i durch $ _SESSION ['i'] aber kein erwartetes Ergebnis ersetze. Vielen Dank im Voraus.statische Variable wird nicht beim Aufruf der Funktion inkrementiert

+1

Jedes Mal, wenn genTokenNo() aufrufen, setzen Sie i 0 bis $. – mazedlx

+0

Nein, ich bekomme 00001 –

+0

Wenn ich Ihren Code versuchte, wird es jedes Mal +1 zurückgeben, wenn ich Funktion wie 'echo genTokenNo(); // 00001 echo "
"; echo genTokenNo(); // 00002 echo "
"; echo genTokenNo(); // 00003 echo "
"; echo genTokenNo(); // 00004' –

Antwort

2

Beachten Sie, dass der Wert $i nicht beibehalten wird. Wenn Sie also eine neue Anforderung an den Server senden, wird das Skript erneut geladen, und $i wird auf 0 zurückgesetzt.

Um die Variable in der Benutzersitzung zu behalten, verwenden Sie $SESSION['i'], aber wie Sie bereits versucht haben, wird dies pro Sitzung eindeutig sein, nicht global.

Um global eindeutige Nummer, die Sie auf der Festplatte speichern, müssen haben, fopen/flock/fread/fwrite/fclose Funktionen.

-1

, wenn die Funktion existiert dann den Wert der statischen Variablen verloren

if(isset($_SESSION['i'])) 
    $_SESSION['i']++; 
else 
    $_SESSION['i']=0; 
+0

Nein .. gleiche Ausgabe 00001. –

+0

das ist das richtige Format und ersetze statische Variable Abschnitt verwendet diese Session-Variable –

+0

Ja Ich habe es versucht, aber es gibt immer noch die gleiche Ausgabe. 00001 –

0

Für eine einzelne Anfrage sollte es funktionieren -

function genTokenNo() 
{ 
    static $i=0;  
    $i=$i+1; 
    return str_pad($i, 5, '0', STR_PAD_LEFT); 
} 

echo genTokenNo() . ' - ' . genTokenNo() . ' - ' . genTokenNo(); 

Ausgabe

00001 - 00002 - 00003 

Aber wenn Sie mehrere Male anfordern, wird der Wert bei jeder Anfrage zurückgesetzt und jedes Mal, wenn die Antwort die gleiche sein wird. Ich würde vorschlagen, den Wert in der Datenbank oder in irgendeiner Datei zu speichern. In diesem Fall wäre die Verwendung von seesion nicht zuverlässig.

+0

$ sql = "INSERT INTO SET TokenNo = '". GenTokenNo(). "'; Das ist die Verwendung von Funktion in secondfile.php. Ich versuche, die Ausgabe in der Datenbank zu speichern. –

+0

Also ich denke, sie sind in verschiedenen Anfragen. –

0

Ihre Struktur wird wie folgt aussehen:

file1.php

function genTokenNo() 
{ 
    static $i=0; 
    $i=$i+1; 
    return str_pad($i, 5, '0', STR_PAD_LEFT); 
} 

file2.php

include('file1.php'); 
//^^^^^^^^^^^^^^^^^^^ Include file before call that function. 

echo genTokenNo(); //00001 
echo "<br />"; 
echo genTokenNo(); //00002 
echo "<br />"; 
echo genTokenNo(); //00003 
echo "<br />"; 
echo genTokenNo(); //00004 
+0

Sir ich habe bereits die Datei in der anderen Datei enthalten. –

+0

@sadiamallick Können Sie bitte Sie Code wie ich gepostet in meiner Antwort, ich meine beide Dateien Code zu sagen .. –

+0

Sir ich habe geschrieben –

0

file1.php

file2.php

<?php 
include('file1.php'); 
$sql = "INSERT INTO table SET TokenNo='".genTokenNo()."' "; 
mysql_query($sql); 
?> 
Verwandte Themen