-1

Adobe Flex を使用して、PHP 経由でユーザーをデータベースに正常に送信しています。次に、PHP を変更して、まずユーザーがデータベースに存在するかどうかを確認する必要があります。存在する場合は、いくつかのフィールドを更新しますが、それらが新しい場合は、ユーザーを完全に作成する必要があります。存在しないユーザーを作成するために既に確実に機能するコードの部分にコメントしました。どこが間違っているのかわかりません。データベースへの接続に関する部分を削除しました。それはうまくいきます。

public function createUser (User $item)
{
    //Checking to see if user exists
    $checkdb = mysqli_prepare($this->connection, "SELECT firstname FROM users WHERE id =?");
    mysqli_stmt_bind_param($checkdb, "s", $item->id);
    mysqli_stmt_execute($checkdb);
    mysqli_stmt_fetch($checkdb);

    if ($checkdb == 0)
    {
      // If user exists, create record. This code definitely works.
      $stmt = mysqli_prepare($this->connection,
        "INSERT INTO users (
         id,firstname,lastname,gender,dob,latitude,longitude,datesubmitted)
         VALUES (?,?,?,?,?,?,?,?)");
      $this->throwExceptionOnError();

      mysqli_bind_param($stmt, 'sssssdds', $item->id, $item->firstname,
        $item->lastname, $item->gender, $item->dob, $item->latitude,
        $item->longitude, $item->datesubmitted);
      $this->throwExceptionOnError();

      mysqli_stmt_execute($stmt);
      $this->throwExceptionOnError();

      mysqli_stmt_free_result($stmt);
      mysqli_close($this->connection);
    }

    //If user does exist, then update record
    $stmt = mysqli_prepare($this->connection,
      "UPDATE users SET latitude=?,longitude=?,datesubmitted=? WHERE id=?");
    $this->throwExceptionOnError();

    mysqli_bind_param($stmt, 'dds', $item->latitude,
      $item->longitude, $item->datesubmitted);
    $this->throwExceptionOnError();

    mysqli_stmt_execute($stmt);
    $this->throwExceptionOnError();

    mysqli_stmt_free_result($stmt);
    mysqli_close($this->connection);
}
4

3 に答える 3

1

elseユーザー アカウントを更新するコードをブロックで囲むつもりでしたか?

public function createUser (User $item)
{
    ...     

    if ($checkdb == 0)
    {
      // If user exists, create record. This code definitely works.
      $stmt = mysqli_prepare($this->connection,
        "INSERT INTO users (
         id,firstname,lastname,gender,dob,latitude,longitude,datesubmitted)
         VALUES (?,?,?,?,?,?,?,?)");
      ...
    }
    else
    {
      //If user does exist, then update record
      $stmt = mysqli_prepare($this->connection,
        "UPDATE users SET latitude=?,longitude=?,datesubmitted=? WHERE id=?");
      ...
    }
    ...
}
于 2012-04-26T23:12:15.447 に答える
0

mysqli がこれをサポートしているかどうかはわかりませんが、ここに文書化されている「INSERT ... ON DUPLICATE KEY UPDATE」構文を見る価値があります: http://dev.mysql.com/doc/refman/5.0/en/insert -on-duplicate.html

DBに「すでに存在しますか」チェックを実行させることができます(他の回答で提案されているように、電子メールアドレスまたは同等のフィールドを主キーとして使用します)。

于 2012-04-26T23:23:15.093 に答える
0

削除できる不要なコードがたくさんあります。また、ユーザーの電子メール アドレスなど、データベースによって自動的に生成されない一意の値による検索も検討してください。

また、db 接続を閉じることについて心配する必要はありません。それは物事をずっと簡単にします。

開始するには、PHP フレームワークを確認することをお勧めします。Zend FrameworkCodeIgniterを調べてください(学習曲線は最小ですが、それほど強力ではありません)。

これにより、コードを使い始めることができます...

<?php
class UserService {
  public $username = "*****";
  public $password = "*****";
  public $server = "localhost";
  public $port = "3306";
  public $databasename = "******";
  public $tablename = "users";
  public $connection;

  public function __construct () {
    $this->connection = mysqli_connect($this->server, $this->username, $this->password, $this   ->databasename, $this->port);

    $this->throwExceptionOnError($this->connection);
  }

  public function createUser($user) {
    $email = mysqli_real_escape_string($user->email);

    //Check to see if the user exists - we need this to be as precise as possible. People     often have the same name. But they won't have the same email.
    $sql = "SELECT * FROM users WHERE email = '{$email}'";
    $res = mysqli_query($sql);
    $cnt = mysqli_num_rows($res);

    if ($cnt > 0) {
      //Update the user or do whatever you need to do
    }
    else {
      //Create the user
    }
  }
}
于 2012-04-26T23:12:53.047 に答える