php MySQL yoluyla tablosunun updation

3 Cevap php

Bu bir tabloyu güncelleştirmek için benim kodudur. Benim sorunum taze bir rekor gönderdikten sonra ben ilk defa (boş gösteriyor) güncellemek mümkün değilim, ama ikinci kez çalışıyor olmasıdır.

Bir şey daha: Ben include ifadesini kaldırın o zaman herhangi bir phpcode orada hiçbir submessage.php üzerinde iyi çalışıyor. [annakata: I have no idea what this means]

$pid = $_GET['id'];
$title = $_POST['title'];
$summary = $_POST['summary'];
$content = $_POST['content'];
$catid = $_POST['cid'];
$author = $_POST['author'];
$keyword = $_POST['keyword'];
$result1= mysql_query("update listing set catid='$catid',title='$title',
summary='$summary',content='$content', author='$author', keyword='$keyword' where pid='$pid'",$db);
    include("submessage.php");

3 Cevap

Kod parçası ile yanlış şeyler numaralandırmak zor. Ancak, en azından, sen establish a connection to the database bunu sorgulayabilirsiniz gerekir önce.

Neden sadece yerine onu inlining daha submessage.php yönlendirmek değil? Yönlendirme Ayrıca, kullanıcı sayfayı yenilenir zaman db işlemleri çoğaltmak engeller. Sadece ile include deyimi değiştirin:

header('Location: submessage.php?id=' . $pid);
die();

Ayrıca, uygulama dağıtmadan önce: DO NOT EVER PUT USER INPUT DIRECTLY IN SQL QUERY. Yerine bağlı parametreleri kullanılmalıdır. Aksi takdirde, sadece de kamuya veritabanı yönetici şifrenizi tanıtımı olabilir. http://ie.php.net/pdo de PDO ve Taslaklar hakkında daha fazla oku

İşte ben bunu yapacağını nasıl:

$pdo = new PDO(....); // some configuration parameters needed
$sql = "
    UPDATE listing SET
        catid=:catid, title=:title, summary=:summary,
        content=:content, author=:author, keyword=:keyword
    WHERE pid=:pid
";
$stmt = $pdo->prepare($sql);
$stmt->bindValue('catid', $_POST['catid']);
$stmt->bindValue('title', $_POST['title']);
$stmt->bindValue('summary', $_POST['summary']);
$stmt->bindValue('content', $_POST['content']);
$stmt->bindValue('author', $_POST['author']);
$stmt->bindValue('keyword', $_POST['keyword']);
$stmt->bindValue('pid', $pid = $_GET['id']);
$stmt->execute();

header('Location: submessage.php?id=' . $pid);
die();

Ya da aslında, ben daha böyle görünmesi için bazı ORM çözüm kullanabilirsiniz:

$listing = Listing::getById($pid = $_GET['id']);
$listing->populate($_POST);
$listing->save();

header('Location: submessage.php?id=' . $pid);
die();

SQL enjeksiyon zamanki uyarıları dışında - çok büyük olasılıkla kod verildi ve (sans doğrulama her türlü) gelen sorgu parametrelerini elde nereye - o senin sorunun o çalışıyor, özellikle sorgu ile ilgisi oldukça mümkündür sonraki denemelerde. Düşük $ _GET ['id'] komut dosyası aramak ayarlamak İlk kez emin misin?

Sadece tek bir sorguda bunları birleştirmek - Sadece güncellemeniz gerekir her alan için birkaç güncelleştirme sorguları gerçekleştirmek için hiçbir neden kesinlikle yoktur, unutmayın.