2016-07-19 11 views
0

私は「メンバー」と呼ばれるデータベースと「ユーザー」というテーブルを持っています。ユーザーがサインアップしたときにIDを取得し、そのIDを使用して表のすべての行ではなく、その表の1つのユーザーの詳細を表示する必要があります。 これは私のサインアップコードです:PHPを使用してSQLデータベースから1行を表示

<?php 
    $con = mysql_connect("localhost","root",""); 
    if (!$con) 
    { 
     die('Could not connect: ' . mysql_error()); 
    } 

    mysql_select_db("members", $con); 

    $sql="INSERT INTO users (name, email, address, dob, password) 
    VALUES('$_POST[name]','$_POST[email]','$_POST[address]','$_POST[dob]','$_POST[mypassword]')"; 

    if (!mysql_query($sql,$con)) 
    { 
     die('Error: ' . mysql_error()); 
    } 

    { 
     header ("Location: sign_in.php"); 
     exit; 
    } 

    mysql_close($con) 
    ?> 

そして、これは私の表示テーブルのコードです:

<?php 

    // Create connection 
    $conn = new mysqli("localhost", "root", "", "members"); 
    // Check connection 
    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 
    } 

    $sql = "SELECT name, email, address, dob FROM users"; 
    $result = $conn->query($sql); 

    if ($result->num_rows > 0) { 
     echo "<table><tr><th>Name</th><th>Email</th><th>Address</th>  <th>DOB</th></tr> id-"; 
     // output data of each row 
     while($row = $result->fetch_assoc()) { 
      echo "<tr><td>".$row["name"]."</td><td>".$row["email"]."</td><td>".$row["address"]."</td><td>".$row["dob"]."</td></tr>"; 
     } 
     echo "</table>"; 
    } else { 
      echo "<p>No Details</p><style>p{color: #336699; font-size: 20pt; font-family: Gulim; font-weight: bold; align: center; padding: 10px; position: absolute; top: 80; left: 560; z-index: 2; border-spacing: 0px;}</style> "; 
    } 
    $conn->close(); 
    ?> 
+0

[mysql_ *関数](http://php.net/manual/en/ref.mysql.php)と['mysqli'関数]を混ぜてはいけません(http://php.net /manual/en/ref.mysqli.php)。 mysqliに固執する。 [mysql' PHP拡張機能](http://php.net/manual/en/function.mysql-connect.php)は死んでいます。 – axiac

答えて

0

は、IDのような任意の列名は、「ユーザ」テーブルにあるのでしょうか?それ以外の場合は、最初のすべての列に名前「ID」の列を作成し、自動インクリメントに設定します。その後、

クエリでループを実行し、各ページの先頭にID

1

を取得し、セッションを開始します。

session_start(); 

これは、ユーザーのブラウジングセッションに関するデータを保存および取得することができますブラウザとサーバーの間のすべての要求に渡って

新しいアカウントを作成するときは、新しいIDを取得します。あなたのusersテーブルにプライマリIDがあると仮定します。他のページ(ユーザーの詳細が表示されます1)で

$sql="INSERT INTO users ..."; 

if (!mysql_query($sql,$con)) die('Error: ' . mysql_error()); 

//Must have called session_start() already. This data 
//will be accessible from other pages 
$_SESSION['userID'] = mysql_insert_id(); 

header ("Location: sign_in.php"); 
exit; 

、ユーザーのIDを取得し、ちょうどそのユーザのレコードを取得するためにそれを使用する:

session_start(); 
... 
//TODO: make sure the user is signed in before you proceed! 

//Retrieve the user's id from storage 
$userID = $_SESSION['userID']; 
... 

//this assumes that the primary id column is named id. Adjust if needed 
$sql = "SELECT name, email, address, dob FROM users WHERE id=$userID" 
... 

このクエリの結果を持っている必要がありますちょうど1列。他の人がmysql_機能から離れて移動することを検討、あなたに言ったように

  1. :あなたは、あなたのHTML

    その他の注意事項を移入するためにそれを使用することができます。彼らは最新のPHPから削除されているので、デッドコードです。

  2. については、もっとも間違いなく学んでいます。ユーザーの提供する値を直接SQLクエリに挿入することは非常に悪いセキュリティです(INSERTクエリを参照)。あなたはSQLインジェクションにオープンしており、あなたのDBは簡単に引き継ぐことができます。
+0

ありがとう@BeetleJuice、私は正しい軌道にいると思うが、それを理解できない。とにかく私はあなたが仕上げのタッチで私を助けてうれしい場合は、直接あなたに連絡することができますか? –

+0

元の質問の解決に問題がある場合(ユーザーがサインアップした後に新しいページのDBから1行だけを選択して表示するにはどうすればいいですか)、ここで説明を求めてください。それ以上の問題がある場合(例えば、 'mysql'をmysqliに変換するときや準備された文を使うときのエラー)、新しい質問を開きます。そして、あなたは大歓迎です。私の答えが最初の問題の解決策につながる場合は、必ずそれを選択してください。ハッピーコーディング。 – BeetleJuice

+0

あなたが私に与えたコードをすべて追加しましたが、それは 'else'コンテンツを表示しているだけで、存在しないものを取得しているようです。私の 'users'テーブルにプライマリIDがありますが、まだ動作していません –

関連する問題