こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

データーベース接続 入力フォーム

phpでデータベースを作成しています!
登録フォームからデータを入力して新しくデータを追加したいと思います!
番号 int プライマリーキー
氏名 varchar
住所 varchar
です
いまのプログラムは番号が重複じゃなかったら氏名と住所空白でも登録できてしまいます!
全部しないとエラーメッセージが返ってきて入力しなおさせるにはどうしたらいいですか?
if文の書き方を教えてください
また番号を空白だとエラーが返ってきます。どうしたらいいですか?

入力フォームのプログラム(regist.php)
<HTML>
<HEAD><TITLE>新規登録</TITLE></HEAD>
<BODY>
<BLOCKQUOTE>
<FORM ACTION = "toroku.php" METHOD = "POST">
<BR><BR>登録画面<BR><BR>
番号 <INPUT TYPE="NAMBER" NAME = "ID"><BR><BR>
氏名 <INPUT TYPE="TEXT" NAME = "NAME"><BR><BR>
住所 <INPUT TYPE="TEXT" NAME = "ADDR"><BR><BR>
<A HREF="http://localhost/test5.php">
<INPUT TYPE = "SUBMIT" VALUE = "登録する"></A>
<A HREF="http://localhost/test5.php">一覧に戻る</A>

</BODY>
</BLOCKQUOTE>
</FORM>
</BODY>
</HTML>


追加登録のプログラム(toroku.php)
<HTML>
<HEAD><TITLE>登録完了</TITLE></HEAD>
<BODY>
<?php
$con=mysqli_connect("localhost","root","パスワード","db_test");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$sql="INSERT INTO tbl_test (番号, 氏名, 住所)
VALUES
('$_POST[ID]','$_POST[NAME]','$_POST[ADDR]')";

if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
echo "登録完了しました";



mysqli_close($con);

?>
<BR><BR>
<A HREF="http://localhost/test5.php">
<INPUT TYPE = "SUBMIT" VALUE = "一覧へ戻る"></A>
</BODY>
</HTML>

表示のプログラム(test5.php)
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>一覧画面</title>
</head>
<body>
<BLOCKQUOTE>
<BR>一覧画面<BR><BR>
<?php
$con=mysqli_connect("localhost","root","パスワード","db_test");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}


$result = mysqli_query($con,"SELECT * FROM tbl_test");

echo "<table border='1'>
<tr>
<th>番号</th>
<th>氏名</th>
<th>住所</th>
</tr>";

while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['番号'] . "</td>";
echo "<td>" . $row['氏名'] . "</td>";
echo "<td>" . $row['住所'] . "</td>";

echo "</tr>";
}
echo "</table>";


mysqli_close($con);
?>
<BR><BR><BR> <A HREF="http://localhost/regist.php">
<INPUT TYPE = "SUBMIT" VALUE = "新規登録"></A>

</BLOCKQUOTE>
</body>
</html>

見づらくってごめんなさい

投稿日時 - 2014-04-11 16:34:10

QNo.8550432

すぐに回答ほしいです

質問者が選んだベストアンサー

if ($_POST['ID'] != '' && $_POST['NAME'] != '' && $_POST[ADDR] != '') {
$sql="INSERT INTO tbl_test (番号, 氏名, 住所)
VALUES
('$_POST[ID]','$_POST[NAME]','$_POST[ADDR]')";

if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
echo "登録完了しました";
} else {
echo "入力エラー";
}

投稿日時 - 2014-04-11 16:48:31

お礼

ありがとうございます


追加登録のプログラム(toroku.php)
<HTML>
<HEAD><TITLE>登録完了</TITLE></HEAD>
<BODY>
<?php
$con=mysqli_connect("localhost","root","パスワード","db_test");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$sql="INSERT INTO tbl_test (番号, 氏名, 住所)
VALUES
('$_POST[ID]','$_POST[NAME]','$_POST[ADDR]')";

if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
echo "登録完了しました";



mysqli_close($con);

?>
<BR><BR>
<A HREF="http://localhost/test5.php">
<INPUT TYPE = "SUBMIT" VALUE = "一覧へ戻る"></A>
</BODY>
</HTML>

どこに入力すればいいですか?
もうわけがわからなくなっておねがいします

投稿日時 - 2014-04-11 16:55:37

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

> エラーはなくなりましたがこんどはデータが追加されません!POSTのエスケープした処理をしないからですか?

