2013-10-14 3 views
-1

Я работаю над формой и изучаю MySQL. Я хочу вставить только данные в базу данных MySQL. Вот мои файлы.Я пытаюсь вставить данные в базу данных mysql. Но мой код не работает

Мой файл insert.php содержит это:

<?php 
include_once('ressources/init.php'); 
if (isset($_POST['title'], $_POST['contents'])){ 
    // Here we use MySQL-Code 
    mysql_query(" 
     INSERT INTO `posts` SET 
      `title` = '{$_POST['title']}', 
      `contents` = '{$_POST['contents']}' 
    "); 
} 
?> 

<html lang="en"> 
<head> 
<title>Simple Form</title> 
</head> 
<body> 
<form action=""> 
      <label for="title">Title:</label> 
      <input type="text"> 
      <label for="post">Post:</label> 
      <textarea name="post" id="post" cols="30" rows="10"></textarea> 
      <input type="submit"> 
</form> 
</body> 
</html> 

И мой init.php содержит:

<?php 
include_once('config.php'); 

mysql_connect(DB_HOST, DB_USER, DB_PASS); 
mysql_select_db(DB_NAME); 
?> 

И мой последний файл является config.php:

<?php 
$config['db_host'] = 'localhost'; 
$config['db_user'] = 'root'; 
$config['db_pass'] = 'root'; 
$config['db_name'] = 'php_tutorial'; 

foreach ($config as $k => $v){ 
    define(strtoupper($k), $v); 
} 
?> 

Данные для входа должны быть правильными. И я не знаю, почему это невозможно для меня, чтобы заполнить базу данных новыми данными. Любая помощь и любой совет будут оценены.

Вот ссылка на картину моей панели управления PHPMyAdmin: http://i.imgur.com/VE68nZ8.jpg

Большое спасибо заранее.

+0

Вы должны действительно следить за [Маленькими таблицами Бобби] ​​(http://bobby-tables.com/) .... – Neal

+0

Вы не указали, с какими проблемами вы столкнулись. В чем вопрос? – Lion

+0

Здесь много и много чего не так. Начните с поиска учебника по 'mysqli', а не' mysql'. Функции '' mysql_ * 'устарели и скоро будут удалены. –

ответ

0

изменение <form action=""> к <form method="POST"> - это будет делать трюк

следующий пункт <input type="text"> изменить его <input type="text" name="title">

также рассмотреть проблему инъекции SQL в коде, используйте mysql_escape_string, также вместо $_POST вы можете использовать $_REQUEST массив

и не забудьте использовать mysql_query(...) or die(mysql_error());

UPDATE: спасибо @Neal - конечно, не используйте устаревшие и устаревшие MYSQL_ api, вместо этого используйте MYSQLI или PDO, с параметрическими запросами

+0

Нет ... пожалуйста, нет ... – Neal

+0

@ Нил в чем проблема? –

+0

Существует ** больше поддержки ** для 'mysql_ *' функций, они [** официально устарели **] (https://wiki.php.net/rfc/mysql_deprecation), ** больше не поддерживаются ** и будет [** удален **] (http://php.net/manual/en/function.mysql-connect.php#warning) в будущем. Вы должны обновить свой код с помощью [PDO] (http://php.net/pdo) или [MySQLi] (http://php.net/msqli), чтобы обеспечить функциональность вашего проекта в будущем. – Neal

0

Сначала вам нужно прекратить использование mysql и переключиться на mysqli/PDO.

Тем не менее, используя текущий код,

ВАШ insert.php ДОЛЖНЫ БЫТЬ:

<?php 
include_once('ressources/init.php'); 
if (isset($_POST['title']){ 
    $title = mysql_real_escape_string($_POST['title']); 
    $contents = mysql_real_escape_string($_POST['contents']); 
    $q="INSERT INTO posts SET (title, contents) VALUES ('$title','$contents')"; 
    mysql_query($q); 
} 
?> 

<html lang="en"> 
    <head> 
     <title>Simple Form</title> 
    </head> 
    <body> 
     <form action="" method="POST"> 
      <label for="title">Title:</label> 
      <input name="title" type="text"> 
      <label for="contents">Post:</label> 
      <textarea name="contents" id="contents" cols="30" rows="10"></textarea> 
      <input type="submit"> 
     </form> 
    </body> 
</html> 

mysql_real_escape_string() функция поможет предотвратить инъекции (вредные символы будут экранированы от вашей строки запроса) ,

Это должно вас начать.

Кроме того, в качестве примечания по безопасности. Если вы еще этого не сделали, убедитесь, что ваш файл config.php находится под общей корневой папкой вашего сайта, чтобы защитить имя пользователя и пароль mysql от простоты просмотра в браузерах/etc. .

+0

Почему downvote? – IIIOXIII

-1

Вы можете попробовать с PDO: (копия с php.чистый и модифицированный)

<?php 

$dsn = 'mysql:dbname='.DB_NAME.';host='.DB_HOST; 

try { 
    $dbh = new PDO($dsn, DB_USER, DB_PASS); 
} catch (PDOException $e) { 
    echo 'Connection failed: ' . $e->getMessage(); 
} 

?> 

в вашей форме есть код типа:

<input type="text"> 

Пожалуйста, укажите имя поля, как:

<input type="text" name="title"> 

позже, вы можете получить содержимое этого поля, как $ _GET ['title']. Из-за ограничений запросов GET будет полезно, если вы добавите метод = "POST" в вашу форму.

<form action="" method="POST"> 

вы можете получить титул как $ _POST [ 'титул']

if (isset($_POST['title'], $_POST['contents'])){ 
    // Here we use MySQL-Code 
    $stmt = $dbh->prepare(" 
     INSERT INTO posts (title, contents) VALUES(:title, :post) 
    "); 
    $stmt->bind_value(':title', $_POST['title']); 
    $stmt->bind_value(':post', $_POST['post'); 
    $stmt->execute(); 
} 

Я не 100% уверен, что поддержка MySQL именованные параметры, но вы можете попробовать.

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