Бэкэнд базы данных PHP MySQL - PullRequest
0 голосов
/ 08 июля 2011

Может кто-нибудь сказать, что не так с этой строкой?

VALUES('$_POST[POS]','$_POST[GP]','$_POST[Goals]','$_POST[Assists]','$_POST[Points]','$_POST[Polarity]','$_POST[PPG]','$_POST[SHG]','$_POST[PIM]','$_POST[Hits]','$_POST[Shots]','$_POST[Shots %]')";

Это в контексте с:

<?php
 $con = mysql_connect("localhost","ernie","gomes");
 if (!$con)
   {
   die('Could not connect: ' . mysql_error());
   }

mysql_select_db("ernie", $con);

$sql="INSERT INTO statplayer (POS, GP, Goals, Assists, Points, Polarity, PPG, SHG, PIM, Hits, Shots, Shot %)
VALUES('$_POST[POS]','$_POST[GP]','$_POST[Goals]','$_POST[Assists]','$_POST[Points]','$_POST[Polarity]','$_POST[PPG]','$_POST[SHG]','$_POST[PIM]','$_POST[Hits]','$_POST[Shots]','$_POST[Shots %]')";

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

mysql_close($con)
 ?> 

Ответы [ 2 ]

2 голосов
/ 08 июля 2011

Поскольку в комментариях к вопросу предлагалось, это, вероятно, связано с пробелом в Shots %. Это должно быть указано как в SQL, так и в PHP. Ваша ошибка - ошибка PHP, но я думаю, что вы получите ошибку SQL, как только исправите ее.

См. Ниже, как поместить кавычки вокруг этого имени.

$sql="INSERT INTO statplayer (POS, GP, Goals, Assists, Points, Polarity, PPG, SHG, PIM, Hits, Shots, `Shot %`)
VALUES('$_POST[POS]','$_POST[GP]','$_POST[Goals]','$_POST[Assists]','$_POST[Points]','$_POST[Polarity]','$_POST[PPG]','$_POST[SHG]','$_POST[PIM]','$_POST[Hits]','$_POST[Shots]','."$_POST['Shots %']."')";

или

$sql="INSERT INTO statplayer (POS, GP, Goals, Assists, Points, Polarity, PPG, SHG, PIM, Hits, Shots, `Shot %`)
VALUES('$_POST[POS]','$_POST[GP]','$_POST[Goals]','$_POST[Assists]','$_POST[Points]','$_POST[Polarity]','$_POST[PPG]','$_POST[SHG]','$_POST[PIM]','$_POST[Hits]','$_POST[Shots]','{$_POST['Shots %']}')";

Но , пожалуйста , прочитайте о SQL-инъекции и о том, как это предотвратить. Ваш код полностью уязвим.

0 голосов
/ 08 июля 2011

Похоже, что с вашим кодом много проблем, но мы все должны с чего-то начать.Вверху вашего сценария поместите следующее, чтобы включить отчеты об ошибках:

error_reporting(-1);

Вы должны делать это для каждого файла, чтобы иметь лучший код.Чтобы ответить на ваш вопрос, причина его неудачи в том, что вам нужно поместить фигурные скобки вокруг переменных массива, например:

$string = "Some text with a {$array['var']} variable";

Также обратите внимание, что в переменной 'var' есть кавычки.Вы не можете сделать $ array [var] (без кавычек 'var', иначе вы получите уведомление о том, что var не определен. Кроме того, не рекомендуется использовать пробелы или символы типа '%' в именах переменныхПоэтому я изменил его в приведенном ниже примере на «ShotPercent».

Как уже упоминали многие другие, ваш скрипт уязвим для SQL-инъекций, поэтому я настоятельно рекомендую отказаться от mysql_ *функции полностью . Они устарели. Вместо этого используйте PDO. Что-то вроде этого должно работать:

<?php

$host = 'localhost';
$dbname = 'ernie';
$user = 'ernie';
$pass = 'gomes';

try {
    $dbh = new LoggedPDO("mysql:host=$host;dbname=$dbname", $user, $pass);
    $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    $dbh->setAttribute( PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC );
} catch(PDOException $e) {
    die("DB connection error: ".$e->getMessage());
}

$sql="INSERT INTO statplayer (POS, GP, Goals, Assists, Points, Polarity, PPG, SHG, PIM, Hits, Shots, ShotPercent)
    VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )";
$sth = $dbh->prepare($sql);

try {
    $sth->execute(array($_POST['POS'], $_POST['GP'], $_POST['Goals'], $_POST['Assists'], $_POST['Points'], $_POST['Polarity'], $_POST['PPG'] , $_POST['SHG'], $_POST['PIM'], $_POST['Hits'], $_POST['Shots'],$_POST['ShotPercent']));
} catch(PDOException $e) {
    die(echo $e->getMessage());
}

echo $sth->rowCount() .' record(s) added';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...