IwanQ
@IwanQ
Плохие времена часто дают прекрасные возможности

В чём проблема в коде?

Здравствуйте. Тестирую простенький сокращатель URL.

<?php
	$h = "QqWwEeRrTtYyUuIiOoPpAaSsDdFfGgHhJjKkLlZzXxCcVvBbNnMm1234567890"; //Выбираем символы, из которых будет состоять наш рандом
	$rand = substr(str_shuffle($h), 0, 5); //создаём ранд. Цифра 5 обозначает длину ранда
	$site = "http://test.com/"; //Адрес сайта. 
	$url = $_POST['url'];

	if ($_POST['submit']) {
	echo "<div class='a'>
	<a href='$site$rand'>$site$rand
	</a>
	</div>"; //выводим пользователю ссылку, в виде ссылки
	$f = fopen("a/$rand.php", "w"); //Файл с именем ранда.
	fwrite($f, "<?php header('Location: $url') ?>"); //И записываем в код редиректа, с ссылкой которую ввёл пользователь
	fclose($f); //Закрываем файл

	$fh = fopen(".htaccess", "a"); //Открываем файл .htaccess с дозаписью на последний байт

	fwrite($fh, "

	RewriteRule ^$rand$ /a/$rand.php"); //Записываем ссылку на файл в каталоге a и её сокращённый вариант, который был дан пользователю. 

	fclose($fh); //Закрываем файл
	}
		$connect->query("INSERT INTO `url` (`url`) VALUES ('$site$rand')");
	?>


Как видите строчка
$connect->query("INSERT INTO `url` (`url`) VALUES ('$site$rand')");
отвечает за добавление url в БД.

БД:

-> id

->url

Проблема в том, что обновляя страницу появляются какие-то сокращённые url в бд сами по себе, а если ввести ссылку и сократить её она не добавиться в БД.

Уже пол дня мучаюсь, подскажите в чём проблема?
  • Вопрос задан
  • 140 просмотров
Решения вопроса 2
irishmann
@irishmann
Научись пользоваться дебаггером
Так Вы внимательнее посмотрите на свой код. Первые 4 строки и последняя срабатывают вне зависимости от $_POST['submit']. Другими словами, при обновлении страницы, вы формируете сокращенную ссылку для пустого $url, потом проверяете есть ли $_POST['submit'], если есть выводите ссылку, записываете в файлы, если нет то ничего не выводите и не пишите ни в какие файлы, потом пишите ссылку для пустого $url в бд. Вас это не смущает? Не надо быть профи, чтобы понять какая это глупая ошибка.

Примерно так должно быть у Вас, чтоб не было ложных срабатываний
↓ ↓ ↓ КОД ↓ ↓ ↓
<?php
    if ($_POST['submit']) {
        $h = "QqWwEeRrTtYyUuIiOoPpAaSsDdFfGgHhJjKkLlZzXxCcVvBbNnMm1234567890"; //Выбираем символы, из которых будет состоять наш рандом
        $rand = substr(str_shuffle($h), 0, 5); //создаём ранд. Цифра 5 обозначает длину ранда
        $site = "http://test.com/"; //Адрес сайта. 
        $url = $_POST['url'];
        echo "<div class='a'>
        <a href='".$site.$rand."'>".$site.$rand."
        </a>
        </div>"; //выводим пользователю ссылку, в виде ссылки
        $f = fopen("a/$rand.php", "w"); //Файл с именем ранда.
        fwrite($f, "<?php header('Location: $url') ?>"); //И записываем в код редиректа, с ссылкой которую ввёл пользователь
        fclose($f); //Закрываем файл
        $fh = fopen(".htaccess", "a"); //Открываем файл .htaccess с дозаписью на последний байт
        fwrite($fh, "
        RewriteRule ^$rand$ /a/$rand.php"); //Записываем ссылку на файл в каталоге a и её сокращённый вариант, который был дан пользователю. 
        fclose($fh); //Закрываем файл
        $connect->query("INSERT INTO `url` (`url`) VALUES ('".$site.$rand."')");
    }
Ответ написан
daemonhk
@daemonhk
ПсиХоПат
Для начала ваше

$connect->query

поместите в условие

if ($_POST['submit']) {}

Банальная невнимательность)) А затем дебажьте код в условии
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
anton_reut
@anton_reut
Начинающий веб-разработчик
<a href='$site$rand'>$site$rand

По-моему так лепить переменные друг к другу нельзя, где конкатенация через точки?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы