0

Kullanıcı girişi özellikli bir mobil uygulama oluşturmak ve bunu yapmak için PhoneGap, jQuery Mobile, AJAX ve PHP'yi kullanmakla görevlendirildim. Bir programcı olmadığımdan ve bu konuda çok fazla deneyime sahip olmadığımdan, basit bir şekilde basit bir HTML ve PHP yapısına geçmeye çalışıyorum. Ancak basit kullanıcı giriş formum bile düzgün çalışmıyor. o kadar benzer oluyor -Basit jQuery Mobile/AJAX oturum açma

<!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> 

Biz sizi korkutmak izin vermeyin FileMaker'ı (kullanıyorsanız:

ben kullanıcı giriş sayfası olarak görev yapacak aşağıdaki HTML kodu (sampleindex.html) sahip MySQL, programcıların neler olduğunu anlayabilmeleri gerekir) ve bu veritabanını mobil uygulamaya bağlamak için FileMaker PHP API'mız. Veritabanı "dahil" dbaccess.php dosyası (burada gösterilmemiştir) ile bağlanır ve kullanılan düzen "Demo php" olarak adlandırılır. URL'imde iletmek istediğim ilk değer, bir e-posta adresi biçimi "KullanıcıAdı" olarak adlandırılır ve "Kullanıcı Adı" adlı veritabanı sütununa karşılık gelir. URL'den Kullanıcı Adı’nın $ _GET’ini almak ve karşılık gelen "İlk Ad" ı döndürmek istiyorum. Bunun ötesinde, RecordID'yi gönderilen sorguya karşılık gelen veritabanı satırından almak istiyorum, böylece her oturum açmış kullanıcıya özel bilgilerini sunabiliyorum. (Henüz güvenlik konusunda çok endişeli değil sadece bu nedenle formda "get", kavramın bir kanıtı göstermeye çalışıyorum olarak.)

İşte benim PHP dosyası (samplehome.php) var:

<?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 temamın arka plan rengiyle boş bir sayfa" tıklattığımda şu anda hiçbir şey iade edilmiyor. (Bu boş sonuç, jQuery stil sayfalarını ve komut dosyalarını kullanmadığımda da ortaya çıkar.) URL'yi kullanmama rağmen URL'nin içinde bir şey yok. Benim jQuery ve AJAX kullanımı nedeniyle olduğunu varsayalım. Herkes neyin yanlış olduğunu (ve aynı zamanda, AJAX/jQuery ile yenilenemeyen sayfaya rağmen "UserName" gibi geçirilmiş ID değerlerini nasıl kullanabileceğimi biliyor mu?)

Şimdiden teşekkürler.

cevap

0

Girilen değeri doğru bir şekilde referans göstermiyorsunuz.

onClick="userLogin(UserName);" 

buradan UserName var, ancak bu bağlamda, KullanıcıAdı kadarıyla söyleyebilirim tanımlanmamış bir javascript değişken vardır. senin USERLOGIN fonksiyonunda

, yapmanız ilk şey şudur: (KullanıcıAdı tanımsız olduğu için)

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

, e-posta tanımlanmamış ve javascript tanımsız karşılaştırır doğrudur ve boşlukları olan "" için sayfanı dışarı.

UserName girdisinin değerini girmeniz veya işlevin değerini almanız gerekir.

ilk, kullanıcı adınız girişine bir kimlik atayın:

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

, sonra onclick değiştirin: İlk html karartma geçmiş seni almalısınız

onClick="userLogin(document.getElementById('UserName').value);" 

. Bundan sonra ne olacağını bilmiyorum.

Ayrıca, html boşluğunu bir uyarı veya bir şeyle değiştirmek isteyebilirsiniz; böylece kullanıcı adı alanı boşsa sayfayı yeniden yüklemeniz gerekmez.

+0

Mark, teşekkürler. Yine de işe yaramadı. Kullanıcı adı girişi ve gözden geçirilmiş onClick satırına ekledikten sonra hala boş bir sayfa alıyorum. Metin alanına doldurulmuş herhangi bir şey bile girilmeden Giriş düğmesine tıklandığında, sonuçta oluşan sayfa da yüklenir. Bu arada, URL'deki KullanıcıAdı alanını ne aradığım önemli mi? Bu özel kapitalizasyonu kullandım çünkü alanın sütunu örnek veritabanında bulunuyordu. Neyin geçtiğini ve neyin bir isim olduğunu anlamış olduğumu bilmiyorum. – prophile

+0

Tamam, umarım biraz daha ileriye götürecek bir JS Fiddle yaptım. https://jsfiddle.net/xh6651my/ Formunuza ve alanınıza bir kimlik koydum. İşlevinizi genel vaildate işlevine değiştirdim. Değerleri iletmek yerine, girdilerden işleve başvuruyorum. Ajax ve element referanslarınızı jquery notasyonuna dönüştürdüğünüz için zaten sayfada yer aldınız. Umarım bu yardımcı olur. Değişkenlerinizi isminiz üzerine yazabilirsiniz, sadece php sayfanızın aradığı şeyle eşleşmeniz gerekir. Hedef sayfalarım olmadığı için kemanın tamamen işlevsel olmadığını unutmayın. –