2013-02-16 38 views
0

如果有人能够帮助我解决这个问题,我真的很感激它 - 我几乎已经开始工作了!读取会话变量以写入数据库

基本上,我做了一段时间我自己的应用程序想法,我这样做的原因是因为我是编程新手,所以我觉得它会教我很多关于不同的元素(即添加,更新和删除记录)。

所以在这个例子中,我有一个用户登录成功,并且它创建了一个正在被其他表单传递的会话。我希望他们能够增加一笔交易 - 我几乎拥有这笔交易,但似乎与其中一部分斗争。

我的HTML代码:

<!DOCTYPE html> 
<html> 
<head> 
<title>Find A Deal</title> 
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0"/> 
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css" /> 
<link rel="stylesheet" href="http://localhost/findadeal/themes/deal.css" /> 
<style> 
    #login-button { 
     margin-top: 30px; 
    }   
</style> 
<script src="http://www.dragan-gaic.info/js/jquery-1.8.2.min.js"></script>  
<script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script> 
<script src="js/custom3.js"></script> 
<script src="js/custom4.js"></script> 

     <?php 
    if(!isset($_SESSION)){ 
    session_start(); 
     } 

    if(isset($_SESSION['username'])){ 
     /* User is logged in */ 
     echo "IT WORKS!"; 
     } ?> 

</head> 


<body> 
<div data-role="page" id="login"> 
    <div data-theme="a" data-role="header"> 
     <h3>Find A Deal</h3> 
    </div> 

    <div data-role="content"> 

     <label for="username">Enter your username:</label> 
     <input type="text" value="" name="username" id="username"/> 
     <label for="password">Enter your password:</label> 
     <input type="password" value="" name="password" id="password"/> 
     <a data-role="button" id="login-button" data-theme="b">Login</a> 
    </div> 

    <div data-theme="a" data-role="footer" data-position="fixed"> 

    </div> 
</div> 

<!--Newly rendered page after successful login!--> 

<div data-role="page" id="index"> 
    <div data-theme="a" data-role="header"> 
     <h2>Find A Deal</h2> 
    </div> 

    <div data-role="content"> 

      <?php 
    if(!isset($_SESSION)){ 
    session_start(); 
     } 

    if(isset($_SESSION['username'])){ 
     echo "IT WORKS!"; 
     } ?> 


    <h3></h3> 
    <a href="#view" data-role="button" data-icon="search">View Deals</a> 
    <a href="#add" data-role="button" data-icon="plus">Add Deals</a> 

    </div> 
</div> 

<!--View Deal Page--> 

    <div data-role="page" id="view"> 
    <div data-role="header"> 
     <h2>Find A Deal</h2> 
    </div> 

    <div data-role="content"> 

      <?php 
    if(!isset($_SESSION)){ 
    session_start(); 
     } 

    if(isset($_SESSION['username'])){ 
     echo "IT WORKS!"; 
     } ?> 


    <h3></h3> 
    <p>test so I know I'm onto a new page</p> 
    <a href="#view" data-role="button" data-icon="search">View Deals</a> 
    <a href="#add" data-role="button" data-icon="plus">Add Deals</a> 
    </div> 

<div data-role="footer"> 

</div> 
</div> 

<!--Add Deal Page--> 

    <div data-role="page" id="add"> 
    <script src="js/custom4.js"></script> 
    <div data-role="header"> 
     <h2>Find A Deal</h2> 
    </div> 

    <div data-role="content"> 

      <?php 
    if(!isset($_SESSION)){ 
    session_start(); 
     } 

    if(isset($_SESSION['username'])){ 
     echo "It's working!"; 
     } ?> 

    <label for="name">Deal Name:</label> 
     <input type="text" value="" name="name" id="name"/> 
     <label for="desc">Description</label> 
     <input type="text" value="" name="desc" id="desc"/> 
     <a data-role="button" id="submit-button" data-theme="b">Submit</a> 
    </div> 





</div> 
</body> 
</html> 

所以才解释说 - 第一页是一个登录页面,它带给你的旁边指数这仅仅是一个菜单页面我已经成立了,然后从该菜单可以选择2页中的1页 - 查看交易并添加交易。我现在正在与增加交易一分钟。

添加交易时,用户将交易名称和说明输入到相关文本框中,以便将其添加到数据库中。 我使用这个js函数:

//Adding a new deal 

