2009-02-11 93 views
0

我想寫一些使用PHP的數據庫,但如果我嘗試使用mysql_real_escape_string()我沒有得到任何錯誤,但沒有得到保存到數據庫,我不知道爲什麼= /特別因爲我做了在另一個PHP文件相同的,它的工作完美...爲什麼不會mysql_real_escape_string()工作?

<?php 
if(isset($_POST['reporte'])) 
    $falla = $_POST['reporte']; 
else  
    $falla = ""; 

if(!isset($falla)){ 
    echo '<font color="red">Intentó enviar una forma vacía. Por favor intente de nuevo.</font>'; 
}else{ 
$fecha = mysql_real_escape_string(stripslashes($_POST['fecha'])); 
$usuario = mysql_real_escape_string(stripslashes($_POST['usuario'])); 

connection... 

$sql = "INSERT INTO $tbl_name(usuario, comentario, fecha, estado) VALUES('$usuario','$falla','$fecha', '0')" or die('mysql_error()'); 

現在我不檢查,如果「出生日期」或「usuario」是空的,因爲它們在形式通過一個隱藏字段發送。


編輯

我也還是有沒有錯誤,並沒有進入該數據庫交換機= /我在看的文件,但我很奇怪,因爲我以前做過完全相同的方式和它的工作...哈哈...


編輯2

ÿ ES我有一個

mysql_query($sql) or die('Error SQL !'.$sql.'<br>'.mysql_error()); 

是的,我已經設置了$ tbl_name與連接一起:

$host="localhost"; 
$username="user"; 
$password="pass"; 
$db_name="cosa"; 
$tbl_name="reportes"; 

,我已經做了數據庫監視器中的檢查並打印它...它返回確定...但是,「消毒」$ falla是什麼意思?我承認注射,但我本身對PHP很新。


編輯3

我用死只是爲了測試,但沒有錯誤顯示它的功能順利,如果我使用「mysql_real_escape_string()」


只是將不插入一件事

編輯4

這是我當前的代碼:

<?php 
if(isset($_POST['reporte'])) 
    $falla = $_POST['reporte']; 
else  
    $falla = ""; 

if(!isset($falla)){ 
    echo '<font color="red">Intentó enviar una forma vacía. Por favor intente de nuevo.</font>'; 
}else{ 

    $host="localhost"; // Host name 
    $username="user"; // Mysql username 
    $password="pass"; // Mysql password 
    $db_name="cosa"; // Database name 
    $tbl_name="reportes"; // Table name 

    // To protect MySQL injection 
    $fecha = mysql_real_escape_string(stripslashes($_POST['fecha'])); 
    $usuario = mysql_real_escape_string(stripslashes($_POST['usuario'])); 
    $falla = mysql_real_escape_string(stripslashes($falla)); 

    $db = mysql_connect($host, $username, $password) or die('Cannot Connect '.mysql_error()); 
    mysql_select_db($db_name) or die('Cannot select DB '.mysql_error()); 

    $sql = "INSERT INTO $tbl_name(usuario, comentario, fecha, estado) VALUES('$usuario','$falla','$fecha', '0')" or die('mysql_error()'); 

    mysql_query($sql) or die('Error SQL !'.$sql.'<br>'.mysql_error()); 

    header("location:../../user/usuario.php"); 
    mysql_close();  
} 
?> 

這是完整的一個,並根據建議,我已經得到在這裏......仍然沒有得到任何東西到DB也發生了變化......

+0

你可以編輯你的原始代碼示例以準確顯示你現在擁有的東西嗎? – nickohrn 2009-02-11 19:13:48

+0

「sanitize」我的意思是「轉義字符是數據庫特有的」 - 就像你在$ fecha = mysql_real_escape_string(stripslashes($ _ POST ['fecha'])) – Piskvor 2009-02-11 19:15:19

回答

15

我想你可能需要打開mysql連接之前使用mysql_real_escape_string。請參閱文檔。

編輯

試試這個,但什麼是你的表中的數據類型?所有的字段(usuario,comentario,fecha,estado)都是字符串嗎?這是你的插入聲明所說的,我相信。所有的

<?php 
if(isset($_POST[ 'reporte' ])) { 
    $falla = $_POST[ 'reporte' ]; 
} else { 
    $falla = ""; 
} 

if(!isset($falla)) { 
    echo '<font color="red">Intentó enviar una forma vacía. Por favor intente de nuevo.</font>'; 
} else { 

    $host = "localhost"; // Host name 
    $username = "user"; // Mysql username 
    $password = "pass"; // Mysql password 
    $db_name = "cosa"; // Database name 
    $tbl_name = "reportes"; // Table name 


    $db = mysql_connect($host, $username, $password) or die('Cannot connect ' . mysql_errno()); 
    mysql_select_db($db_name) or die('Cannot select DB ' . mysql_error()); 

    $fecha = mysql_real_escape_string(stripslashes($_POST[ 'fecha' ])); 
    $usuario = mysql_real_escape_string(stripslashes($_POST[ 'usuario' ])); 
    $falla = mysql_real_escape_string(stripslashes($falla)); 

    $sql = "INSERT INTO $tbl_name(usuario, comentario, fecha, estado) VALUES('$usuario','$falla','$fecha', '0')" or die('mysql_error()'); 

    mysql_query($sql) or die('Error SQL !' . $sql . '<br>' . mysql_error()); 

    // You need a URL here, not a relative path 
    header("Location:../../user/usuario.php"); 
    mysql_close(); 
} 
?> 
0

首先,我假設你有以下mysql_query($sql):你的榜樣永遠0​​的最後一行,因爲你只是創建一個字符串那裏。

二,你有沒有設置$tbl_name?第三,嘗試打印出$sql,檢查它,如果看起來正確,請在數據庫監視器或任何使用的GUI工具中嘗試一下;看看數據是否真的在數據庫中結束(嘗試INSERT,然後選擇剛剛插入的數據)。

順便說一句,你真的應該消毒$falla就像你已經消毒$fecha$usuario - mysql_real_escape_string(stripslashes($falla));或類似的東西。否則,$_POST['reporte'](和$falla)將成爲SQL injection的一個向量。

1

檢查mysql擴展mysql_error

的一般使用模式的輸出是:

mysql_query($sql) or trigger_error(mysql_error()); 
1

你不需要的錯誤在$ SQL VAR結束檢查:

$sql = "INSERT INTO $tbl_name(usuario, comentario, fecha, estado) VALUES('$usuario','$falla','$fecha', '0')" or die('mysql_error()'); 

這是一個聲明,因此沒有任何事情可以或在失敗中死亡。嘗試將其更改爲以下:

$sql = "INSERT INTO $tbl_name(usuario, comentario, fecha, estado) VALUES('$usuario','$falla','$fecha', '0');" 

不知道它一定是你錯誤的原因,但它不是必需的沒有少。

另外我運行你的代碼減去標題重定向,正如nickohrn所提到的,你需要在使用mysql_real_escape_string之前連接到mysql服務器。代碼工作正常,本地記錄到數據庫中。

嘗試在沒有頭()調用的情況下運行代碼。

1

請以其他方式嘗試。使用PEAR:DB或類似的框架來使用準備好的語句而不是這個轉義的hackery。調用諸如mysql_real_escape_string和stripslashes之類的函數是引入奇怪的錯誤和SQL注入問題的最佳方式,最終會導致數據中出現太多或太少的斜槓。

0

因爲它不如MySQLi和PDO的prepare()方法。