0

私は、ユーザーログイン可能なモバイルアプリケーションを構築し、それを行うためにPhoneGap、jQuery Mobile、AJAX、およびPHPを使用することを任されます。私は幾分簡単に始め、基本的なHTMLとPHPの構造を構築しようとしています。私はプログラマーではないので、このようなことはあまり経験がありません。しかし、私のシンプルなユーザーログインフォームでさえ、正しく動作していません。シンプルなjQueryモバイル/ AJAXログイン

私は、ユーザーのログインページ(sampleindex.html)となる次のHTMLコードを持っている:

<!doctype html> 
<html> 

<head> 

<meta charset="UTF-8"> 

<title>Untitled Document</title> 

<link rel="stylesheet" type="text/css" href="/themes/P32-Manager.css"> 
<link rel="stylesheet" type="text/css" href="/themes/jquery.mobile.icons.min.css"> 
<link rel="stylesheet" type="text/css" href="http://code.jquery.com/mobile/1.4.5/jquery.mobile.structure-1.4.5.min.css">  
<link rel="stylesheet" type="text/css" href="/themes/jQuery-Overrides.css">  
<link rel="stylesheet" type="text/css" href="/css/styles.css"> 

<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script> 
<script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script> 

<script> 
function userLogin(email) { 
    if (email == "") { 
     document.getElementById("logincontainer").innerHTML = ""; 
     return; 
    } 
    else { 
     if (window.XMLHttpRequest) { 
      xmlhttp = new XMLHttpRequest(); 
     } 
     else { 
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     xmlhttp.onreadystatechange = function() { 
      if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
       document.getElementById("logincontainer").innerHTML = xmlhttp.responseText; 
      } 
     }; 
     xmlhttp.open("GET","samplehome.php?UserName="+email,true); 
     xmlhttp.send(); 
    } 
} 
</script> 

</head> 

<body> 

<div data-role="page" id="logincontainer"> 

    <form action="sampleindex.html" method="get"> 

     <div style="text-align:center; display:inline-block;"> 

      <div data-role="fieldcontain" style="text-align:center; position:relative; top:0em; left:0.5em; width:100%; margin:auto; border:0;"> 
       <label for="username" style="display:block; width:350px; text-align:left;">Username (Email) 
       <input data-clear-btn="false" name="UserName" type="text" value="" class="ui-input-text" style="height:40px; font-size:18px;"> 
       </label> 
      </div> 

      <div data-role="fieldcontain" style="text-align:center; position:relative; top:-1.25em; left:0.5em; width:100%; margin:auto; border:0;"> 
       <label for="password" style="display:block; width:350px; text-align:left;">Password 
       <input data-clear-btn="false" name="Password" type="password" value="" class="ui-input-text" autocomplete="off" style="height:40px; font-size:18px;"> 
       </label> 
      </div> 

     </div> 

     <div data-role="fieldcontain" style="text-align:center; position:relative; top:-0.5em; left:-1em; width:100%; margin:auto; border:0;"> 
      <div id="login-button" style="position:relative; left:0em; width:300px; height:62px; margin:auto; border:0; background-color:#ffffff;" data-inline="true"> 
       <input data-role="button" name="loginbutton" type="submit" value="Login" style="position:absolute; left:0em;" onClick="userLogin(UserName);"> 
      </div> 
     </div> 

    </form>   

</div> 

</body> 

</html> 

私たちは、ファイルメーカーを使用している(あなたを怖がらせることせてはいけない - それはに十分似ていますプログラマが何が起きているのかを理解できるはずのMySQL)とFileMaker PHP APIを使用してデータベースをモバイルアプリケーションに接続することができます。データベースは "included" dbaccess.phpファイル(ここには示されていません)を介して接続され、使用されるレイアウトは "Demo php"と呼ばれます。 URLに渡す最初の値、つまり電子メールアドレスの形式は「UserName」と呼ばれ、「UserName」というデータベース列に対応しています。 URLからUserNameを$ _GETして、対応する "FirstName"を返します。それ以降、私は、送信されたクエリに対応するデータベース行からRecordIDを取得したいので、ログインしている各ユーザーに特定の情報を提供できます。 (まだセキュリティについてあまり心配していない私はちょうどそれゆえ形で「取得」、概念実証を示してしようとしているよう。)

はここに私のPHPファイル(samplehome.php)です:

