2016-02-04 4 views
-1

Привет им в настоящее время пытаются создать страницу, где я могу вставить некоторую информацию в моей базе данных SQL, это PHPTrouble вставки в базу данных SQL

<?php 


    $servername = "localhost"; 
    $username = "root"; 
    $password = ""; 
    $dbname = "film"; 


$conn = mysqli_connect($servername, $username, $password, $dbname); 

if (!$conn) { 
die("Connection failed: " . mysqli_connect_error()); 
} 



$filmtitle = $_POST['filmtitle']; 
$filmyear = $_POST['filmyear']; 
$filmduration = $_POST['filmduration']; 
$filmrating = $_POST['filmrating']; 



$sql="INSERT INTO film (Title, FilmYear, Duration, FilmRating) VALUES 
('$filmtitle', `$filmyear`, '$filmduration', '$filmrating',)"; 



if ($conn->query($sql) === TRUE) { 
echo "New record created successfully"; 
} else 
{ 
echo "Error: " . $sql . "<br>" . $conn->error; 
} 



$conn->close(); 
?> 

Когда я нажимаю кнопку отправки, я получаю следующее сообщение об ошибке , Объект не найден!

Запрашиваемый URL-адрес не был найден на этом сервере. Ссылка на ссылочной странице кажется неправильной или устаревшей. Пожалуйста, сообщите автору этой страницы об ошибке.

Если вы считаете, что это ошибка сервера, обратитесь к веб-мастеру.

Вот HTML, а

<html> 
<body> 
<h1> Insert a new film!</h1> 

<form action ="insert-film.php method="post"> 

Film Title: <input type="text" name="filmtitle"> 
Year: <input type="text" name="filmyear"> 
Duration: <input type="text" name="filmduration"> 
Certificate: <input type="text" name="filmcertificate"> 

<input type="submit"> 

</form> 

</body> 
</html> 
+0

Hi. Этот вопрос довольно странный ... разве вы не пробовали, если ваш код работает? Если да, и это не сработает, укажите конкретную проблему. Если нет, мне жаль говорить, что SO не является службой проверки кода :) – kazemakase

+0

Отсутствует цитата '' 'в атрибуте' action'. –

+0

ваш запрос INSERT содержит несколько синтаксических ошибок и 'echo 'Error:". $ Sql «
». $ Conn-> error; 'сказал бы вам это. –

ответ

2

Здесь что-то не так.

Первый

<form action ="insert-film.php method="post"> 
          ^right there. 

отсутствует цитата.

<form action ="insert-film.php" method="post"> 

Тогда это: вы использовали галочки вместо кавычек для $filmyear и завершающая запятая

('$filmtitle', `$filmyear`, '$filmduration', '$filmrating',)"; 
                 ^right there. 

, который следует читать

('$filmtitle', '$filmyear', '$filmduration', '$filmrating')"; 

Вы также, кажется, использует неправильный массив для filmcertificate, который должен быть filmrating.

Сертификат: <input type="text" name="filmcertificate"> нет массива POST для него.

$filmtitle = $_POST['filmtitle']; 
$filmyear = $_POST['filmyear']; 
$filmduration = $_POST['filmduration']; 
$filmrating = $_POST['filmrating']; 

и

Film Title: <input type="text" name="filmtitle"> 
Year: <input type="text" name="filmyear"> 
Duration: <input type="text" name="filmduration"> 
Certificate: <input type="text" name="filmcertificate"> 

Последняя не соответствует $_POST['filmrating'] массива.

вероятно Вы имели в виду сделать:

Film Title: <input type="text" name="filmtitle"> 
Year: <input type="text" name="filmyear"> 
Duration: <input type="text" name="filmduration"> 
Film rating: <input type="text" name="filmrating"> 
  • Только вы знаете, что это должно быть. Соответственно.

  • Как только ваш PHP начнет работу после фиксации цитаты в действии, вы получили бы уведомление undefined index filmrating in line....

Добавить error reporting в начало файла (ов), который поможет найти ошибки.

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

// Then the rest of your code 

Sidenote: Отображение ошибок не должно быть сделано только в постановке, и никогда производства.


Ваш действующий код открыт для SQL injection. Используйте prepared statements, или PDO с prepared statements.

+0

Спасибо, это очень помогло мне по-настоящему оценить он принимает время, чтобы помочь – Cooperrr

+0

@Cooperrr, что вы можете. Я сделаю еще одно редактирование о 'Certificate: < input type = "text" name = "filmcertificate"> ', который не используется в вашем массиве POST. Изменить: отредактирован ответ. –

+0

@Cooperrr Я внес несколько изменений в свой ответ, поэтому, пожалуйста, перейдите его полностью и перезагрузите. –

0

У вас есть лишняя запятая в конце вашего SQL:

$sql="INSERT INTO film (Title, FilmYear, Duration, FilmRating) VALUES 
('$filmtitle', `$filmyear`, '$filmduration', '$filmrating',)"; 

должно быть:

$sql="INSERT INTO film (Title, FilmYear, Duration, FilmRating) VALUES 
($filmtitle', '$filmyear', '$filmduration', '$filmrating')"; 

Кроме того, убедитесь, вы согласуетесь со своими обратными линиями против одиночных кавычек.

И наконец, вы подвергаетесь действию SQL injection attack.

+0

Спасибо, была очень большой помощью для меня – Cooperrr

+0

Я знаю, что SQL-инъекция - это просто проект для колледжа, на данный момент нам просто нужно создать базу данных, и они научат нас, как защитить от этого потом – Cooperrr

+0

. Добро пожаловать, удачи! – Sablefoste

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