php: добавление URL-адреса Google Maps в базу данных

#php #mysql #url

#php #mysql #url

Вопрос:

У меня есть поле формы, в котором кто-то может опубликовать URL-адрес Google Maps (html), который я затем хочу поместить в базу данных. Затем я извлекаю его, чтобы использовать встроенную карту html непосредственно на своей странице. Я пытался использовать urlencode () и htmlspecchars (), но:

а) я не уверен, что $ _POST неправильно обрабатывает данные в первую очередь б) Я не уверен, что лучший способ сохранить такой длинный URL-адрес в MySQL

Запись в базе данных в порядке, она входит, но не вся. Не уверен, где это происходит. Для моего столбца db для параметра VARCHAR установлено значение 4000.

HTML:

 <p class="form-title">Google map link</p>
<textarea id="map_link" cols="100" rows="5" name="maplink_entry"></textarea>
  

запись в базе данных php:

 $map_link_entry = $_POST['map_link_entry'];
$safe_map_link_entry = mysql_real_escape_string($map_link_entry);
$query_do_entries = mysql_query("INSERT INTO all_places VALUES ('',(NOW()), '$address_entry','$safe_map_link_entry', '$username_entry', '$like', '$dislike', '$source')");
  

поиск базы данных php:

 $result = '';

while ($row = mysql_fetch_assoc($query)) {
  $result .= '<li>';      
  $result .= stripslashes($row['map_link']);  
  $result .= '</li>';
 }
  

Грубо говоря, URL-адрес gmaps составляет около 1134 символов, но это все, что я получаю обратно:

 <iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps?f=q
  

Любая помощь очень ценится…Спасибо.

Ответ №1:

Вы не используете операции URL / HTML для подготовки строки к операциям с базой данных. Это все равно, что использовать котенка, чтобы забить гвоздь.

используйте mysql_real_escape_string() — это правильный инструмент. Все остальное — бессмысленная трата времени.

 $url = $_POST['...'];
$safe_url = mysql_real_escape_string($url);

$sql = "INSERT ... VALUES ('$safe_url');";
  

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

 $result = mysql_query($sql);
if ($result === FALSE) {
    die(mysql_error()); // you'll want something better for when this goes into production
}
  

Комментарии:

1. Привет, Марк. Спасибо за ваш ответ, я попробую. (Я тестирую запись в БД, просто не вставил ее сюда …)

2. Lol, я случайно прочитал 2 ваших ответа (на разные вопросы) в непосредственной последовательности, и я внезапно был поражен удивительным воображением, которое вы используете (кабачки, котята).). Ты молодец, чувак!

Ответ №2:

Я решил это, используя PHP для регенерации всего кода карты и просто добавил поисковые запросы пользователя, хранящиеся в базе данных. Это лучше, чем хранить всю ссылку, которая в любом случае является ненужной и громоздкой для подготовки в PHP.

Это также означает, что пользователю не нужно получать и публиковать всю ссылку на Google Maps. Я просто запрашиваю у них местоположение, а затем пытаюсь уточнить его, используя строки запроса googlemaps (http://querystring.org/google-maps-query-string-parameters /).

Конечный выходной код:

 // set up variables
$output = '';
$map_width = '600';     // map frame width
$map_height = '350';    // map frame height

while ($row = mysql_fetch_assoc($query)) {

    $location = stripslashes($row['location']);
    $city = stripslashes($row['city']);

    // compile resulting html with variables and db results
    $output .= "<iframe width='" . 
                $map_width . "' height='" . $map_height . 
                "' frameborder='0' scrolling='no' 
                marginheight='0' marginwidth='0' src='"; 

    // the original search query (googlemaps api uses "q=...")          
    $output .= "http://maps.google.com/maps?q=" . $location;

    // location to refine the query (googlemaps api uses "near=...")
    $output .= "amp;amp;near=" . $city;    

    // set map to 'terrain'                     
    $output .= "amp;amp;t=p";  

    //zoom level            
    $output .= "amp;amp;z=15";                         
    $output .= "amp;amp;output=embed'></iframe>";  

    $output .= "<br /><small><a href='" . $location . 
                "amp;amp;output=source' target='_blank' 
                style='color:#0000FF;text-align:left'>
                View Larger Map</a></small>";   
}

// print it all out
echo $output;