2014-01-14 4 views
0

Я программировал годами с различными языками программирования. У меня также есть опыт работы с языками разметки и написания сценариев. Я новичок в PHP. Я пытаюсь исправить сайт своего отца для него, и я многому учусь, когда ухожу. Я многое исправил, но в настоящее время я застрял. Обновление на хосте PHP, которое мой папа использует с 5.1 до 5.4, нарушило веб-сайт. Я заметил, что одно из изменений заключается в том, что переменные должны быть определены сейчас. База данных обновляется, чтобы больше не ссылаться на изображение. Вот PHP:Обновление базы данных в PHP

if ($act=="update"){ 
    $id = $_POST['id']; 
    $email = $_POST['email']; 
    $aim = $_POST['aim']; 
    $icq = $_POST['icq']; 
    $yahoo = $_POST['yahoo']; 
    $homepage = $_POST['homepage']; 
    $myip = $_POST['myip']; 

    if (!$myip) 
     $myip = $ip; 

    $email2 = $_POST['email2']; 
    $password = $_POST['password']; 
    $title = $_POST['title']; 
    $download = $_POST['download']; 
    $approved = $_POST['approved']; 
    $allowdelete = $_POST['allowdelete']; 
    $author = $_POST['author']; 
    $facebook = $_POST['facebook']; 

    if (isset($_POST['piclink'])) 
     $piclink = $_POST['piclink']; 

    $domain = $_POST['domain']; 
    $option3 = $_POST['option3']; 
    $secret = $_POST['secret']; 

    if (isset($piclink)){ 
     $picfile = ""; 
     $download = "0"; 
     $domain = parse_url_domain($piclink); 
    } 

    $myip = $_REQUEST['ip']; 

    if (!$myip) 
     $myip = $ip; 

    $email=addslashes($email); 
    $aim=addslashes($aim); 
    $icq=addslashes($icq); 
    $yahoo=addslashes($yahoo); 
    $homepage=addslashes($homepage); 
    $picfile=addslashes($picfile); 

    if (isset($dt)) 
     $dt=addslashes($dt); 

    $myip=addslashes($myip); 
    $email2=addslashes($email2); 
    $password=addslashes($password); 
    $title=addslashes($title); 
    $download=addslashes($download); 
    $approved=addslashes($approved); 
    $allowdelete=addslashes($allowdelete); 
    $author=addslashes($author); 
    $facebook=addslashes($facebook); 
    $piclink=addslashes($piclink); 
    $domain=addslashes($domain); 
    $option3=addslashes($option3); 
    $secret=addslashes($secret); 

    //die("IP =".$myip); 

    $q="update $table set  email='$email',aim='$aim',icq='$icq',yahoo='$yahoo',homepage='$homepage',picfile='$picfile' ,ip='$myip',email2='$email2',password='$password',title='$title',download='$download',appro ved='$approved',allowdelete='$allowdelete',author='$author',facebook='$facebook',piclink='$ piclink',domain='$domain',option3='$option3',secret='$secret' where id='$id'"; 
    $result=mysql_query($q); 
    //dt='$dt' was removed from update as it blanked out date 

} 

if ($piclink) { 
    $url1 = $piclink; 
} else { 
    $url1 = "http://plankingaround.com/pics/"; 
    $url1 .= $picfile; 
} 

Все остальное обновляется за исключением столбцов piclink и/или picfile в базе данных.

Любая помощь была бы принята с благодарностью!

+0

поиск файлов для функции 'move_uploaded_file' также вы должны найти супер глобальную переменную' $ _FILES'. Это будет часть кода, который обрабатывает загрузку файлов. Как только вы обнаружите, что можете опубликовать эту часть своего кода. Этот бит кода выглядит так, как будто он обновляет информацию пользователя – Jacob

+0

Извините, я скопировал часть сообщения из предыдущей проблемы и скопировал слишком много. Я исправил, какова моя фактическая проблема. –

ответ

0

Считается крайне плохой практикой использования mysql. Вы должны обновить mysql -> mysqli ... это поможет вам предотвратить SQL Injection и решить некоторые из ваших проблем. Поскольку mysql скоро будет устаревать с новыми обновлениями PHP.

Вот пример того, как сделать это:

$query = "UPDATE $table 
     SET 
      email=?, 
      aim=?, 
      icq=?, 
      yahoo=?, 
      homepage=?, 
      picfile=?, 
      ip=?, 
      email2=?, 
      password=?, 
      title=?, 
      download=?, 
      approved=?, 
      allowdelete=?, 
      author=?, 
      facebook=?, 
      piclink=?, 
      domain=?, 
      option3=?, 
      secret=? 
     WHERE id=?"; 

if($stmt = $mysqli->prepare($query)){ 
    $stmt->bind_param('sssssssssssssssssssi', $email, $aim, $icq, $yahoo, $homepage, $picfile, $myip, $email2, $password, $title, $download, $approved, $allowdelete, $author, $facebook, $pic link, $domain, $option3, $secret, $id); 
    $stmt->execute(); 
}else die("Failed to prepare stmt"); 
+0

Что такое функция bind_param и что такое sssssssssssssssssssi? –

+0

@AlexBridges сообщает 'mysqli', что такое тип переменной, поэтому его не нужно экранировать. s = string, d = double, i = integer и b = blob. Каждая буква имеет следующую переменную (порядок имеет значение). Ознакомьтесь со следующим API: http://us2.php.net/manual/en/mysqli-stmt.bind-param.php –

0

Это не то, о чем вы просили, но сайт, на котором вы работаете, имеет серьезную проблему безопасности - SQL Injection.

http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real-escape-string

После части этого обновления SQL провалится:

appro ved='$approved', 

Вы можете эхо ошибки с mysql_error(), сразу после mysql_query ($ д);

+0

Необходимо исправить это форматирование matey –

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