<?php 
session_start(); 
$_SESSION['logged-in']=0; 
?> 

<?php 

include ("../../dbaccess.php"); 

$username = urldecode($_GET['UserName']); 

if(isset($_GET['loginbutton']) and (!empty($_GET['UserName']) and !empty($_GET['Password']))) 
{ 
$username = '==' . urldecode($_GET['UserName']); 
$password = md5($_GET['Password']); 
$request = $fm->newFindCommand('Demo php'); 
$request->addFindCriterion('UserName', $username); 
$request->addFindCriterion('Password', $password); 
$result = $request->execute(); 

if (FileMaker::isError($result)) 
    { 
    $request = $fm->newFindAllCommand('Demo php'); 
    $result = $request->execute(); 
    } 

$found = $result->getFoundSetCount(); 

$records = $result->getRecords(); 

if($found == 1) 
    { 
    $_SESSION['logged-in']=1; 

    echo '<table border="1"> 
       <tr> 
        <th>First Name</th> 
       </tr>'; 

    foreach ($records as $record) 
    { 
     echo '<tr>'; 
     echo '<td>' . $record->getField('FirstName') . '</td>'; 
     echo '</tr>'; 
    } 

    echo '</table>'; 

    } 

else 
    { 
    $_SESSION['logged-in']=0; 

    echo 'nope'; 
    } 

} 

?> 

現在、「ログイン」をクリックすると何も返されません。これは、jQueryのテーマの背景色を持つ空白のページだけです。 (この空白の結果は、jQueryスタイルシートとスクリプトを使用していない場合にも発生します)。「get」を使用しても、URLには何も渡されません。私が想定しているのは、jQueryとAJAXを使っているからです。誰でも何が間違っているのかを知ることができます(また、AJAX/jQueryでページがリフレッシュされていないにもかかわらず、 "UserName"などの渡されたID値を使用する方法もあります)。

ありがとうございます。

答えて

0

入力した値を正しく参照していないと思います。ここ

onClick="userLogin(UserName);" 

ユーザー名を持っていますが、このコンテキストでは、ユーザー名は、私の知る限り、未定義であるjavascriptの変数、です。あなたのuserloginの機能で

は、あなたが最初のものは次のとおりです。この場合は

function userLogin(email) { 
    if (email == "") { 
     document.getElementById("logincontainer").innerHTML = ""; 
     return; 
    } 

(ユーザー名が未定義だったので)、電子メールが定義されていないとJavaScriptが真である、と「」未定義の比較、および空白あなたのページを出す。

UserName入力の値を渡すか、関数から値を取得する必要があります。

まず、ユーザー名の入力にIDを割り当てます。

<input data-clear-btn="false" name="UserName" type="text" value="" class="ui-input-text" style="height:40px; font-size:18px;" id="UserName"> 

を、その後、あなたのonclickを変更:

初期のhtmlブランキングを過ぎてあなたを取得する必要があります
onClick="userLogin(document.getElementById('UserName').value);" 

。それ以降に何が起こるかわからない。

ユーザー名フィールドが空白の場合にページをリロードする必要がないように、HTMLブランキングをアラートなどで置き換えることもできます。

+0

マークありがとうございます。私はそれを働かせることができませんでした。 UserName入力と改訂されたonClick行にIDを追加した後でもまだ空白のページが表示されています。テキストフィールドに何も入力せずに[ログイン]ボタンをクリックすると、結果のページにも空白が読み込まれます。ところで、私はURLのUserNameフィールドと呼ばれるものが重要ですか?私はその特定の大文字を使用したばかりです。これは、フィールドの列がサンプルデータベースにあったためです。私は、何が渡され、ちょうど名前であるかを基本的に理解していることはわかりません。 – prophile

+0

私はJSフィドルを作って、もう少しあなたを得ることができます。 https://jsfiddle.net/xh6651my/あなたのフォームとあなたのフィールドにIDを入れます。私はあなたの機能を一般的なvaildate関数に変更しました。私は値を渡すのではなく関数からの入力を参照します。私はあなたのajaxと要素参照をjquery表記法に変換しました。あなたが既にページにそれを含めているからです。私はこれが役立つことを願っていますあなたは、あなたがあなたのPHPページが探しているものと一致する必要がありますあなたのURLにしたいあなたの変数に名前を付けることができます。私はターゲットページを持っていないので、フィドルは完全に機能していないことに注意してください。 –

関連する問題