Почему я продолжаю получать 'undefined' при вводе данных из HTML-формы в базу данных - PullRequest
0 голосов
/ 08 октября 2019

Нужна помощь с ошибкой в ​​операторе mysql. Я пытаюсь сделать сайт, который будет добавлять, редактировать и удалять данные из базы данных. Когда я ввожу данные с веб-сайта, оператор sql показывает «неопределенное» с данными, которые должны быть изменены.

Я даже не знаю, где искать. Я проверил все операторы SQL, чтобы увидеть, если это было проблемой там.

{"code":"ER_TRUNCATED_WRONG_VALUE_FOR_FIELD","errno":1366,"sqlMessage":"Incorrect integer value: 'undefined' for column 'collegeID' at row 1","sqlState":"HY000","index":0,"sql":"Update College SET collegeName = 'undefined', CoAbbreviation = 'undefined', collegeID = 'undefined'"}

Это полное сообщение об ошибке при редактировании таблицы.

Это код для редактирования колледжа.

 editCollege: (req, res) => {

        let collegeID = req.params.id;
        let collegeName = req.body.collegeName;
        let CoAbbreviation = req.body.CoAbbreviation;
        // rewrite query later tonight 
        console.log(collegeID);

        //UPDATE College SET collegeName  = 'collegeName',
        //CoAbbreviation = 'CoAbbreviation' 
        //WHERE CollegeID = 'CollegeID';
        let editCollegeQuery = "Update College SET collegeName = " + "'" + collegeName + "'" + ', ' + "CoAbbreviation = " + "'" + CoAbbreviation + "'" + ', ' + "collegeID = " + "'" + collegeID + "'";
        console.log(editCollegeQuery);
        db.query(editCollegeQuery, (err, results) => {
            if(err){
                return res.status(500).send(err);
            }
            res.redirect('/');
        });
    },

    deleteCollege: (req,res) => {
        let collegeID = req.params.id;
        let deleteCollegeQuery = 'DELETE FROM College WHERE collegeID = "' + collegeID + '"';
        console.log(collegeID);

        db.query(deleteCollegeQuery, (err, results) => {
            if (err) {
                return res.status(500).send(err);
            }
            res.redirect('/');
        });

    }

};

Вот эфирные маршруты для приложения

//routes for the app 
app.get('/', getHomePage);
app.get('/add', addCollegePage);
app.get('/edit/:id', editCollegePage);
app.get('/delete/:id', deleteCollege);
app.post('/add', addCollege);
app.post('/edit/:id', editCollege);

Здесь есть промежуточное ПО

app.set('port', process.env.port || port); 
app.set('views', __dirname + '/views'); 
app.set('view engine', 'ejs'); // configture template engine 
app.use(bodyParser.urlencoded({ extended: false}));
app.use(bodyParser.json()); //parse data from client

Код переднего плана для edit-College

<div class="container">
<% if (message) { %>
    <p class="text-center text-danger"><%= message %></p>
<% } %>

<% if (College) { %>
    <form class="edit-college-form" action="" method="post"                     enctype="multipart/form-data">
        <div class="form-row">
            <div class="form-group col-md-4">
                <label for="collegeName">College Name</label>
                <input type="text" class="form-control"   name="collegeName" id="collegeName" value="<%= College.collegeName%>" required>
            </div>
            <div class="form-group col-md-4">
                <label for="CoAbbreviation"> College Abbreviation </label>
                <input type="text" class="form-control" name="CoAbbreviation" id="CoAbbreviation" value="<%= College.CoAbbreviation %>" required>
            </div>
        </div>
        </div>
        <button type="submit" class="btn btn-success float-right">Update College</button>
    </form>
<% } else { %>
    <p class="text-center">College Not Found. Go <a                                     href="/add">here</a> to add College.</p>
<% } %>
</div>
</div>
</body>
 </html>

1 Ответ

1 голос
/ 08 октября 2019

Вы должны внести некоторые исправления в свой код. Во-первых, это

let collegeID = req.params.id;//NOT req.param.id

Во-вторых, какой результат вы получите ??

console.log(req.body);

Если это объект, то ваше свойство CollegeName не является их. Или в случае массива вы должны обратиться к индексу массива.

РЕДАКТИРОВАТЬ: Я прочитал комментарии ниже. Если вы получаете неопределенное значение при записи в консоль req.body, то это означает, что данные не были переданы из вашей HTML-формы. Вы определили атрибут имени внутри полей в форме? Пожалуйста, поделитесь своим HTML-кодом в вопросе.

РЕДАКТИРОВАТЬ Пожалуйста, добавьте некоторый атрибут действия маршрута в форму в вашем HTML-коде. Данные вашей формы никуда не отправляются, потому что у них нет маршрута, куда их следует отправлять. Пожалуйста, добавьте в действие

<form class="edit-college-form" action="/edit" method="post"                     enctype="multipart/form-data">
...