ID、NAME、ADDR のいずれかが空だとINSERTは実行されないので、どれかが空なのではないでしょうか。

> またエスケープ処理の命令の記述のしかたも教えてもらっていいですか?

$sql="INSERT INTO tbl_test (番号, 氏名, 住所)
VALUES
('$_POST[ID]','$_POST[NAME]','$_POST[ADDR]')";



$id = mysqli_real_escape_string($con, $_POST['ID']);
$name = mysqli_real_escape_string($con, $_POST['NAME']);
$addr = mysqli_real_escape_string($con, $_POST['ADDR']);
$sql="INSERT INTO tbl_test (番号, 氏名, 住所)
VALUES
('$id','$name','$addr')";

と置き換えて下さい。

投稿日時 - 2014-04-14 09:49:35

補足

すいませんできました。
あとデータをすべて入力し番号が重複したらエラーがでます。出ない方法ってありますか?

あと今度は表示されているデータの名前をクリックしたら別ウインドウで1件ずつ表示し、変更や削除させたいのですかどうしたらいいですか?

参考に書き方をおしえてください
何度もすいません

投稿日時 - 2014-04-14 11:29:58

お礼

ありがとうございます!
Unknown column '番号' in 'field list'
今度は番号のカラムがないといってきました。
番号というカラムがあるのに
なぜでしょう

投稿日時 - 2014-04-14 10:39:39

ANo.4

> どこに入力すればいいですか?

追加プログラムの、以下の部分を置き換えて下さい。
簡易的なチェック方法を描いただけですので、POSTされた値のエスケープ処理など適切な処理を追加しましょう。

$sql="INSERT INTO tbl_test (番号, 氏名, 住所)
VALUES
('$_POST[ID]','$_POST[NAME]','$_POST[ADDR]')";

if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
echo "登録完了しました";

投稿日時 - 2014-04-11 17:47:32

補足

ありがとうございます!エラーはなくなりましたがこんどはデータが追加されません!POSTのエスケープした処理をしないからですか?

投稿日時 - 2014-04-14 09:14:50

お礼

またエスケープ処理の命令の記述のしかたも教えてもらっていいですか?何度もすいません

投稿日時 - 2014-04-14 09:24:00

ANo.3

以下で解説している「初心者がやりがちなミス」に複数該当しています。まずはそこから見直しを行ってください。

Qiita - PHPでデータベースに接続するとのまとめ
http://qiita.com/mpyw/items/b00b72c5c95aac573b71

エラーがあったときの復帰の方法によって、どうすべきかが変わってくるので両方説明しておきます。

【エラーメッセージとともに「戻る」を表示する】
以下の私の回答を参考にして、出力内容のバッファリングを行い、内容を取り消せるようにしてください。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13126914973

【エラーメッセージを出して入力フォームを再表示する】
すべての処理を1ファイルにまとめて、送信ボタンの種類によって処理内容・表示内容を分岐させてください。もしくは、セッションにエラーメッセージをセットしてheader関数でページ遷移させるようにしてください。

なお、これらに加えて「クロスサイトリクエストフォージェリ」への対策が不可欠です。

Qiita - とっても簡単なCSRF対策
http://qiita.com/mpyw/items/8f8989f8575159ce95fc

投稿日時 - 2014-04-11 17:31:44

お礼

ありがとうございます。

投稿日時 - 2014-04-14 09:29:27

ANo.2

>if文の書き方を教えてください

http://www.php.net/manual/ja/control-structures.if.php

>また番号を空白だとエラーが返ってきます。どうしたらいいですか?

番号が空白でないことをチェックする。でも、空白でなくても「数字」として扱えないものはダメですよね?

http://www.php.net/manual/ja/function.ctype-digit.php

というか「POSTされたデータを登録する」のに、エスケープしていないのは何故ですか?またmysqli_set_charsetが見当たらないので、日本語をキチンと扱えない怖れがあります(というか確実に破綻しますし、エスケープが意味を為さなくなります)。

http://www.php.net/manual/ja/mysqli.real-escape-string.php
http://www.php.net/manual/ja/mysqli.set-charset.php


なお「mysqliでないと困る」理由がない限りは、PDOを推奨しておきます(PDOの方が書きやすいと思います)。

#body要素全体がblockquote要素ってhtmlはどうなんですかね(汗

投稿日時 - 2014-04-11 17:10:05

お礼

ありがとうございました

投稿日時 - 2014-04-14 14:30:58

あなたにオススメの質問