2013-03-26 55 views
1
<?php 
if(isset($_REQUEST['fname'],$_REQUEST['age'],$_REQUEST['lname'])) 
{ 
    $file=fopen("guns.txt","w"); 
    $str1=$_POST["fname"]; 
    $str2=$_POST["lname"]; 
    $age=$_POST["age"]; 
    $chr="pussy"; 
    $cat="cat"; 
    vfprintf($file,"%s %s is %d years old",array($str1,$str2,$age)); 
    echo sprintf("HEY check out %1\$s %1\$s %2\$s %2\$s",$chr,$cat); 
    fclose($file); 
} 
else 
{ 
    echo "<form action='hill.php' method='post'> 
    Enter your First Name:<input type='text' name='fname'></input><br> 
    Enter your Last Name:<input type='text' name='lname'></input><br> 
    Enter your Age:<input type='text' name='age'></input><br> 
    <input type='submit' value='Submit'></input> 
    </form>"; 
} 
?> 

給定的代碼是從hill.php文件isset功能令人失望的結果

我不知道什麼是錯的,但我的isset功能不能正常工作 我不想被隨後填充的所有條目唯一出發以迴應輸入if語句的消息。

請幫幫我。

+5

define *無法正常工作* ... – UnholyRanger

+0

究竟是什麼問題? 「工作不正常」不是很好的描述。它做錯了什麼?你真的設置了什麼'$ _REQUEST'變量(你是否使用'print_r'或'var_dump'來檢查它們是否符合你的期望?) – Spudley

+1

@RocketHazmat不,它不是http://php.net/ manual/en/function.isset.php – Tchoupi

回答

0

改爲使用empty()(docs)可能會很好,它將爲空字符串和null之類的內容返回true。如果數組鍵在那裏,那麼isset()將對某些「falsy」值返回true。

但是我們應該注意,僅僅驗證值的存在不應被視爲適當的輸入驗證。您可能希望爲每個字段引入更多語義驗證(例如「年齡」是整數?)

+0

Isset僅針對NULL返回false,而不針對空字符串。 $ _REQUEST不可能保存NULL值。 – Evert

+0

@Evert。它們更可能包含空字符串,這就是爲什麼我建議空的原因。我編輯我的答案刪除「和null」,謝謝你的提示。 –

+0

如果「允許」值爲「0」,empty()可以/將炸燬你。 'empty(0)== true'。這是一個應該避免的braindead功能。 –

2

您正在使用vprintf()不正確。它確實將不是輸出到文件句柄。格式爲:

vprintf($format_string, array($args)); 

RTLM:http://php.net/vprintf

你應該有,代替:

$formatted = vprintf('%this %that', array($this, $that)); 
$alt_format = sprintf('%this %that', $this, $that); // alternative 
file_put_contents('yourfile.txt', $formatted); 
+0

@Mark B先生我不認爲vfprintf中有任何問題,它的工作方式正確。您可以查看http:\\ www.w3schools.com並搜索vfprintf()。其語法與我寫的相同。我覺得問題出在isset()中。 –

+0

@chetanmehta:w3fools是無用的一塊廢話。我鏈接到實際的PHP站點文檔(** OFFICIAL **文檔,而不是w3morons噴出的可憐的垃圾),它明確指出沒有文件句柄是通過vprintf()的參數傳遞的。如果你想讀w3fools,它**也沒有提及任何關於文件句柄的事情。 –

+0

主席先生,我知道你是否正在故意或有意地這樣做,但你每次都錯誤地將我的VFPRINTF()寫成vprintf(),這是單獨的,甚至在W3school的vprintf()中也是如你所寫。 –

0

檢查您的錯誤日誌。 運行上述結果的代碼:

Warning: fopen(guns.txt) [function.fopen]: failed to open stream: Permission denied in ... on line 4 

Warning: vfprintf() expects parameter 1 to be resource, boolean given in ... on line 10 
HEY check out pussy pussy cat cat 
Warning: fclose() expects parameter 1 to be resource, boolean given in ... on line 12 

你isset功能正常工作。另外,在你的問題被編輯之前,你最後在?>之前有一個'

+0

我要求你的觀點Sir.But或多或少我總是直接進入if()語句,除了第一次提交表單時給出的所有條目,所以文件'guns.txt'是在指定的wamp的www目錄。該文件顯示的結果與wanted.Everything完全正確的文件。 –