2016-06-07 2 views
0

У меня есть форма редактирования для обновления песни, но вместо этого она перенаправляется на show_profile.php без обновления записи в базе данных.PHP и MySQLi: функция обновления не работает

Мои другие функции, такие как show, delete работают правильно.

мой edit_song.php:

$userID = ProfileDB::getInstance()->get_user_id_by_email($_SESSION['email']); 
$songID = $_GET['songID']; 
$song = mysqli_fetch_array(ProfileDB::getInstance()->get_song_by_song_id($songID)); 

if ($_SERVER['REQUEST_METHOD'] == "POST"){ 
    $artist = filter_var($_POST['artist'], FILTER_SANITIZE_STRING); 
    $songTitle = filter_var($_POST['song'], FILTER_SANITIZE_STRING); 
    if ($artistIsValid && $songIsValid) { 
    ProfileDB::getInstance()->update_song($_POST['songID'], $_POST['artist'], $_POST['song']); 
    header('Location: show_profile.php'); 
    exit; 
    } 
} 

<form method="POST" id="editSong"> 
    <input type="hidden" name="songID" value="<?php echo $songID; ?>" /> 
    <label>Artist:</label> 
    <input type="text" name="artist" value="<?php echo $currentSong['artist']; ?>" /><br/> 
    <label>Song Title</label> 
    <input type="text" name="song" value="<?php echo $currentSong['song']; ?>" /><br/> 
    <br /> 
    <input type="submit" value="Edit Song"/> 
</form> 

в моем классе ProfileDB:

public function update_song($songID, $artist, $song) { 
    $artist = $this->real_escape_string($artist); 
    $song = $this->real_escape_string($song); 
    $this->query("UPDATE song SET artist = '" . $artist . 
    "', song = '" . $song . "' WHERE id = '" . $songID . "'"); 
    } 

Что мне не хватает, и как это исправить? Я активировал error_reporting (E_ALL); на всех страницах, но он перенаправляет на show_profile.php без каких-либо ошибок или предупреждений.

+1

дамп некоторые отладки после того, как если заявление, и закомментируйте редирект, чтобы убедиться, что он делает то, что предназначено , 'Print_r ($ _ POST); exit; 'должен убедиться, что вы правильно добрались до этой функции. – FrankerZ

+0

** Попробуйте это ** '$ this-> mysqli_query ($ conn," UPDATE song SET artist = '". $ Artist. "', song = '". $ Song."' WHERE id = '" $ songID. "'"); ' –

+0

@FrankerZ: после того, как я вставил ваш код отладки, он печатает: Array ([songID] => 14 [artist] => Annie Lennox [song] => sdfgsfdgtest), который выглядит хорошо. – StandardNerd

ответ

0

Благодаря @FrankerZ, я мог бы исправить цитаты вне songID-Value в моем SQL заявление:

public function update_song($songID, $artist, $song) { 
    $artist = $this->real_escape_string($artist); 
    $song = $this->real_escape_string($song); 
    $this->query("UPDATE isp_songs SET artist = '" . $artist . "', song = '" . $song . "' WHERE id = " . $songID); 
    } 
+1

Не имеет значения, помещаете ли вы '$ songID' в кавычки или нет. Я предполагаю, что имя таблицы, которое у вас там сейчас, правильно. – FrankerZ

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