2016-01-14 2 views
-2

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

Форма:

<html> 
 
    <body> 
 
    <form id="FormName" action="added.php" method="post" name="FormName"> 
 
    <table width="448" border="0" cellspacing="2" cellpadding="0"> 
 

 
    <tr><td width = "150"><div align="right"><label for="name">Name of Farm </label></div></td> 
 

 
<td><input id="name" name="name" type="text" size="25" value="" maxlength="255"></td></tr><tr><td width = "150"><div align="right"><label for="owners">Name of Owners</label></div></td> 
 

 
<td><input id="owners" name="owners" type="text" size="25" value="" maxlength="255"></td></tr><tr><td width = "150"><div align="right"><label for="location">Location (city,state)</label></div></td> 
 

 
<td><input id="location" name="location" type="text" size="25" value="" maxlength="255"></td></tr><tr><td width = "150"><div align="right"><label for="phone">Phone</label></div></td> 
 

 
<td><input id="phone" name="phone" type="text" size="25" value="" maxlength="10"></td></tr><tr><td width = "150"><div align="right"><label for="email">Email</label></div></td> 
 

 
<td><input id="email" name="email" type="text" size="25" value="" maxlength="255"></td></tr><tr><td width = "150"><div align="right"><label for="website">Website</label></div></td> 
 

 
<td><input id="website" name="website" type="text" size="25" value="" maxlength="255"></td></tr><tr><td width = "150"><div align="right"><label for="description">Description</label></div></td> 
 

 
<td><textarea id="description" name="description" rows="4" cols="40"></textarea></td></tr><tr><td width = "150"><div align="right"><label for="dateadded">Today's Date</label></div></td> 
 

 
<td><input id="dateadded" name="dateadded" type="text" size="25" value="" maxlength="255"></td></tr><tr><td width = "150"><div align="right"><label for="logo">Logo</label></div></td> 
 

 
<td><input id="logo" name="logo" type="text" size="25" value="" maxlength="255"></td></tr><tr><td width = "150"><div align="right"><label for="state">State</label></div></td> 
 

 
<td><input id="state" name="state" type="text" size="25" value="" maxlength="2"></td></tr><tr><td width="150"></td><td> 
 

 
<input type="submit" name="submitButtonName" value="Add"></td> 
 
</tr></table></form> 
 
</body> 
 
</html> 
 

 
PHP is in 2 files - one with db connection instructions and the other to post the data in the mySQL. 
 

 

 
**Code to Connect to mySQL:** 
 

 
<?php 
 

 
$hostname='localhost'; //// specify host, i.e. 'localhost' 
 
$user='llamabre_visitor'; //// specify username 
 
$pass='llama'; //// specify password 
 
$dbase='llamabre_farms1'; //// specify database name 
 
$connection = mysql_connect("$hostname" , "$user" , "$pass") 
 
or die ("Can't connect to MySQL"); 
 
$db = mysql_select_db($dbase , $connection) or die ("Can't select database."); 
 
?> 
 

 
<a href="index.php">Back to List</a> 
 

 

 
**Code for posting to mySQL:** 
 

 
<?php 
 

 
include("connect.php"); 
 

 
$name = trim($_POST['name']); 
 
$owners = trim($_POST['owners']); 
 
$location = trim($_POST['location']); 
 
$phone = trim($_POST['phone']); 
 
$email = trim($_POST['email']); 
 
$website = trim($_POST['website']); 
 
$description = trim($_POST['description']); 
 
$dateadded = trim($_POST['dateadded']); 
 
$logo = trim($_POST['logo']); 
 
$state = trim($_POST['state']); 
 

 
$query = "INSERT INTO farmsdir (id, name, owners, location, phone, email, website, description, dateadded, logo, state) 
 

 
VALUES ('', '$name', '$owners', '$location', '$phone', '$email', '$website', '$description', '$dateadded', '$logo', '$state')"; 
 

 
$results = mysql_query($query); 
 

 
if ($results) 
 
{ 
 
    echo "Details added."; 
 
} 
 
mysql_close(); 
 
?>

+1

Ужасный HTML, открытый широко для SQL-инъекций, используя устаревшую функцию 'mysql_ *', не проверял состояние соединения. Лучше исправить это в первую очередь. Попробуйте использовать MySQLi/PDO. – Raptor

+3

Пожалуйста, не используйте 'mysql_select_db'. Вы оставляете себя открытым для SQL-инъекции. Вместо этого используйте PDO. Взгляните на эти руководства по неттокам, чтобы начать работу: [здесь] (http://code.tutsplus.com/tutorials/why-you-should-be-using-phps-pdo-for-database-access--net -12059) и [здесь] (http://code.tutsplus.com/tutorials/php-database-access-are-you-doing-it-correctly--net-25338). Это на самом деле меньше кода в конце и создает более чистый код. – br3nt

+0

«$ var» может быть просто $ var без кавычек в вашем вызове mysql_connect(). –

ответ

2

Вот полный пример кода с помощью PDO:

$dbhost = "localhost"; 
$dbname = "llamabre_farms1"; 
$dbusername = "llamabre_visitor"; 
$dbpassword = "llama"; 

$link = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbusername,$dbpassword); 

$statement = $link->prepare(" 
    INSERT INTO farmsdir 
    (name, owners, location, phone, email, website, description, dateadded, logo, state) 
    VALUES(:fname, :sowners, :slocation, :sphone, :semail, 
    :swebsite, :sdescription, :dateadded, :logo, :state) 
    "); 

$statement->execute(array(
    "fname" => $_POST['name'], 
    "sowners" => $_POST['owners'], 
    "slocation" => $_POST['location'], 
    "sphone" => $_POST['phone'], 
    "semail" => $_POST['email'], 
    "swebsite" => $_POST['website'], 
    "sdescription" => $_POST['description'], 
    "dateadded" => date('Y-m-d',strtotime($_POST['dateadded'])), 
    "logo" => $_POST['logo'], 
    "state" => $_POST['state'], 
)); 

Объяснение:

Prepared statements используется для очистки вход для ПРЕДОТВРАТИТЬ SQL инъекции. Вы можете использовать свое значение без одинарной или двойной котировки в заявлении SQL для привязки.

В функции Execute вы можете передать массив для вашего SQL statement с таким же именем.

чем причина использовать PDO или mysqli_ * вместо mysql_ : Поскольку mysql_ расширение является устаревшим и не доступны в PHP 7.

Side Примечание:

Я знаю, @Rahautos уже предоставила решение использовать MYSQL стандарт Date Format('Y-m-d') как я использовал в своих execution.

+0

Спасибо! Я посмотрю на это больше сегодня вечером. Я понятия не имел о PDO и mysqli. – Jim

+0

Уверенный u может @jim ... если вы думаете, что этот ответ поможет вам решить проблему, а не пометить как принятый щелчком по левому зеленому галочку, это поможет другим – devpro

0

использование strtotime это делает предположение, основанное на формате дату вы даете ему. Например

$dateadded=date("Y-m-d", strtotime($dateadded))