2015-07-21 4 views
-4

Для начала я хотел бы извиниться заранее за любую нехватку информации, я попытаюсь описать свою проблему как можно лучше и предоставить вам столько данных, сколько считаю.Как обновить таблицу MySQL через PHP?

Итак, я новичок в PHP, и у меня было несколько проблем с ним в последние несколько дней. У меня есть две основные проблемы, первая из которых я прошу о помощи в этой теме.

В принципе, я создал сайт для своих родителей для их недавно найденной компании MotorHome Hire. Это всего лишь небольшая операционная операция, поэтому я предложил создать веб-сайт, поскольку у меня есть краткая история в HTML, и вскоре я начну обучение в области веб-разработки, поэтому подумал, что было бы неплохо изучить кое-что путь.

Одна страница веб-сайта позволяет клиенту проверить текущую доступность MotorHome, которая обновляется через базу данных, размещенную локально через MySQL. календарь работает по назначению, и я могу обновить его вручную, используя HeidiSQL, чтобы добавить записи в таблицу. Однако я хотел бы создать страницу администратора, где мои родители могли бы легко обновлять базу данных через веб-сайт, не получая слишком технически участия.

Это мой PHP код:

<?php 
if(isset($_POST['update'])) 
{ 
$dbhost = 'localhost:3306'; 
$dbuser = 'root'; 
$dbpass = 'PASS'; 
$conn = mysqli_connect($dbhost, $dbuser, $dbpass); 
if(! $conn) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 

$olddate = $_POST['date']; 
$name = $_POST['name']; 
$newdate = strtotime(str_replace('/', '-', $olddate)); 

$sql = "UPDATE calendar ". 
    "SET date = $newdate "; 
    "SET customer = $name" ; 

mysqli_select_db($conn, 'calendar'); 
$retval = mysqli_query($conn, $sql); 
if(! $retval) 
{ 
    die('Could not update data: ' . mysqli_error($conn)); 
} 
echo "Updated data successfully\n"; 
mysqli_close($conn); 
} 
else 
{ 
?> 
<?php 
} 
?> 

вопрос у меня, однако, является то, что каждый раз, когда я ударил обновления по форме, я получаю эту ошибку:

Could not update data: Duplicate entry '0000-00-00' for key 'PRIMARY'

Это наводит на мысль для меня, что база данных получает значение 0000-00-00 вместо даты, введенной в форму. Он также предлагает мне, что он пытается добавить в таблицу несколько записей 0000-00-00, поскольку в настоящее время это не запись в таблице?

Я считаю, что проблема связана с несовместимостью в типах «даты» для html и SQL, однако я не уверен, я попытался исправить формат даты, так как HTML запрашивает его в форме DD/MM/ГОД, тогда как база данных хранит его в форме YEAR-MM-DD.

Любое просвещение по моей ситуации было бы очень благодарным, поскольку мой разум полностью измотан в этой точке.

EDIT:

Так что я считаю, что INSERT INTO маршрута правильным способа есть, я обновил свой PHP код следующим образом:

<?php 
if(isset($_POST['update'])) 
{ 
$dbhost = 'localhost:3306'; 
$dbuser = 'root'; 
$dbpass = 'PASS'; 
$conn = mysqli_connect($dbhost, $dbuser, $dbpass); 
if(! $conn) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 

$olddate = $_POST['date']; 
$name = $_POST['name']; 
$newdate = strtotime(str_replace('/', '-', $olddate)); 

$sql = "INSERT INTO calendar (date, customer) 
VALUES ($olddate, $name)"; 

mysqli_select_db($conn, 'calendar'); 
$retval = mysqli_query($conn, $sql); 
if(! $retval) 
{ 
    die('Could not update data: ' . mysqli_error($conn)); 
} 
echo "Updated data successfully\n"; 
mysqli_close($conn); 
} 
else 
{ 
?> 
<?php 
} 
?> 

Но я теперь получаю ошибку:

Could not update data: Unknown column 'test' in 'field list'

«test» - это имя, которое я использовал для поля клиента, однако я не знаю, что такое «список полей» - это ссылка на? Любая помощь?

+0

'' SET date = $ newdate ";' <= * доллар останавливается здесь *. Полуколоны - это конец символа оператора и '' SET customer = $ name ";' никогда не будет выполняться. –

+0

Поскольку '$ name' - это строка, вы должны использовать апострофии в SQL-запросе. 'VALUES ($ olddate, '$ name')' – Genhis

+0

как данные, связанные с датой –

ответ

1

Вы должны указать оператор WHERE в свой запрос UPDATE, чтобы сообщить MySQL, что вы обновляете. Сейчас он пытается обновить все и все в этой таблице до тех же значений, и одно из этих значений является первичным ключом, который должен быть уникальным.

Например:

$sql = "UPDATE calendar 
     SET date = '$newdate', customer = '$name' 
     WHERE date = '$olddate'"; 

Sidenote: Ваши даты в этом формате 2015-07-21 в качестве примера.Вам нужно будет связать связанные с датой переменные в кавычках. В противном случае это приведет к синтаксической ошибке.

Ссылки:

+0

Итак, как мне сказать, чтобы создать совершенно новую запись? Единственные записи в таблице - дата и клиент, и оба они поставляются по запросу: S Я, вероятно, просто тупой, но я был на этом экране в течение нескольких дней, мой мозг не работает так хорошо, хаха .. – OctaRayne

+0

Если бы вы хотели сделать новую запись, вы бы «INSERT». –

+0

нет необходимости в дополнительных котировках и конкатенациях. Кроме того, все переменные должны быть обернуты кавычками при работе со строковыми значениями. Кроме того, это приведет к ошибке и приведет к ошибке. UPDATE/SET использует запятые для разделения столбцов. Прочтите руководство https://dev.mysql.com/doc/refman/5.0/en/update.html –

0

Спасибо за вход каждого. Это, наконец, работает, я не мог бы сделать это без удивительного сообщества на этом веб-сайте. Решение было действительно:

<?php 
if(isset($_POST['update'])) 
{ 
$dbhost = 'localhost:3306'; 
$dbuser = 'root'; 
$dbpass = 'PASS'; 
$conn = mysqli_connect($dbhost, $dbuser, $dbpass); 
if(! $conn) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 

$date = $_POST['date']; 
$name = $_POST['name']; 
$newdate = strtotime(str_replace('/', '-', $olddate)); 

$sql = "INSERT INTO calendar (date, customer) 
VALUES ('$date', '$name')"; 

mysqli_select_db($conn, 'calendar'); 
$retval = mysqli_query($conn, $sql); 
if(! $retval) 
{ 
    die('Could not update data: ' . mysqli_error($conn)); 
} 
echo "Updated data successfully\n"; 
mysqli_close($conn); 
} 
else 
{ 
?> 
<?php 
} 
?> 
+0

. Это доступно для SQL-инъекций, хотя –

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