<html>
<head>
<title>Add New Record in MySQL Database</title>
</head>
<body>
<?php
if(isset($_POST['add'])) {
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'password';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) {
die('Could not connect: ' . mysql_error());
}
if(! get_magic_quotes_gpc() ) {
$emp_name = addslashes ($_POST['emp_name']);
$emp_address = addslashes ($_POST['emp_address']);
}else {
$emp_name = $_POST['emp_name'];
$emp_address = $_POST['emp_address'];
}
$emp_salary = $_POST['emp_salary'];
$sql = "insert into employee(emp_name,emp_address, emp_salary)values('$emp_name','$emp_address','$emp_salary')";
mysqli_select_db($conn,"test_db");
$retval = mysqli_query($conn,$sql);
if(!$retval) {
die('Could not enter data: ' . mysql_error());
}
echo "Entered data successfully\n";
mysql_close($conn);
}else {
?>
<form method = "post" action = "<?php $_PHP_SELF ?>">
<table width = "400" border = "0" cellspacing = "1"cellpadding = "2">
<tr>
<td width = "100">Employee Name</td>
<td><input name = "emp_name" type = "text"id = "emp_name"></td>
</tr>
<tr>
<td width = "100">Employee Address</td>
<td><input name = "emp_address" type = "text"id = "emp_address"></td>
</tr>
<tr>
<td width = "100">Employee Salary</td>
<td><input name = "emp_salary" type = "text"id = "emp_salary"></td>
</tr>
<tr>
<td width = "100"> </td>
<td> </td>
</tr>
<tr>
<td width = "100"> </td>
<td>
<input name = "add" type = "submit" id = "add"value = "Add Employee">
</td>
</tr>
</table>
</form>
<?php
}
?>
когда я пытаюсь ввести значение и нажимаю кнопку отправки, я не получаю никакой ошибки, но не могу ввести значение в базу данных.
Проблема в том, что я получаю текст «Не удалось ввести данные: таблица« работник »только для чтения». Может кто-нибудь помочь мне разобраться с этой проблемой?Я создал базу данных (test_db) и таблицу (сотрудник) на сервере Wamp.
Ваша проблема решена. Несмотря на то, что я настоятельно рекомендую вам использовать подготовленные операторы, в противном случае ваш код открыт для внедрения SQL-кода и возможных проблем с цитированием.
Вы смешиваете MySQL и MySQL. Останови это. Так как вы используете MySQL,
воспользоваться подготовленными утверждениями и bind_param, иначе вы
открыт для SQL-инъекций и возможных проблем с цитированием. — @aynber
изменения
die('Could not connect: ' . mysql_error());
к die('Could not connect: ' . mysqli_connect_error());
mysql_close($conn);
к mysqli_close($conn);
action = "<?php $_PHP_SELF ?>"
к action = "<?php echo $_SERVER['PHP_SELF']; ?>"
Обновленный код
<html>
<head>
<title>Add New Record in MySQL Database</title>
</head>
<body>
<?php
if(isset($_POST['add'])) {
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'password';
$db = "test_db";
$conn = mysqli_connect($dbhost, $dbuser, $dbpass, $db);
if(! $conn ) {
die('Could not connect: ' . mysqli_connect_error());
}
$stmt = mysqli_prepare($conn, "INSERT INTO employee(emp_name,emp_address, emp_salary) VALUES (?, ?, ?)");
mysqli_stmt_bind_param($stmt, 'sss', $_POST['emp_name'], $_POST['emp_address'], $_POST['emp_salary']);
if(!mysqli_stmt_execute($stmt)) {
die('Could not enter data: ' . mysqli_error($conn));
}
echo "Entered data successfully\n";
mysqli_close($conn);
} else {
?>
<form method = "post" action = "<?php echo $_SERVER['PHP_SELF']; ?>">
<table width = "400" border = "0" cellspacing = "1" cellpadding = "2">
<tr>
<td width = "100">Employee Name</td>
<td><input name = "emp_name" type = "text" id = "emp_name"></td>
</tr>
<tr>
<td width = "100">Employee Address</td>
<td><input name = "emp_address" type = "text" id = "emp_address"></td>
</tr>
<tr>
<td width = "100">Employee Salary</td>
<td><input name = "emp_salary" type = "text" id = "emp_salary"></td>
</tr>
<tr>
<td width = "100"> </td>
<td> </td>
</tr>
<tr>
<td width = "100"> </td>
<td><input name = "add" type = "submit" id = "add" value = "Add Employee"></td>
</tr>
</table>
</form>
<?php
}
?>
Беглый взгляд
Я уверен, что ваш пользователь не имеет права вводить данные в вашу таблицу
Пожалуйста, отредактируйте имя_схемы и выполните запрос к вашей БД:
ПРЕДОСТАВЛЯЙТЕ ВСЕ В ТАБЛИЦЕ schema_name.employee TO root;
Также вы можете попробовать без схемы:
ПРЕДОСТАВЛЯЙТЕ ВСЕ НА СТОЛБЕ сотрудника, чтобы получить root права