Как обновить существующую таблицу MySQL, когда одно из полей формы HTML представлено пустым, где значение по умолчанию для всех запрашиваемых столбцов равно NULL?

0

После входа в систему пользователь должен заполнить другую форму. Для этого сайта есть одна таблица, называемая users с столбцами с именем as-

Ten_School_name, Ten_Board, Ten_Percentage, Twl_School_Name, Twl_Board, Twl_Percentage

Ten_School_name, Twl_School_Name имеет значение VARCHAR(70) а значение по умолчанию - NULL Ten_Board, Twl_Board установлено значение VARCHAR(10) а значение по умолчанию - NULL Ten_Percentage, Twl_Percentage - int(3) а значение по умолчанию - NULL

Username, адрес Email и Password - это три других столбца, которые становятся занятыми, когда пользователь регистрируется на веб-сайте, а для остальных - значение NULL в качестве значения по умолчанию. Когда я отправляю форму, заполняя все шесть полей, форма отправляется успешно, но если какое-либо поле остается пустым, оно дает ошибку из сценария обработки. Incorrect integer value: '' for column 'Twl_Percentage' at row 2

Я уже потратил много времени на поиск решения. Я надеюсь, что кто-то здесь решит мою проблему.

Вот мой form-

 <form id="msform" action="includes/cand-reg-dbs.php" method="POST">
    <!--10th Class Details-->
    <label>10th School Name</label><input type="text" name="tenth-school"><br />

    <label>10th Board</label>
    <select name="tenth-board">
        <option name="tenth-board1" value="icse">ICSE</option>
        <option name="tenth-board2" value="cbse">CBSE</option>
        <option name="tenth-board3" value="up-board">UP Board</option>
    </select>
    <br />
    <label>10th Percentage</label>
    <input type="number" name="tenth-percent">
    <br />


    <!--12th Class Details-->
    <label>12th School Name</label><input type="text" name="twl-school"><br />

    <label>12th Board</label>
    <select name="twl-board">
        <option name="twl-board1" value="icse">ISE</option>
        <option name="twl-board2" value="cbse">CBSE</option>
        <option name="twl-board3" value="up-board">UP Board</option>
    </select>
    <br />
    <label>12th Percentage</label>
    <input type="number" name="twl-percent">

    <input type="submit" name="submita" id="" class="" value="Save" /></form>

Вот мой php-скрипт для обработки data-

if (isset($_POST['submita'])) {

    $dbServername = "localhost";
    $dbUsername = "root";
    $dbPassword = "";
    $dbName = "jobin";

    $con = mysqli_connect($dbServername, $dbUsername, $dbPassword, $dbName);

 if (isset($_SESSION['username'])) {
        $user = $_SESSION['username'];
        echo $user;
        $eml = $_SESSION['cand_email'];
        echo $eml;
    }



$tenthSchool = mysqli_real_escape_string($con, $_POST['tenth-school']);
$tenthBoard = mysqli_real_escape_string($con, $_POST['tenth-board']);
$tenthPercent = mysqli_real_escape_string($con, $_POST['tenth-percent']);
$twlSchool = mysqli_real_escape_string($con, $_POST['twl-school']);
$twlBoard = mysqli_real_escape_string($con, $_POST['twl-board']);
$twlPercent = mysqli_real_escape_string($con, $_POST['twl-percent']);

$sqlsd = "UPDATE users 
SET 
Ten_School_Name = '$tenthSchool',
Ten_Board = '$tenthBoard',
Ten_Percentage = '$tenthPercent',
Twl_School_Name = '$twlSchool',
Twl_Board = '$twlBoard',
Twl_Percentage = '$twlPercent'
WHERE
Email = '$eml';";



if(!$con)
{
die('Could not connect: ' . mysqli_connect_error());
}
$resultsd = mysqli_query($con, $sqlsd);

if(!$resultsd)
{
die('Could not update data: ' . mysqli_connect_error());
}
if ($resultsd) {
    header("Location: ../candidate-registration.php?sd=success");
}   

} else {
echo "nothing";
}
  • 0
    "выдает ошибку из сценария обработки. Не удалось обновить данные:" - Хорошо ... а в чем остальная часть ошибки? Вы используете mysqli_connect_error() конце концов. Однако это неправильная функция, вам нужно использовать mysqli_error($con) . Вот.
  • 0
    Хорошо, я изменил функцию, как вы сказали. Вот сообщение об ошибке: Incorrect integer value: 'CMS School' for column 'Ten_School_Name' at row 2
Показать ещё 5 комментариев
Теги:
database

1 ответ

0
Лучший ответ

Я бы изменил столбцы с NULL на NOT NULL и установил по умолчанию пустую строку '' на вашей таблице. Таким образом вы можете использовать более безопасный подготовленный оператор следующим образом:

$stmt = $link->prepare("UPDATE users SET Ten_School_Name = ?, Ten_Board = ?, Ten_Percentage = ?, Twl_School_Name = ?, Twl_Board = ?, Twl_Percentage = ? WHERE Email = ?");
$stmt->bind_param("ssissis", $tenthSchool, $tenthBoard, $tenthPercent, 
$twlSchool, $twlBoard, $twlPercent, $eml);
$stmt->execute();
$stmt->close();

Если вы не можете изменить свои столбцы, вы должны написать свой запрос, используя только поля, которые не являются пустыми. Как это:

$sqlsd2 = "";
if ($tenthSchool != "") { $sqlsd2 .= "Ten_School_Name = '$tenthSchool', ";
if ($tenthBoard != "") { $sqlsd2 .= "Ten_Board = '$tenthBoard', ";
if ($tenthPercent != "") { $sqlsd2 .= "Ten_Percentage = $Ten_Percentage, ";
if ($twlSchool != "") { $sqlsd2 .= "Twl_School_Name = '$twlSchool', "
if ($twlBoard != "") { $sqlsd2 .= "Twl_Board = '$twlBoard', "
if ($twlPercent != "") { $sqlsd2 .= "Twl_Percentage = $twlPercent ";

if($sqlsd2 !="")
{ //update)
 $sqlsd = "UPDATE users SET " . $sqlsd2 . "WHERE Email = '$eml'";
}
else
{
//nothing to update
}

Обратите внимание, что этот второй подход не так безопасен, как первый, поскольку mysqli_real_escape_string не полностью избегает инъекции mysql. Вы должны использовать подготовленное выражение.

Существует способ сделать динамически подготовленный оператор, используя call_user_func_array(), иногда я не мог избежать этого, но он более сложный. Я предлагаю просто изменить столбцы и сделать подготовленный оператор.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню