2017-02-22 28 views
0

я получил небольшую форму:добавления новой строки таблицы MYSQL с PHP не работает

<form id="plannerform" action="save.php" method="post"> 
    <input id="plannername" placeholder=" " type="text" autocomplete="off" name="plannername"> 
    <input id="plannersubmit" type="submit" value="eintragen"> 
</form> 

Как вы можете видеть есть action="save.php" и method="post" на ввода текста есть name="plannername".

И вот мой PHP:

$con = mysql_connect("myHost","myUser","myPW"); 
if (!$con) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 

mysql_select_db("myDB", $con); 

$sql="INSERT INTO anmeldungen (FR_PM) 
VALUES ('$_POST[plannername]')"; 

if (!mysql_query($sql,$con)) 
{ 
    die('Error: ' . mysql_error()); 
} 
echo "1 record added"; 

FR_PM является один столбец моей таблице. Но когда я нажимаю submit, даже новая строка не создается. Ничего не произошло. Но когда я вызываю свой php с помощью «mywebsite.com/save.php», он добавляет новую строку в мою таблицу (без значения в «FR_PM», что довольно очевидно)

Что делать неправильно?

+0

*** Пожалуйста [прекратить использование '' mysql_ * функции] (http://stackoverflow.com/questions/12859942/why- shouldnt-i-use-mysql-functions-in-php). *** [Эти расширения] (http://php.net/manual/en/migration70.removed-exts-sapis.php) удалены в PHP 7. Узнайте о [подготовленных] (http://en.wikipedia.org/wiki/Prepared_statement) заявлениях для [PDO] (http://php.net/manual/en/pdo.prepared-statements.php) и [ MySQLi] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) и подумайте об использовании PDO, [это действительно очень легко] (http: // jayblanchar d.net/demystifying_php_pdo.html). –

+0

[Little Bobby] (http://bobby-tables.com/) говорит, что *** [ваш скрипт подвержен риску инъекций SQL.] (Http://stackoverflow.com/questions/60174/how-can- я-не допустить, SQL-инъекцию-в-PHP) ***. Даже [избегая строки] (http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) небезопасно! –

ответ

0

изменить вставки запроса:

$sql="INSERT INTO anmeldungen (FR_PM) VALUES ('".$_POST["plannername"]."')"; 

Или

$plannername = $_POST["plannername"]; 
$sql="INSERT INTO anmeldungen (FR_PM) VALUES ('".$plannername."')"; 
+0

еще. ничего не происходит, когда я подчиняюсь. –

+0

@TobiasGlaus, любая ошибка, которую вы получаете? –

+0

Вы также можете поместить фигурные скобки вокруг переменной массива: '" ... VALUES ('{$ _POST [' plannername ']}') ";' – MadMarc

0

Кроме того, использование "name"= и не "id"= в HTML форме. Это обычно вводит в заблуждение при работе с формами и методом HTTP POST.

+0

Он уже добавил атрибут имени на последнем .... :-) –

+1

Да, я использую его уже :) Это в самом конце тега –

+0

Ook хорошо, потому что я тоже застрял в этой же проблеме. – NotANumber

3

Одна из вещей, которые вам нужно изучить, если вы новичок, вы должны попробовать непременно, чтобы держаться подальше от использования функции mysql_*, это обесценивается и ее больше не поддерживают в php. вместо этого используйте mysqli_* с подготовленными инструкциями или используйте подготовленные инструкции PDO.

подготовленные статусы заставляют вас код выглядеть чистым и его легко отлаживать.

это вы, например, с подготовленными заявлениями.

<form id="plannerform" action="save.php" method="post"> 
    <input id="plannername" placeholder=" " type="text" autocomplete="off" name="plannername"> 
    <input id="plannersubmit" type="submit" value="eintragen" name="submit"> 
</form> 

сек ave.php

<?php 
$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname  = "myDB"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 

// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

if (isset($_POST['submit'])) { 

    if (empty($_POST['plannername'])) { 

     die("Enter plannername"); 
    } else { 
     // prepare and bind 
     $stmt = $conn->prepare("INSERT INTO anmeldungen (FR_PM) VALUES (?)"); 
     $stmt->bind_param("s", $_POST['plannername']); 

     if ($stmt->execute()) { 

      echo "New records created successfully"; 

     } else { 

      echo "Could not insert record"; 
     } 

     $stmt->close(); 

    } 
} 
?> 

Причина, я использовал подготовленные заявления:

  • Подготовленные заявления уменьшает время разбора в качестве препарата на запроса выполняется только один раз (хотя заявление выполнено несколько раз)
  • Связанные параметры ограничения пропускной способности канала к серверу, как вам нужно отправить только параметры каждый раз, а не весь запрос
  • Подготовленные заявления очень полезны против инъекций SQL, так как значения параметров, которые передаются позже с помощью другого протокола , не нужно правильно экранировать. Если исходный оператор шаблон не получен из внешнего ввода, SQL-инъекция не может произойти .

Но когда я называю PHP с «mywebsite.com/save.PHP»добавляет новую строку в моей таблице (без значения в„FR_PM“, что вполне очевидно)

Что делать неправильно?

Ну ничего не допустить этого вам необходимо проверить если форма была отправлена, прежде чем сам процесс любой вещи

. Примечание: Если мы хотим, чтобы вставить какие-либо данные из внешних источников (например, пользовательский ввод из формы), то очень важно, чтобы данные продезинфицировать и проверяется. Всегда обрабатывайте ввод из формы, как если бы ее от очень опасного хакера

+0

Я использую ваш код, но все же. ничего не происходит, когда я подчиняюсь. –

+1

Очень полезный ответ ..... !!!!!!!! –

+0

Вы обновили форму и добавили атрибут имени к своей кнопке? этот код должен работать. @TobiasGlaus –

-1

вы можете попробовать

$value = $_POST['plannername']; 

$sql="INSERT INTO anmeldungen (FR_PM) VALUES ('{$value}')";