#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;