「セッション」テーブルにデータを挿入すると思われる mysqli/php コードを以下に示します。
...
if (isset($_POST['textWeight'])) {
$_SESSION['textWeight'] = $_POST['textWeight'];
}
...
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$time = str_replace(array(' Hrs ', ' Mins ', ' Secs'), array(':', ':', ''), $_SESSION['durationChosen']);
for ($i = 1, $n = $_SESSION['sessionNum']; $i <= $n; ++$i) {
$insertsql = "
INSERT INTO Session
(SessionId, SessionTime, SessionDate, SessionWeight, SessionDuration, TotalMarks, ModuleId, TeacherId, Room)
VALUES
(?, ?, ?, ?, ?, ?, ?, ?, ?)
";
if (!$insert = $mysqli->prepare($insertsql)) {
// Handle errors with prepare operation here
}
$sessid = $_SESSION['id'] . ($n == 1 ? '' : $i);
$sessdate = date("Y-m-d", strtotime($_SESSION['dateChosen']));
$insert->bind_param("sssisisis", $sessid, $_SESSION['timeChosen'], $sessdate,
$_SESSION['textWeight'], $time, $_SESSION['textMarks'],
$_SESSION['module'], $teacherid, $_SESSION['rooms']);
$insert->execute();
if ($insert->errno) {
// Handle query error here
}
$insert->close();
}
私が得ている問題は、データベースにデータを挿入していないことです。その理由は、以下にこのエラーが表示されているためです。
Warning: mysqli_stmt::execute(): (23000/1048): Column 'SessionWeight' cannot be null in /web/stud/..../.... on line 182
「SessionWeight」列に投稿された値は $_SESSION['textWeight']
、ユーザーが下のラジオ ボタンで「いいえ」をクリックした場合、テキスト ボックスの値が 0 であると述べているため、このエラーは表示されません。 「はい」を選択すると、ユーザーは独自の数字を入力する必要があります (空白のテキスト ボックスは許可されません)。
//HTML
<th>Provide a Total Weight Assessment is worth to Module?</th>
<td><input type="radio" name="weightChoice" value="Yes" onClick="getWeight()" class="radioBtn"/> Yes</td>
<td><input type="radio" name="weightChoice" value="No" onClick="getWeight()" class="radioBtn"/> No</td>
</tr>
</table>
<div id="radioAlert"></div>
<p></p>
<table id="tblWeight">
<tr>
<th>Weight:</th>
<td><input type="text" id="txtWeight" name="totalWeight" onkeypress="return isNumberKey(event)" maxlength="5" />%</td>
</tr>
</table>
....
//Javascript
function getWeight() {
var weightChoice = document.getElementsByName("weightChoice");
var textWeight = document.getElementById("txtWeight");
var tblWeight = document.getElementById("tblWeight");
if(weightChoice[0].checked == true){
tblWeight.style.display = "block";
textWeight.value = "";
}else{
tblWeight.style.display = "none";
textWeight.value = 0;
}
}
データベースの SessionWeight 列は、データ型が int(3) の非キー フィールドです。