Я немного смутился по этому вопросу, я видел отклонения в ответах, которые я нашел, и искал немного больше направлений для моего приложения. То, что я пытаюсь сделать, это использовать метод 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 не является строкой? немного потерянный здесь и не уверен, что то, что я пытаюсь сделать, является правильным...
У вас были опечатки, связанные с цитированием. 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']));