2012-09-29 2 views
0

У меня есть код mysqli/php ниже, где предполагается вставить данные в таблицу «Session».данные не вставлены внутри базы данных из-за одного столбца

... 

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)

+1

что хап ручки, если javascript отключен? Вам нужна проверка на стороне клиента. – BillThor

ответ

0

Ваше поле ввода имеет name="totalWeight", но вы попробуйте прочитать $_POST['textWeight']

Похоже, что проблема

+0

О, боже мой, не могу поверить, что я сделал это и пропустил это. Спасибо :) – user1701484

+0

Да ... у вашего кода, похоже, много переменных с разными именами, используемыми для хранения одинаковых вещей или частей информации, которые должны составлять объект. Вы должны работать над более чистыми решениями, иначе вы скоро что-то пропустите. Кроме того, я могу ошибаться, но из того, что вы опубликовали, кажется, что вы неправильно используете $ _SESSION для хранения глобальных переменных. – naugtur

Смежные вопросы