2016-02-01 5 views
1

Кажется, что я не могу найти проблему с этим кодом. Но я знаю, что есть один. Для начала .. Он не добавляет записи в мою базу данных, второй я не могу получить доступ старые записи ..Проблемы с связями PHP Link

<?php 
require_once '../config.php'; 
$conn = new mysqli($server, $username, $password, $database); 
if ($conn->connect_error) { 
    die("<p style=color:white>Could not connect to database: " . $conn->connect_error . "</p>"); 
} 
$title = $_GET['x']; 
if (isset($title)) { 
$result = $conn->prepare("SELECT (id, url, title) FROM links WHERE title=$title"); 
$result->execute; 
$goto = $result->get_result()->fetch_array(); 
$g = $goto[1]; 
header("Location: $g"); 
} 
    function GenerateString($string_length = 3) { 
     $permissible_characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
     $char_length = strlen($permissible_characters); 
     $random = ''; 
     for ($i = 0; $i < $string_length; $i++) { 
      $random .= $permissible_characters[rand(0, $char_length - 1)]; 
     } 
     return $random; 
} 
$url = $_POST['url']; 
$code = GenerateString(); 
if (isset($_POST['submit'])) { 
if (substr($url, 0, 7) == "http://") { 
    $url = $url; 
} 
elseif (substr($url, 0, 8) == "https://") { 
    $url = $url; 
} else { 
    $url = "http://".$url; 
} 
$result = $conn->prepare("INSERT INTO links VALUES('',$url,$code)"); 
} 

?> 

Пожалуйста, исправьте все, что вы можете видеть неправильно. Я новичок в PHP! Спасибо заранее! -Zack

+0

если ваш идентификатор автоинкремент затем изменить запрос: «INSERT INTO = (URL, название) связывает VALUES ('$ URL', '$ code ') " – Monty

+0

Это Typo и разрешено в манере, которая вряд ли принесет пользу будущим читателям. Кроме того, вы не активировали отчет об ошибках PHP. – Drew

ответ

1

Наиболее очевидные ошибки я вижу, являются: В вашей части чтения, ваш $result->execute; отсутствует круглые скобки, и поэтому никогда не вызывается (без скобок, это просто заявление, а не вызов функции, которая ничего не делает Это дело). Поэтому измените это на $result->execute();.

В письменной части вы готовите заявление, но не выполняете его. Для выполнения этого действия необходимо выполнить подготовленное утверждение. Добавьте $result->execute(); после вашего $result = $conn->prepare(…);, чтобы исправить это.

В качестве побочного примечания: вы должны использовать подготовленные операторы как предназначенные, с привязкой к переменной (bind_param и т. Д.), Чтобы предотвратить атаки SQL-инъекций!

Смотрите следующий SO вопрос/ответ для получения дополнительной информации о том, что: How can I prevent SQL injection in PHP?

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