Данные не отображаются на веб-сайте, и данные MySQL вставляются 2 раза с помощью PHP - PullRequest
0 голосов
/ 04 мая 2011

Эй, ребята, у меня проблемы с этим кодом. Это для сайта для класса. Когда я пытаюсь вставить данные через php, в БД вставляются 2 пустые строки. И когда я хочу снова отобразить его на сайте, ничего не появляется. Я надеялся, что кто-нибудь сможет протянуть руку помощи.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Results</title>
<link href="styles/style_sheet.css" rel="stylesheet" type="text/css" />



<style type="text/css">
a:link {
color: #0F0;
}
a:visited {
color: #0F0;
}
</style>
</head>
<body>

<div id="main_container">
<div id="header">

</div><!--End of header-->
<div class="shadow">
<div id="navbar"><a href="index.php">Home</a> &nbsp;&nbsp;&nbsp; <a     href="register.php">Register</a> &nbsp;&nbsp;&nbsp; <a href="login.php">Login</a> / <a     href="<?php echo $logoutAction ?>">Logout</a>&nbsp;&nbsp;&nbsp; <a     href="Search.php">Search&nbsp;&nbsp;&nbsp;<a href="CommentPage.php">Guest Book</a></div><!- -End of NavBar-->
</div><!--End of navbar shadow-->
<br />
<div class="shadow">
<div id="Content">
<h2> Results:</h2>
<p>&nbsp;</p>

<form action="" name="Movie_Search"method="get">
<p>
<?php
$dbread = mysql_connect("localhost","user","pw");
mysql_select_db("db", $dbread);

$id = $_GET['movie_name'];
$movie_results = mysql_query("SELECT MovieID, MovieName, Description, Genre, Rating     FROM movie WHERE MovieName='$id'");
$movie_values = mysql_fetch_assoc($movie_results);

echo 'Title: ' . $movie_values['MovieName'] . '';
echo '<p>Genre: ' . $movie_values['Genre'] . '</p>';
echo '<p>Description: ' . $movie_values['Description'] . '</p>';
echo '<p>Rating: ' . $movie_values['Rating'] . '</p>';

$movieID=$movie_values['MovieID'];
$review_results = mysql_query("SELECT Name, Review FROM reviews WHERE     MovieID='$movieID'");
$review_values =mysql_fetch_assoc($review_results);
 echo '--------------------------------------------------------------------------------------------------------------'. '<br> <br>';
while ($review_values = mysql_fetch_assoc($review_results)) {          
echo $review_values['Name'] . ' says:' .  '<br />' . $review_values['Review'] . '<br />    <br />' . '<hr>';    
 }

$name = $_POST['name'];
$comments =$_POST['comments'];
$result=mysql_query("INSERT INTO reviews (Name, Review, MovieID)
VALUES ('$POST[$name]', '$_POST[$comments]', '$movieID')");

$result_values =mysql_fetch_assoc($result);
?>
</p>
</form>
<p>&nbsp;</p>
<form id="insert_comments" style="border:thin" name="insert_comments" method="POST">
<label>Name:</label>
<br />
  <input type="text" name="name" id="name" />
<br>
  <label for="desc">Comments:<br /></label>
<textarea name="comments" id="comments" cols="45" rows="5"></textarea>
</p>
<p>
 <input type="submit" name="submit" id="submit" value="Submit" />
</p>
</form>
<p>&nbsp;</p>
<input name="" type="hidden" value="$movieID" />
<br />

</div>
<!--End of Contentr-->
</div><!--End of content shadow-->

<div class="footer">

<hr />© Nate Christensen<hr />
</div><!--End of footer-->
</div><!--End of Main Container-->


</body>
 </html>

Ответы [ 4 ]

1 голос
/ 04 мая 2011

Мне кажется, проблема в том, что вы используете переменные: $ name, $ comments в качестве ключей массива.

$name = $_POST['name'];
$comments =$_POST['comments'];

Здесь вы читаете значения $ _POST для $ name и $ commens.

$result=mysql_query("INSERT INTO reviews (Name, Review, MovieID)
VALUES ('$POST[$name]', '$_POST[$comments]', '$movieID')");

Пока вы используете $ POST [$ name]

1 голос
/ 04 мая 2011

Ваш оператор вставки в строке 59:

$result=mysql_query("INSERT INTO reviews (Name, Review, MovieID) VALUES ('$POST[$name]', '$_POST[$comments]', '$movieID')");

Вы не можете поместить $ _POST непосредственно в строки.Используйте точечный (.) PHP оператор concat для вставки переменных в середину.Вы должны сделать это следующим образом:

$result=mysql_query("INSERT INTO reviews (Name, Review, MovieID) VALUES ('".$_POST[$name]."', '".$_POST[$comments]."', '".$movieID."')");

О, а также, вы уже поместили имя $ _POST и комментарий в переменную, поэтому самый правильный путь:

$result=mysql_query("INSERT INTO reviews (Name, Review, MovieID) VALUES ('$name', '$comments', '$movieID')");

Также, если фильмID - это тип INT, который не следует ставить апострофом

Он вставляется дважды, потому что вы не поместили оператор IF для обнаружения, если он уже отправлен.При первой загрузке страницы он вставляет после отправки еще одну вставку.Вы должны поставить:

if($_POST['submit']){
    // all php codes
}

Еще одна вещь, исправьте свой комментарий в:

<!- -End of NavBar-->

(строка 26)

0 голосов
/ 04 мая 2011

Вы можете добавить этот код or die(mysql_error()); в конце этой строки

$review_results = mysql_query("SELECT Name, Review FROM reviews WHERE MovieID='$movieID'");

И

$movie_results = mysql_query("SELECT MovieID, MovieName, Description, Genre, Rating FROM movie WHERE MovieName='$id'");

0 голосов
/ 04 мая 2011

Нейт, я знаю, что это придирки, но почему ты смешиваешь вызов базы данных с логикой отображения? Вызов базы данных может быть легко передан в отдельный метод класса (или, по крайней мере, вызов функции), который очистит ваш код, упростит обнаружение ошибок и сделает вас профессионалом.

Посмотрев немного на ваш код, я заметил, что одна из ваших строк SQL-запроса содержит: $POST[...] вместо $_POST[...], попробуйте добавить подчеркивание между $ и POST.

Также не забудьте очистить входные данные из массива $ _POST с помощью mysql_escape_string () или mysql_real_escape_string (). ПРИМЕЧАНИЕ. Mysql_real_escape_string () может быть успешно вызван только внутри открытого подключения mysql. Если вы не очистите свой ввод, вы оставите базу данных более или менее открытой для атак с использованием SQL-инъекций.

Я знаю, что вы студент и все еще учитесь, но действительно лучше изучить это сейчас и развить хорошие привычки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...