2013-06-11 41 views
38

Web siteme bilgi eklemek için bir formu işlemek için aşağıdaki komut dosyasını kullanıyorum. Sorun şu ki, veritabanına hiçbir şey gönderilmediğinde formu gönderdiğimde ve hata yok. Sorguma hata raporlama nasıl ekleyebilirim? Sorgunuzun sonundaMySQLi sorgumun hataları nasıl görüntülenir?

<?php 
if (isset($_POST['itemdescription'])) {$itemdescription = $_POST['itemdescription'];}else {$itemdescription = '';} 
if (isset($_POST['itemnumber'])) {$itemnumber = $_POST['itemnumber'];}else {$itemnumber = '';} 
if (isset($_POST['sellerid'])) {$sellerid = $_POST['sellerid'];}else {$sellerid = '';} 
if (isset($_POST['purchasedate'])) {$purchasedatepre = $_POST['purchasedate'];$date = DateTime::createFromFormat("D F d, Y", $purchasedatepre);$purchasedate = date('Y-m-d',strtotime($purchasedatepre));}else {$purchasedatepre = ''; $purchasedate = '';} 
if (isset($_POST['otherinfo'])) {$otherinfo = $_POST['otherinfo'];}else {$otherinfo = '';} 
if (isset($_POST['numberofitems'])) {$numberofitems = $_POST['numberofitems'];}else {$numberofitems = '';} 
if (isset($_POST['numberofitemsused'])) {$numberofitemsused = $_POST['numberofitemsused'];}else {$numberofitemsused = '';} 
if (isset($_POST['isitdelivered'])) {$isitdelivered = $_POST['isitdelivered'];}else {$isitdelivered = '';} 
if (isset($_POST['price'])) {$price = $_POST['price'];}else {$price = '';} 

$itemdescription = str_replace("'", "", "$itemdescription"); 
$itemnumber = str_replace("'", "", "$itemnumber"); 
$sellerid = str_replace("'", "", "$sellerid"); 
$otherinfo = str_replace("'", "", "$otherinfo"); 

include("connectmysqli.php"); 

mysqli_query($db,"INSERT INTO stockdetails (`itemdescription`,`itemnumber`,`sellerid`,`purchasedate`,`otherinfo`,`numberofitems`,`isitdelivered`,`price`) VALUES ('$itemdescription','$itemnumber','$sellerid','$purchasedate','$otherinfo','$numberofitems','$numberofitemsused','$isitdelivered','$price')"); 

// header('Location: stockmanager.php?&key='.$key); 
?> 

cevap

57

Sadece basit eklemek or die(mysqli_error($db)); , bu mysqli hatayı yazdırır.

mysqli_query($db,"INSERT INTO stockdetails (`itemdescription`,`itemnumber`,`sellerid`,`purchasedate`,`otherinfo`,`numberofitems`,`isitdelivered`,`price`) VALUES ('$itemdescription','$itemnumber','$sellerid','$purchasedate','$otherinfo','$numberofitems','$numberofitemsused','$isitdelivered','$price')") or die(mysqli_error($db)); 

Bir yan not olarak burada How can I prevent SQL injection in PHP? kontrol edip, mysql injection riski vardır söyleyebilirim. Herhangi bir riski önlemek için gerçekten hazırlanmış ifadeler kullanmalısınız.

+0

Teşekkürler, bu onun ölümü olarak çalışıyor gibi görünüyor ve ben yorum işaretleri kaldırmak, ancak aynı zamanda herhangi bir hata görüntülemiyorsa yönlendirme çalışmaz gibi duruyor. –

+1

Görebildiğim kadarıyla, php yöneticim için kullanışlı olan giriş detaylarına sahip olduğumda sabahları iki kez kontrol edeceğim. –

+0

@Iain tamam kontrol edin, bağlantıda bir sorun var gibi görünüyor – Fabio

5

Geliştirme amacıyla, mysqli_query() satırınızdaki noktalı virgülden önce or die(mysqli_error()) öğesini ekleyebilirsiniz.

Üretime geçmeden önce bunu kaldırdığınızdan emin olun, bu nedenle veritabanınız hakkında halka açık bilgi vermezsiniz.

20
mysqli_error() 

olduğu gibi:

$sql = "Your SQL statement here"; 
$result = mysqli_query($sql) or trigger_error("Query Failed! SQL: $sql - Error: ".mysqli_error(), E_USER_ERROR); 

Tetik hata geliştirme VE üretimi için kullanabilirsiniz çünkü ölmek daha iyidir, kalıcı bir çözüm.

+1

+1, ancak hem geliştirme hem de üretim için nasıl kullanılacağını ayrıntılı olarak açıklayacağım (üretimde hatanın nasıl gösterilmeyeceği). – Travesty3

+0

@ Travesty3 sadece kullan. Bu kod, hem geliştirme hem de üretim için doğrudur. –

+1

Hataların ekrana yazdırılmasına izin vermemeniz yeterli değildir. – Jessica