$(document).on('pagebeforeshow', '#add', function(){ 
$('#submit-button').on('click', function(){ 
    if($('#name').val().length > 0 && $('#desc').val().length > 0){ 
     userObject.name = $('#name').val(); // Put username into the object 
     userObject.desc = $('#desc').val(); // Put password into the object 
     // Convert an userObject to a JSON string representation 
     var outputJSON = JSON.stringify(userObject); 
     // Send data to server through ajax call 
     // action is functionality we want to call and outputJSON is our data 
     ajax.sendRequest({action : 'add', outputJSON : outputJSON}); 
    } else { 
     alert('Please fill all nececery fields'); 
    } 
});  
}); 

$(document).on('pagebeforeshow', '#index', function(){ 
if(userObject.name.length == 0){ // If username is not set (lets say after force page refresh) get us back to the login page 
    $.mobile.changePage("#add", { transition: "slide"}); // In case result is true change page to Index 
} 
$(this).find('[data-role="content"] h3').append('Deal Added:' + userObject.name); // Change header with added message 
//$("#index").trigger('pagecreate'); 
}); 

// This will be an ajax function set 
var ajax = { 
sendRequest:function(save_data){ 
    $.ajax({url: 'http://localhost/findadeal/login/json3.php', 
     data: save_data, 
     async: true, 
     beforeSend: function() { 
      // This callback function will trigger before data is sent 
      $.mobile.showPageLoadingMsg(true); // This will show ajax spinner 
     }, 
     complete: function() { 
      // This callback function will trigger on data sent/received complete 
      $.mobile.hidePageLoadingMsg(); // This will hide ajax spinner 
     }, 
     success: function (result) { 
      if(result == "true") { 
       $.mobile.changePage("#index", { transition: "slide"}); // In case result is true change page to Index 
      } else { 
       alert('Deal Addition has been unsuccessful, please try again!'); // In case result is false throw an error 
      } 
      // This callback function will trigger on successful action 
     }, 
     error: function (request,error) { 
      // This callback function will trigger on unsuccessful action     
      alert('Error has occurred, please try again!'); 
     } 
    }); 
} 
} 

// We will use this object to store username and password before we serialize it and send to server. This part can be done in numerous ways but I like this approach because it is simple 
var userObject = { 
name : "", 
desc : "" 
} 

这将随后被输送到一个PHP文件,准备将输入写入到数据库这样的:

<?php 

$var1 = $_REQUEST['action']; // We dont need action for this tutorial, but in a complex code you need a way to determine ajax action nature 
$jsonObject = json_decode($_REQUEST['utputJSON']); // Decode JSON object into readable PHP object 

$name = $jsonObject->{'name'}; // Get name from object 
$desc = $jsonObject->{'desc'}; // Get desc from object 

mysql_connect("localhost","root",""); // Conect to mysql, first parameter is location, second is mysql username and a third one is a mysql password 
@mysql_select_db("findadeal") or die("Unable to select database"); // Connect to database called test 

$query = "INSERT INTO deal (dname, description) VALUES ('$name' ,'$desc')"; 
$result=mysql_query($query); 
$num = mysql_numrows($result); 

if($num != 0) { 

    echo "true"; 

} else { 

    echo "false"; 

} 
?> 

这一切工作正常,但是,数据未被插入到数据库的原因是因为它需要用户名中的用户名存储在会话变量中的ID。

我想帮什么用是:

有人能告诉我你是怎么从会话变量获取数据,并把它带过来给PHP文件。 2.此外,会话变量正在存储用户名 - 有没有一种方法可以自行检查其相关的userid标记,还是必须通过PHP文件中的SQL语句来完成。

我希望我没有造成任何困惑,我已经明确了自己有什么问题。我是一名学生,所以在学习过程中,所有的帮助将受到赞赏!我觉得应该把会话数据通过JavaScript函数像其他数据一样去思考,或者是否应该能够直接读取写入PHP文件或什么? =/

谢谢你的时间!

+0

如果您已经有HTML输出,则无法正确处理会话。请确保您在撰写HTML – 2013-02-16 12:19:11

+0

Hi @ axel.michel的任何一行之前启动会话(在每个页面上),谢谢您的评论。我没有正确处理会话吗?我有一个session_start()变量上的PHP登录正在阅读,然后我有会话if语句工作沿所有其他页面呈现的变量举行? 到目前为止,它似乎一直在为我工作?如果有其他事情我应该寻找? – user2025934 2013-02-16 12:22:34

