PHP / MySQL veritabanı sorunu bir haber kaydı güncelleştirmek

6 Cevap php

Ben bir veritabanında kayıt güncelleme, onlar teslim düğmesine vurduğunda ben daha sonra bir kullanıcı bir formda bir haber kaydı düzenlemek izin kullanmaya çalışıyorum ve ben bu PHP kodu var. Sorun her şey çalışıyor ama kayıt aslında veritabanında güncellenmiş olmasıdır.

Birisi benim kod bakmak ve bir sorun meydana geldiği görebiliyordu?

<?php
    $title = "Edit News";
    include("../includes/header.php");
    include("../includes/database.php");
    $done = false;
    $expected = array('newstitle', 'newscontent', 'id');
    if ($_GET && !$_POST) { 
    	if (isset($_GET['id']) && is_numeric($_GET['id'])) { 
    		$id = $_GET['id']; 
    	} 
    	else { 
    		$id = NULL; 
    	} 
    	if ($id) { 
    		$sql = "SELECT * FROM news WHERE id = $id"; 
    		$result = mysql_query($sql) or die ("Error connecting to database..."); 
    		$row = mysql_fetch_assoc($result);
    	} 
    	// if form has been submitted, update record 
    	if (array_key_exists('update', $_POST)) { 
    		// prepare expected items for insertion into database 
    		foreach ($_POST as $key => $value) { 
    			if (in_array($key, $expected)) { 
    				${$key} = mysql_real_escape_string($value); 
    			} 
    		} 
    		// abandon the process if primary key invalid 
    		if (!is_numeric($id)) { 
    			die('Invalid request'); 
    		}
    		// prepare the SQL query 
    		$query = "UPDATE news SET title = '$title', content = '$content' WHERE id = $id"; 
    		// submit the query 
    		$done = mysql_query($query) or die("Error connecting to database..."); 
    	}
    }
    // redirect page if $id is invalid 
    if ($done) { 
    	header("Location: $ROOT/admin/listnews.php"); 
    	exit; 
    }
?>

6 Cevap

if ($_GET && !$_POST) {

...

if (array_key_exists('update', $_POST)) {

Bu güncelleme, kod asla patlar sağlamak değil mi?

Eğer kullanıcı gönderir aynı veri ile mysql cli o GÜNCELLEME çalıştırırsanız o güncelliyor?

Değilse karakterler kaçmak için kontrol edin.

$ Newstitle ve $ newscontent olmak aşağıda doğrultusunda içerik ve $ başlık $ mıyım?

// prepare the SQL query 
$query = "UPDATE news SET title = '$newstitle', content = '$newscontent' WHERE id = $id";

Bu formun HTML kaynağını görmeden oluyor tam olarak ne bilmek biraz zor, ama sanırım

if (array_key_exists('update', $_POST)) {

blok var ise beri idam asla, eğer dış dışına taşınması gerekiyor.

Eğer test çerçevesinde çeşit kullanmak istemiyorsanız bu kod hata ayıklama söz konusu olduğunda, print() senin arkadaşın. Yürütme ne olduğunu bulmaya çalışın ve ne değildir; hata nerede hızlı, bu nedenle yanlış varsayımlar hangi keşfedeceksiniz ve.

Eğer iç içe dışarı ifadesi bu atın:


 if (array_key_exists('update', $_POST)) { 
...
}

ve daha sonra bu koşullu ekleyin:



 if (count($_POST) && array_key_exists('update', $_POST)) { 
...
}

Senin sorunun ilgilenir eminim.

Sorun deneyin ve daraltmak şeyler çift:

  • Emin olun aslında orada alıyoruz yapmak için sadece if (array_key_exists('update', $_POST)) bloğu içinde bazı hata ayıklama metin echo. Lütfen if($_GET && !$_POST), yani $_POST bu değiştirmeniz gerekebilir "eğer" $_GET üst
  • sadece db aramadan önce $query dışarı yankılanan denediniz mi? Tamam komut satırı mysql arayüzü üzerinde çalışıyor mu?
  • Lütfen foreach ($_POST as $key => $value) benim okuma doğru ise, sen $expected gibi aynı adları taşıyan değişkenlerini ayarlama bitireceğiz - ($newstitle, $newscontent, $id) - ama içinde senin sql referans $content ve $title. Onlar bu hata nedeni, ancak bir göz dışarı tutmak için bir şey olabilir.