2013-08-30 97 views
0

我對PHP相當陌生,我試圖將用戶的輸入保存到mysql數據庫中。我在網上跟着一篇關於如何做的教程,但每次輸入用戶的信息時,網站都會告訴我它失敗了。我唯一能想到的是主機名(我從phpadmin複製並粘貼)。請告訴我是否有錯誤。將用戶的輸入存儲到數據庫中

contact.html

<section id="mid_section"> 
       <div id="boxes"> 
        <h1> 
         Leave your information here for a quick reponse: 
        </h1> 
        <br/> 
        <form id="myform" action="userinfo.php" method="post"> 
         Name:<input type="text" value="name"> 
         Email:<input type="email" value="email"> 
         Phone:<input type= "tel" value="phone(opt)"> 
         <button id="sub">Submit</button> 
        </form> 

db.php中

<?php 
    $conn = mysql_connect('custsql.eigbox.net','username','password'); 
    $db= mysql_select_db('visitors'); 
?> 

userinfo.php

<?php 
    include_once('db.php'); 

    $name =$_POST['name']; 
    $email =$_POST['email']; 
    $phone =$_POST['phone']; 

    if(mysql_query("INSERT INTO users (name,email,phone) VALUES ('$name','$email','$phone')")) 
    echo"successfully inserted"; 
    else 
    echo "failed"; 
?> 

myscript.js

$("#sub").click(function(){ 

    $.post($("#myform").attr("action"), $("#myform:input").serializeArray(), function(info){$("#result").html(info);}); 
    }); 

$("#myform").submit(function(){ 
    return false; 
    }); 
+0

你的代碼是非常容易破解。學習如何清理變量並停止使用'mysql_ *',因爲它已被棄用。使用'mysqli_ *'或'PDO'。是否有可以陳述的特定錯誤信息?我們不能奇蹟般地發現錯誤,除非它是明顯的。 –

+0

你有你自己的mysql數據庫嗎? – bfavaretto

+0

是的,我有我自己的SQL數據庫@bfavaretto – jorgeAChacon

回答

4

因爲您可能是PHP的新手,一方面,遵守教程, 是非常好的,但是選擇正確的源代碼可能是一個常見的災難性問題。

當您使用的功能如mysql_select_dbmysql_query它basiaclly意味着您正在使用不推薦的mysql樣式。

如果你去官方php文檔和搜索mysql方法,它會告訴你它的棄用。

雖然這裏的問題不是你與數據庫交互的方式,但你的編碼風格仍然有效,許多人仍然這樣做。

我只是告訴你作爲一個新人,而不是mysql_函數,人們傾向於傾向於mysqli和/或PDO。把它們當作你未來的朋友。

你的問題呢,我相信一切都沒問題,除了你的mysql_query函數看起來很奇怪。 嘗試,而不是你的查詢語句下面的代碼

if (mysql_query("INSERT INTO `users` (`name`, `email`, `phone`) VALUES ('".$name."','".$email."','".$phone."')")) 

或出於安全考慮,甚至更好

if (mysql_query("INSERT INTO `users` (`name`, `email`, `phone`) VALUES ('".mysql_real_escape_string($name)."','".mysql_real_escape_string($email)."','".mysql_real_escape_string($phone)."')")) 

如果不是的情況下,你仍然可以得到一個「失敗」的錯誤說法,您需要做一個很小的調試和這裏的人們將能夠幫助你

所以,你需要使用以下的,而不是你有什麼現在

if (mysql_query("INSERT INTO `users` (`name`, `email`, `phone`) VALUES ('".mysql_real_escape_string($name)."','".mysql_real_escape_string($email)."','".mysql_real_escape_string($phone)."')")) { 
    echo 'Success!' 
} else { 
    echo mysql_error(); 
    exit; 
} 

讓我們看看會發生什麼

+0

感謝您的安全建議。我更新了所有內容,現在我收到了以下消息:無法通過套接字'/var/run/mysqld/mysqld.sock'連接到本地MySQL服務器(2)..我嘗試使用localhost作爲主機以及custsql。 eigbox.net。 – jorgeAChacon

+0

好吧,這可能意味着'mysqld'必須被啓動才能創建和訪問'mysql.sock'。你需要檢查它是否在運行。我認爲你需要參考這個問題http://stackoverflow.com/questions/11990708/error-cant-connect-to-local-mysql-server-through-socket-var-run-mysqld-mysq或尋找類似的。祝你好運! – Davit

1

首先,在表單的每個屬性上使用名稱。因此,contact.html將是

<form id="myform" action="userinfo.php" method="post"> 
         Name:<input type="text" value="name" name='name'> 
         Email:<input type="email" value="email" name='email'> 
         Phone:<input type= "tel" value="phone(opt)" name='phone'> 
         <button id="sub">Submit</button> 
</form> 

使用mysqli_ *而不是mysql_ *,因爲它被棄用。您也可以使用PDO。更多信息mysqli_*

在將數據插入數據庫之前過濾數據。所以,用戶信息。PHP將看起來像

include_once('db.php'); 

$name = mysqli_real_escape_string($db, $_POST['name']); 
$email = mysqli_real_escape_string($db,$_POST['email']); 
$phone = mysqli_real_escape_string($db,$_POST['phone']); 

if (mysql_query("INSERT INTO `users` (`name`, `email`, `phone`) VALUES ('".$name."','".$email."','".$phone."')")) 
echo"successfully inserted"; 
else 
echo "failed"; 
+0

我做了像你解釋的一切,現在我有以下錯誤:「內部服務器錯誤 服務器遇到內部錯誤或配置錯誤,並且無法完成您的請求 請與服務器管理員聯繫,並通知他們發生錯誤的時間以及任何可能導致錯誤發生的事情。 有關此錯誤的更多信息可能在服務器錯誤日誌中可用。 – jorgeAChacon

+0

你可以分享代碼嗎? – Debashis

相關問題