+0

你为什么不尝试cookies? – rohitarora 2013-02-16 12:30:47

回答

0

如果我理解的很好,那么您现在更感兴趣的是现在学习的东西,而不是创建应用程序。我建议你一次尝试学习一件事,在单独的测试文件中学习,当你掌握了必要的知识后,再将所有的知识结合到一个应用程序中,让你学到的所有东西都应用到真实的人生测试中。

我正在做一名教练,并且培养了很多学生,并帮助他们认识了一些他们可以引以为傲的产品,所以如果您有兴趣逐一学习,我想我可以帮助您,如果你喜欢。

+0

这将是非常好的你,谢谢! 做一件件一件事是我迄今为止的结构我的学习! (这也是为什么我不去打破可能需要我年纪才能工作的东西:P) 我刚刚结束了把所有的东西放在一起后,我得到一块工作,看到练习的整体流程,这是阶段我在。我已经完成了用户注册,并且我将它用作几乎相同的概念(将数据写入数据库),但我试图找出的是我如何将usersid写入该表中,并且它也存储在会话变量 – user2025934 2013-02-16 12:38:26

+0

很多我想做的事情,然后转移到学习的下一步,围绕着看到哪个用户登录并呈现特定于他们的ID等数据的想法存在很多 - 这就是为什么学习如何在这个变量中工作锻炼将帮助我在稍后的阶段将其操纵给其他人! – user2025934 2013-02-16 12:39:59

0

如果我得到你的逻辑是正确的,你必须做这样的事情:

上的登录HTML/PHP页面开始:

<?php 
    if(!isset($_SESSION)){ session_start(); } 
?> 
THE REST OF YOUR CODE FOLLOWS HERE 

在你登录行动PHP脚本,再次:

<?php 
    if(!isset($_SESSION)){ session_start(); } 
    // now you look up your user - how ever you do this... 
    // might be something like this... 
    // this is not a real function it should just demonstrate 
    // the possible logic. 
    if(!isset($_SESSION['userid'])) { 
     // you just have to check in case no session userid is set: 
     function getUser($username, $password) { 
      $db = new PDO("mysql:host=".DBHOST.";dbname=".DBNAME, DBUSER, DBPASS); 
      $sql = 'SELECT id FROM users WHERE username=:username AND pwd=:pwd'; 
      $statement = $db->prepare($sql); 
      $statement->bindParam(':username', $username, PDO::PARAM_STR); 
      $statement->bindParam(':pwd', $password, PDO::PARAM_STR); 
      $statement->execute(); 
      $result = $statement->fetch(PDO::FETCH_ASSOC); 
      if(!empty($result)) { 
       return $result['id']; 
      } 
      return false; 
     } 
     // call your login logic (here getUser) and 
     // if you have a result, set the session... 
     $userExists = getUser($_POST['user'], $_POST['pwd']); 
     if($userExists) { 
      $_SESSION['userid'] = $userExists; 
     } 
    } 
?> 

在这笔交易中的行动,再次:

<?php 
    if(!isset($_SESSION)){ session_start(); } 
    // you check if the username session exists 
    if(isset($_SESSION['userid'])) { 
     // in case you have... 
     // proceed with your deal logic 
     // and use $_SESSION['userid'] to fill it to the DB 
    } 
?> 
+0

Hi @ axel.michel - 感谢您的回应。 有一个你的答案的元素,我想我可以使用。但是,我可以问你吗,我的用户将他们的用户名和密码输入登录表单并点击登录。在您给我的登录操作PHP脚本中,是否只需要将“THE_USER_ID”提交到数据库中并将其保存到会话中?就像它会读取它并保存它一样,而不需要用户在第一个地方输入确切的字段? – user2025934 2013-02-16 12:45:31

+0

@ user2025934我不确定是否正确地得到您的问题。尽管我已经更新了我的答案。我发布的内容不是一个工作脚本,它是一个基本的HowTo。假设您有一个登录逻辑,用于测试用户是否存在,并在成功时返回用户标识。这是您保存在会话中的内容,然后您可以使用它,您可以在所有其他PHP文件中读取此值(只要您开始会话)即可。不需要用户再进行交互。 – 2013-02-16 13:06:08