PHP: положить URL-адрес карты Google в базе данных - PullRequest
0 голосов
/ 24 октября 2011

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

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

Запись базы данных в порядке, она входит, но не все. Не уверен, где это рубят. Мой столбец базы данных 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

Любая помощь высоко ценится ... спасибо.

Ответы [ 2 ]

2 голосов
/ 24 октября 2011

Вы не используете операции 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 голос
/ 29 октября 2011

Я решил это, используя 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;near=" . $city;    

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

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

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

// print it all out
echo $output;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...