2014-11-08 1 views
1

Я очень новичок в php, и я пытаюсь вставить данные в свою базу данных. Я уже могу назвать «Locate» в моей базе данных, которую я пытаюсь обновить, он имеет столбцы «Долгота», «Широта» и «Идентификатор».вставить данные в mysql после сканирования для уже использованного имени пользователя

Во-первых, мой код ниже подходит для обновления этой таблицы.

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

<?php 

$longitude = $_GET['longitude']; 
$latitude = $_GET['latitude']; 
$username = $_GET['username']; 

// Create connection 
$con=mysqli_connect("localhost","dbuser","password","yviewdb"); 

// Check connection 
if (mysqli_connect_errno()) 
{ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

$sql = "UPDATE CFP SET Longitude = '$longitude' AND Latitude = '$latitude' WHERE ID = '$username';"; 

    $res = mysql_query($sql,$con) or die(mysql_error()); 

// Close connections 
mysqli_close($con); 
if ($res) { 
echo "success"; 
}else{ 
echo "failed"; 
} 
?> 

ответ

4

Есть несколько вещей неправильно с вашим кодом, будучи эти строки:

$sql = "UPDATE CFP SET Longitude = '$longitude' AND Latitude = '$latitude' WHERE ID = '$username';"; 

$res = mysql_query($sql,$con) or die(mysql_error()); 

Вы смесительные API, MySQL, используя mysql_ и mysqli_, они не смешиваются друг с другом.

Sidenote: переменная соединения DB входит в первую очередь в mysqli_, так что она была изменена, чтобы отразить ее. См. Исправление ниже.

Кроме того, вы используете AND вместо запятой (в качестве разделителя) в своем SET для разделения обоих столбцов, которые необходимо обновить.

$sql = "UPDATE CFP SET Longitude = '$longitude', Latitude = '$latitude' WHERE ID = '$username';"; 

$res = mysqli_query($con,$sql) or die(mysqli_error($con)); 

Вы также закрыть подключение к БД слишком рано, поместите его после того, как вы проверили, если запрос был успешным:

if ($res) { 
echo "success"; 
}else{ 
echo "failed"; 
} 

mysqli_close($con); 

Также убедитесь, что ваша форма отражает ваш метод GET для вашего переменные.

Плюс, ваш действующий код открыт для SQL injection. Используйте prepared statements, или PDO with prepared statements, они намного безопаснее.


Посетите веб-сайт MySQL.com синтаксиса на UPDATE:


Однако название вашего вопроса читать как «вставить данные ..."И в вашем вопросе „ и я пытаюсь вставить данные в свою базу данных“

Если вы хотите вставить, а не обновление, а затем сделать

$sql = "INSERT INTO CFP (Longitude, Latitude) VALUES ('$longitude', '$latitude')"; 

Для синтаксиса о том, как вставить в таблицу посетите:


Ошибка отчетности

Добавить error reporting в верхней части файла (ов), который поможет найти ошибки.

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

// rest of your code 

Sidenote: Сообщения об ошибках не должно быть сделано только в постановке, и никогда производства.

1

Прежде всего, вы никогда не должны использовать запрос GET для внесения изменений в базу данных. Запросы GET с сервера должны использоваться только для просмотра данных, например, в поисковом запросе или что-то в этом роде.

Затем вы не избегаете предоставленной вами информации для вредоносного кода.

Наконец, вы смешиваете API mysql и mysqli, который не дает вам поведения, которое вы хотите.

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

<?php 
$longitude = $_GET['longitude']; 
$latitude = $_GET['latitude']; 
$username = $_GET['username']; 

// Create connection 
$con=mysqli_connect("localhost", "dbuser", "password", "yviewdb"); 

// Check connection 
if (mysqli_connect_errno()){ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

$sql = "UPDATE CFP SET Longitude = '$longitude', Latitude = '$latitude' WHERE ID = '$username'"; 

$res = mysqli_query($con, $sql) or die(mysql_error()); 

// Close connections 
mysqli_close($con); 
if($res){ 
    echo "success"; 
}else{ 
    echo "failed"; 
} 
?> 

Изменения: 1. Вы не поместите полуточку в конце запроса в переменную $ sql, вы просто закрываете скобку и помещаете полуколонную колонку в конец регулярного оператора PHP.

  1. Я использовал дополнительное форматирование, чтобы сделать ваш код более разборчивым.

  2. Использовать запятые, а не «AND» при установке нескольких значений в инструкции UPDATE для MySQL.

+0

* «Вы не помещаете полуточку в конце запроса в переменную $ sql» * - Если это один запрос, то точка с запятой в порядке, нет синтаксической ошибки, это действительный. –

+0

'mysql_error()', который должен быть 'mysqli_error ($ con)' –

+1

О да, вы правы, Фред, не поймал этого. Я просто читал ваш ответ на этот вопрос, мы по тем же направлениям; Я думаю, что ваш более тщательный, поэтому ваш должен использоваться. – visigoth