52391
ログイン画面をphpで作成している初心者です。  
同じPHPファイル内のログイン画面のhtmlとログイン機能を記載したphpを記入しています。

```

    $query = "SELECT * FROM user WHERE user_name =$_POST['name']";
    
```

と書くと`$_POST['name']`の部分にエラー`(expression expected)`が出てしまします。  
事前に変数の値を`$name=$_POST[name]`とおいたところ、まだ未入力の段階だとエラー(undefined
variable←確かにその通りである)が表示されてしまいます。

どう書けばいいでしょうか？
CC BY-SA 4.0
2019-01-29T02:27:04.390
52385
2019-01-29T06:58:51.837
2019-01-29T03:03:42.507
31799
31799
question
php mysql
PHP内に記述したSQLクエリで 'expression expected' エラーが発生してしまう
「まだ未入力の段階だとエラーが表示」というのなら、前後の行を含めて関係しそうな部分をすべて質問に書いておきましょう。

ちなみに勉強中の身には逆効果かもしれませんが、これらの記事に色々と解説があります。  
[【初心者向け】PHP5とMySQLでつくるログイン機能のサンプルアプリケーション](http://replication.hatenablog.com/entry/2014/06/30/005815)

[PHPとMySQLで新規登録とログインを実装する(PDO使用)](https://qiita.com/KosukeQiita/items/b56b3004413c999b9858)

[【PHP7対応】ログイン・会員登録機能を作る方法【2016年版】](https://manablog.org/php7-login/)
CC BY-SA 4.0
2019-01-29T03:06:15.237
52386
2019-01-29T03:06:15.237
26370
52385
answer
array_key_exists()
又は、isset()で変数が存在するかチェクすると良いと思います。（phpで変数の存在チェックする方法は、色々有りますが）

array_key_exists() は配列中にKey値が存在すれば TRUEを返し、  
isset()は変数が存在するとTRUEを返します。但し、配列の時は Key値が存在し、値がNULL以外の時 TRUEを返します。

以下 isset()での例です。

```

    if(isset($_POST['name'])){
        //変数が存在する時の処理。
    }else{
        //変数が存在しない時のしない時の処理
    }
    
```

**配列の代入（文字列展開）について**

> "SELECT * FROM user WHERE user_name =$_POST['name']";

変数の展開している所 $_POST['name']は配列なので、{$_POST['name']} と{}で囲むか  
一旦、別な変数へ入れて展開する。

```

    "SELECT * FROM user WHERE user_name = {$_POST['name']}";
    
```

か $tmp = $_POST['name']; と代入して

```

    "SELECT * FROM user WHERE user_name ={$tmp}";
    
```

又は、

```

    "SELECT * FROM user WHERE user_name = $tmp";
    
```

とすると動作すると思います。
CC BY-SA 4.0
2019-01-29T04:41:12.810
52391
2019-01-29T06:58:51.837
2019-01-29T06:58:51.837
22793
22793
52385
answer