2016-08-02 7 views
-1

Я не могу понять, почему значения из этого файла PHP не вставляются в мою базу данных SQL. Код почти идентичен рабочему файлу PHP, который я использую для другой таблицы. Код выглядит следующим образом:Значения не вставляются в базу данных SQL

<?php 
mysql_connect("xxx","xxx","xxx"); 
mysql_select_db("andrew_history"); 
$Name=$_POST['Name']; 
$Year=$_POST['Year']; 
$Press=$_POST['Press']; 
$Description = $_POST['Description']; 
$Title = $_POST['Title']; 


$dbLink = mysql_connect("xxxx", "xxxx", "xxxxxx"); 
    mysql_query("SET character_set_client=utf8", $dbLink); 
    mysql_query("SET character_set_connection=utf8", $dbLink); 

if($submit) 
{ 
    if($Name&&$Year&&$Press&&$Description&&$Title) 
    { 
     $insert=mysql_query("INSERT INTO historytable (Name,Year,Press,Description,Title) VALUES ('$Name','$Year','$Press', '$Description', '$Title') "); 
     echo "<meta HTTP-EQUIV='REFRESH' content='0; url=history.php'>"; 
    } 
    else 
    { 
     echo "please fill out all fields"; 
    } 
} 
?> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>History</title> 
</head> 

<body> 
<center> 
<form action="history.php" method="POST"> 
<table> 
<tr><td>Name: <input type="text" name="Name"/></td></tr> 
<tr><td>Year: <input type="text" name="Year"/></td></tr> 
<tr><td>Press: <input type="text" name="Press"/></td></tr> 
<tr><td>Title: <input type="text" name="Title"/></td></tr> 
<tr><td colspan="2">Description: </td></tr> 
<tr><td colspan="5"><textarea name="Description" rows="10" cols="50"></textarea></td></tr> 
<tr><td colspan="2"><input type="submit" name="submit" value="Description"></td></tr> 
</table> 
</form> 

<?php 
$dbLink = mysql_connect("xxxx", "xxxx", "xxxxx"); 
    mysql_query("SET character_set_results=utf8", $dbLink); 
    mb_language('uni'); 
    mb_internal_encoding('UTF-8'); 


$getquery=mysql_query('SELECT * FROM historytable ORDER BY id DESC'); 


while($rows=mysql_fetch_assoc($getquery)) 
    { 
     $id=$rows['id']; 
     $Name=$rows['Name']; 
     $Year=$rows['Year']; 
     $Press=$rows['Press']; 
     $Description=$rows['Description']; 
     $Title=$rows['Title']; 
     echo $Name . $Year . '<br/>' . '<br/>' . $Press . '<br/>' . '<br/>' . $Description . $Title; 
    } 
?> 

</body> 
</html> 

Ссылка на сайт: http://aswanson.net/Work/history.php

+1

Вы можете проверить 'mysql_error' за ошибки. НО!! Функции mysql_ * устарели и удалены с PHP7. И это просто плохая практика, потому что вы открыты для SQL-инъекций. (Представьте себе кого-то с именем O'Leary). Теперь переключитесь на PDO или mysqli, прежде чем зайти слишком далеко. – aynber

+0

вы тестируете $ submit, но вы не устанавливаете $ submit, когда вы устанавливаете другие переменные из POST. Кроме того, вам НЕОБХОДИМО фильтровать входные данные и параметризовать ваш запрос. И используйте PDO или mysqli_, поскольку методы, которые вы используете, устарели – VikingBlooded

+0

'if ($ submit)' Я думаю, что вот ошибка. вы не определены $ submit variable –

ответ

0

if ($ submit) здесь ошибка. Вы не задали никакой переменной $ submit. Проверьте код ниже.

<?php 
mysql_connect("xxx","xxxx","xxxx"); 
mysql_select_db("andrew_history"); 
$Name=$_POST['Name']; 
$Year=$_POST['Year']; 
$Press=$_POST['Press']; 
$Description = $_POST['Description']; 
$Title = $_POST['Title']; 

$dbLink = mysql_connect("xxxx", "xxxx", "xxxx"); 
mysql_query("SET character_set_client=utf8", $dbLink); 
mysql_query("SET character_set_connection=utf8", $dbLink); 

if(isset($_POST['submit'])) 
{ 
    if(!empty($Name) && !empty($Year) && !empty($Press) && !empty($Description) && !empty($Title)) 
    { 
    $insert=mysql_query("INSERT INTO historytable (Name,Year,Press,Description,Title) VALUES ('$Name','$Year','$Press', '$Description', '$Title') "); 
    echo "<meta HTTP-EQUIV='REFRESH' content='0; url=history.php'>"; 
} 
else 
{ 
    echo "please fill out all fields"; 
} 
} 
?> 
+0

Это относится к значениям типа '0', которые могут быть достоверными данными как логически ложные и не вставлять их. – tadman

+0

отредактировал @tadman chek it now! что r8? –

+0

'isset' является частью проблемы здесь. Остальная проверка - 'empty()'. Это также включает в себя кучу бесполезного кода, присутствующего в оригинале, например, избыточное соединение. Я редактировал для удаления данных имени пользователя/пароля. – tadman

1

Я хотел бы начать отладку, добавив проверки ошибок для всех MySQL вызовов печати соответствующих сообщений, когда они терпят неудачу. Обязательно укажите сообщение, возвращенное mysql_error(). Как только вы проведете его с надлежащей диагностикой, проблема, надеюсь, станет очевидной.

Тем не менее, две ноты:

  • mysql_ API является устаревшим, вы должны использовать mysqli_ или PDO, если это не унаследованного кода.
  • Обязательно избегайте ввода пользователем, чтобы избежать атак SQL-инъекций. Эта проблема имеет особое значение теперь, когда вы публично разместили URL-адрес своего сайта вместе с уязвимым кодом. Злоумышленник теперь точно знает, что ему нужно сделать, чтобы запускать произвольные MySQL-запросы против вашего сервера.
Смежные вопросы