・ラジオボタン「投稿」がチェックされている状態の場合はチェックボックス非表示
・ラジオボタン「更新」「削除」がチェックされた場合のみチェックボックス表示
・チェックボックス未チェックのままsubmitボタンを押下した場合はエラー(javascript:alert)を表示し、投稿を中止
という条件をJavaScriptのみで処理したいんですが、削除を選択してアラート表示されるか試したら、Notice: Undefined index: chkid
Warning: implode(): Invalid arguments passed
と表示されました
エラーの箇所は以下の部分を指しています
$id = $_POST['chkid'];
$id_str = implode(",", $id);
何故エラーが表示されたのかが頭で処理できません
$link = mysqli_connect($host, $user, $pass, $dbname) or die("NG");
mysqli_select_db($link, "XXX");
if (isset($_POST['name'], $_POST['comment'], $_POST['bbs']) && $_POST['bbs'] == "post") {
$name = $_POST['name'];
$comment = $_POST['comment'];
mysqli_query($link, "INSERT INTO XXX (name, comment) VALUES ('$name', '$comment')");
} elseif (isset($_POST['bbs']) && $_POST['bbs'] == "update") {
$name = $_POST['name'];
$comment = $_POST['comment'];
$id = array();
$id = $_POST['chkid'];
$id_str = implode(",", $id);
mysqli_query($link, "UPDATE XXX SET name = '$name', comment = '$comment' WHERE id in($id_str)");
} elseif (isset($_POST['bbs']) && $_POST['bbs'] == "delete") {
$id = array();
$id = $_POST['chkid'];
$id_str = implode(",", $id);
mysqli_query($link, "DELETE FROM XXX WHERE id in($id_str)");
}
$result = mysqli_query($link, "SELECT * FROM XXX ORDER BY time DESC");
?>
<html>
<head>
<meta charset="utf-8">
<script>
function condition() {
var de = document.getElementById("r3").checked;
var up = document.getElementById("r2").checked;
if (de == false) {
if (document.getElementById('name').value.length >= 10) {
window.alert("ERROR");
return false;
} else if (document.getElementById('name').value.length == "") {
window.alert("ERROR");
return false;
} else if (document.getElementById('comment').value.length >= 300) {
window.alert("ERROR");
return false;
} else if (document.getElementById('comment').value.length == "") {
window.alert("ERROR");
return false;
} else if (up == true) {
nochk();
}
} else {
nochk();
}
}
function change(obj) {
console.log(obj.id);
if (obj.id == "r1") {
document.getElementById("send").value = "投稿";
chkchange(true);
} else if (obj.id == "r2") {
document.getElementById("send").value = "更新";
chkchange(false);
} else if (obj.id == "r3") {
document.getElementById("send").value = "削除";
chkchange(false);
}
}
function chkchange(bool) {
chk = document.getElementsByName('chkid[]');
for(var box = 0; box < chk.length; box++) {
console.log(chk[box]);
console.log(box);
chk[box].disabled = bool;
}
if (box == 0) {
window.alert("ERROR");
}
}
</script>
</head>
<body>
<form method="post" action="" onsubmit="return condition()">
<table>
<tr>
<td>
名前:<input type="text" name="name" id="name">
内容:<textarea name="comment" cols="30" rows="3" id="comment"></textarea>
<input type="radio" name="bbs" id="r1" value="post" onchange="change(this)">投稿
<input type="radio" name="bbs" id="r2" value="update" onchange="change(this)">更新
<input type="radio" name="bbs" id="r3" value="delete" onchange="change(this)">削除
<input type="submit" value="投稿" id="send">
</td>
</tr>
</table>
<?php
while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
?>
<table>
<input type="checkbox" name="chkid[]" value="<?=$row['id'] ?>">
<tr>
<td>名前:
<?php echo $row['name'] ?>
</td>
</tr>
<tr>
<td>内容:
<?php echo $row['comment'] ?>
</td>
</tr>
</table>
<?php
}
mysqli_free_result($result);
mysqli_close($link);
?>
</form>
</body>
</html>
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+2
<input type="checkbox" name="chkid[]" ・・・
のチェックボックスが一つもチェックされてないんじゃないですか?
なにもチェックしなければchkidというパラメータが飛ばないので
$_POST["chkid"]は参照エラーになります
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.21%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる