2012-04-10 20 views
-1

アンドロイドアプリを使用してPHPスクリプトにデータを送信しています。以下はPHPスクリプトです。PHP Post変数が機能しない

telejoke.php:

<?php 
    include 'JokeValidation.php'; 
    include 'DBConnect.php'; 

    $username = $_POST['username']; 
    $joke = $_POST['joke']; 
    $dbname = 'Telejoke'; 
    mysql_select_db($dbname); 

    if (validate()){ 
    $query = "INSERT INTO jokes (username, joke) VALUES ('$username','$joke')"; 
    mysql_query($query) or die('Error, insert query failed'); 
    } 
    mysql_close($conn); 
?> 

jokevalidation.php:

<?php 
    include 'DBConnect.php'; 
    $dbname = 'telejoke'; 
    mysql_select_db($dbname); 
    function validate(){ 
    if ($joke == null) return false; 
    else if($username == null) return false; 
    return true; 
    } 
?> 

何らかの理由で、私はif ($joke == null) return false;else if($username == null) return false;を取る際に、PHPスクリプトは、データベースにデータを入れます。しかし、これらの文をPHPコードに入れてみると、validateはfalseを返すようです。これは奇妙です。なぜなら、$ usernameと$ jokeは私がこれらの文を取り出すときに自分のデータベースに行きます。つまり、nullにすることはできません。

お手数ですが、ありがとう。

+1

どこからあなたがvarsを取​​得する検証メソッドですか? – Rufinus

+0

思考変数は文書スコープでした。 :P – moesef

+0

ヒント:DBConnect.phpファイルにinclude_onceを使用すると、複数の接続が作成されないようになります。また、jokevalidation.phpの外観からは、データベース接続も全く必要ありません(ただし、ただのスニペット)。 –

答えて

4

あなたの検証関数は$ jokeと$ usernameオブジェクトにアクセスする必要があります。

function validate($joke, $validate) { 
    if ($joke == null) 
     return false; 
    else if ($username == null) 
     return false; 
    return true; 
} 

また、あなたのvalidateメソッド内で、次を使用して、これらの変数へのアクセスを得ることができます

global $joke, $username 

はしかし、あなたが有効ではなく、あること、それらの変数に頼っているのかを宣言することをお勧めしますあなたのコードのどこかで宣言して設定します。 globalを使用すると、他の理由でサイレントに失敗することがあります。

2

変数はの機能範囲を持っています。変数$joke$usernameは、関数に宣言も関数も渡していないので、関数内には存在しません。関数のパラメータを使用してください:

function validate($joke, $username) { 
    ... 
} 

if (validate($joke, $username)) { 
    ... 
} 
+0

oh。私は彼らに文書の範囲があると思った。明確化のためのThx。 – moesef

1

function validate($joke,$username)

また、あなたのdbにそれらを挿入する前に、それらのpostvarsをフィルタリングします。

関連する問題