Использование PDO для вставки данных html-формы в таблицу SQL с ошибкой разбора [duplicate]

1

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

Я думаю, что у меня есть понимание общей концепции, но то, что я хотел бы сделать или скорее не делать, - это создать переменную ($ player1 = $ _POST ['player1'] или подобное...) для каждого поля ввода, которое у меня есть,

Есть ли способ в моем заявлении sql, я могу использовать что-то вроде $ _POST ['player1'], чтобы использовать вход из формы? Я попытался сделать это как таковое ниже, но Im получаю эту ошибку:

Ошибка анализа: синтаксическая ошибка, неожиданный '' (T_ENCAPSED_AND_WHITESPACE), ожидающий идентификатор (T_STRING) или переменная (T_VARIABLE) или номер (T_NUM_STRING) в строке 19

строка 19 является линией значений строки sql...

HTML

        <form method='post' action='phpfiles/Sqldata2.php'>
            Enter data in for team 1. <br>
            Enter Id: <input type='text' name='id1' maxlength='6'><br>
            Enter Teamname: <input type='text' name='team1' maxlength='30'><br>
            Enter city: <input type='text' name='city1' maxlength='30'><br>
            Enter Bestplayer: <input type='text' name='best1' maxlength='30'><br>
            Enter Year formed: <input type='number' name='year1' maxlength='4'><br>
            Enter website: <input type='text' name='website1' maxlength='40'><br>
            <br><br><br>

            <input type='submit' name='SQLdata' value='Submit Data'>                
        </form>

PHP

    <?php
     // server and database information
    $servername = " n/a  ";
    $username = "   n/a  ";
    $password = "   n/a  ";
    $dbname = "     n/a  ";

    if ($_SERVER["REQUEST_METHOD"] == "POST"){

        try {
            $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
            // set the PDO error mode to exception
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

            // begin the transaction
            $conn->beginTransaction();
            // our SQL statememtns
            $conn->exec("INSERT INTO teams (id, teamname, city, bestplayer, yearformed, website)
            VALUES ($_POST['id1'], $_POST['teamname1'], $_POST['city1'], $_POST['bestplayer1'], $_POST['yearformed1'], $_POST['website1'])");

            // commit the transaction
            $conn->commit();
            echo "New records created successfully";
            }
        catch(PDOException $e)
            {
            // roll back the transaction if something failed
            $conn->rollback();
            echo "Error: " . $e->getMessage();
            }

        $conn = null;
    }    
    ?>

Ошибка, которую я получаю, я считаю, является синтаксической ошибкой, такой как, что мне нужно еще немного ", потому что мой sql statment не является строкой? немного потерянный здесь и не уверен, что то, что я пытаюсь сделать, является правильным...

  • 2
    Используйте подготовленный оператор с привязкой параметра
  • 0
    Вы должны определенно взглянуть на опасность, поэтому SQL-инъекция и использование подготовленных операторов и всего такого хорошего. Но это ваша непосредственная проблема: hackingwithphp.com/5/10/0/arrays-in-strings
Теги:

1 ответ

1

У вас были опечатки, связанные с цитированием. Alos пытается использовать подготовленные инструкции, чтобы избежать инъекции SQL. Наконец, проверьте атрибуты html name вашей формы с вашими именами $_POST вы используете (team1 или $_POST['teamname1']).

например

$sql = "INSERT INTO teams (id, teamname, city, bestplayer, yearformed, website) VALUES (:id1, :teamname1, :city1, :bestplayer1, :yearformed1, :website1)";
$stmt = $conn->prepare($sql);
//Execute the query
$stmt->execute(array(':id1'=>$_POST['id1'], ':teamname1'=>$_POST['teamname1'], ':city1'=>$_POST['city1'], ':bestplayer1'=>$_POST['bestplayer1'], ':yearformed1'=>$_POST['yearformed1'], ':website1'=>$_POST['website1']));
  • 0
    допустим, у меня есть другой набор данных, который должен быть вставлен в таблицу вместе с этими данными ... essitianlly id2, teamname2 и т. д., и т. д., я просто повторяю приведенную выше формулировку и изменяю значения?
  • 0
    Вы можете использовать другой способ вставки для добавления нескольких строк: INSERT INTO команды VALUES (1, 2), (47, 105), (402, 7), (102, 4);
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню