2014-05-20 7 views
0

iam пытается сделать php-функцию, которая принимает параметры с URL-адреса и вставляет его в базу данных Я попытался изучить его, набрав «url-адрес», но нет никакой вставки, что может быть проблемой ?Получение параметров из url

<?php 

$Lat = $_GET['lat'];  //Get Latitude Data 
$Long = $_GET['lng'];  // Get Longitude Data 
$type = "restaurant";   //marker type 
$name = "A.C.S";    //Name 
$add= "Bahrain"; 

$dbName = "uobtrack_acstracking"; //Database name 

$db = mysql_connect ("localhost","username", "password") or die("Unable To Connect "); //Connect to database 

$test= mysql_select_db ($dbName,$db) or die("Unable to select database"); //Test Connection 

$query = "INSERT INTO `uobtrack_acstracking`.`markers` (`name`, `address`, `lat`, `long`, `type`) VALUES ('$name', '$add', '$Lat', '$Long', '$type');"; //Insert Query 

$Alpha = @mysql_query($query,$db); //Execute Query 

if($Alpha) 
echo "<br> insertion succeeded..."; 
else 
echo "<br> insertion failed..."; 

mysql_close($db); //Close Connection 
} 
?> 
+0

любые ошибки, видимые, но не сказать, но напрямую вставлять данные пользователя в базу данных могут быть большой ошибкой, и я бы рекомендовал использовать библиотеку PDO с надлежащим связыванием, – Neo

+0

удалите @ из @mysql_query, чтобы увидеть сообщения об ошибках. Также используйте echo mysql_errno ($ db). ":". mysql_error ($ db). "\ n"; для печати ошибок mysql –

+0

mysql- lib устарел с PHP 5.5.0. Поэтому лучше использовать mysqli (например mysqli_query()). Добавьте ваш запрос к отказу SQL-Injection, поскольку вы напрямую используете пользовательский ввод! Удалите @ перед запросом, чтобы получить сообщение об ошибке для отладки. Вы проверяли соответствие типов? Вы вводите все значения в виде строки. Может возникнуть проблема, если вы определили (например) поле lat как целое. – newBee

ответ

0

Я обнаружил, что MySql очень затруднен при использовании переменных в ваших утверждениях (также подверженных SQL-инъекции). Я бы рекомендовал использовать PDO. Это довольно легко изучить и позволяет использовать подготовленные заявления. Вы можете адаптировать пример ниже, чтобы соответствовать вашим потребностям:

$opt = array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 
    // other options 
); 

$dbh = new PDO('mysql:host=localhost;dbname=yourDatabse;charset=utf8', 'yourUsername', 'yourPassword', $opt); 

$opt для отчетов об ошибках

try { 
    $sql= "INSERT INTO `table`(`column1`, `column2`) VALUES(:exampleX, :trialX)"; 
    $stmt = $dbh->prepare($sql); 
    $stmt->bindParam(':exampleX', $example, PDO::PARAM_STR); 
    $stmt->bindParam(':trialX', $trial, PDO::PARAM_STR); 
    $stmt->execute(); 

} catch(PDOException $ex) { 
    echo "An Error occured!"; //user friendly message 
    echo ($ex->getMessage()); 
} 

The try {...} catch {...} действует как способ показать ошибки. Когда вы видите :something, это параметр, который позволяет вам иметь переменную в инструкции. Причина, по которой не использовать имя переменной в параметре ($stmt->bindParam(':trialX', $trial, PDO::PARAM_STR); вместо $stmt->bindParam(':trial', $trial, PDO::PARAM_STR);, когда я задал подобный вопрос, сказал, чтобы я не использовал имя переменной для имени параметра.

Это может показаться действительно сложным (по-прежнему для меня), но я надеюсь, что он ответит на ваш вопрос.

+0

спасибо, это очень помогло мне благодарить много за ваши усилия и время: D –

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