学習記録

プログラミングの学習中に調べて解決したこと等の記録です。

未入力で出るはずのエラー表示がでない

 
 

エラー内容

 
textareaで作った入力フォームに対し未入力であればエラー表示がでるバリデーションをかけたところ、なぜか何も入力されていないにもかかわらず、エラーが出ないという状態に陥りました。
 
inputで作成したフォームに対してはバリデーションがきちんと働くので、バリデーション自体のコードが間違っているわけではなさそうです。
 
 
 
 

結論

textareaは開始タグと閉じタグの間にスペースが入っているとそれをフォームの初期値として含んでしまうらしく、今回スペースが入っていたため「入力値がある」と認識されている状態になっていました。
 
 
つまり
 
この少し空いているスペースを
<textarea> </textarea>
  
このようにくっつければ解決です。
<textarea></textarea>

 

 

 反省点

小さなことでコードは動かなくなってしまうことをきちんと意識していかなければならないと、気が引き締まった出来事でした。

 

参考:https://arumogina-tech.hatenadiary.jp/entry/2018/06/04/054539

Invalid parameter number: parameter was not definedというエラーの解決方法について

 

 エラーの内容

エラー発生:SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

  

 

「パラメータが定義されてない」という内容のようなので、SQL文自体の書き方を見直し、直接PHPMYAdmin内で実行してみましたが実行できてしまったため、何が原因か困っていたところこちらの記事を見つけました。

 

https://stackoverflow.com/questions/52319288/php-pdo-sqlstatehy093-invalid-parameter-number-parameter-was-not-defined

 

 記事を参考にし、「予約語」を使っていないか確認したところ、カラム名の「data」が予約語でした。

$sql = 'INSERT INTO post(date, comment, users_id, create_at) 
 VALUES(:date, :comment, :users_id, :create_at)';

  

予約語についてはこちら

https://dev.mysql.com/doc/refman/8.0/en/keywords.html

 

バッククォートを使用すると予約語でも使えるようですが、不安要素をわざわざ残してしまってはいけないので、カラム名予約語から変更し、SQL文もカラム名に合わせて直して、無事データが登録できて終わりました。 

 

ただ、リファレンスを見るとcommentも予約語のはずなのですが、こちらはエラーがでておらず、なぜ大丈夫だったか今のところ分かっておりません。

分かり次第追記したいと思いますが、まずは予約語は使用しないということを今後守っていきたいと思います。