2013-04-23 16 views
5

我創建了這個函數來在點擊提交按鈕時更新數據庫。但它似乎並不奏效。該腳本旨在通過id使用用戶的登錄細節從數據庫中繪製用戶的值,並填充表單。該功能用於幫助用戶在表單文本字段中更改用戶的詳細信息時進行更新。如何創建一個php函數來更新提交數據庫?

請幫我調試它。

libraries.php 
function db(){ //handles database connection 

//connect to the database server or die and spit out connection error 
$conn = mysql_connect('localhost','root', '') or die("Cannot connect to the database server now". mysql_error()); 
//select database table or die and spit out database selection error 
mysql_select_db('newbishop',$conn) or die("Error in selecting database now ".mysql_errno()); 
    return $conn; 
} 


personalsettings.php 
<?php 
include_once('libraries.php'); // contains the database function 
session_checker(); 

db(); 
$categoryid = $_SESSION['id']; 
$select = "SELECT * FROM users WHERE categoryid ='$categoryid' LIMIT 1"; 
$row1 = dbprocess ($select); 
$rows = mysql_fetch_assoc($row1); 
$pname1 = $rows['pname']; 
$email1 = $rows['email']; 
$user1 = $rows['user']; 
$pass1 = $rows['pass']; 
$salt1 = $rows['salt']; 
$phone1 = $rows['phone']; 
$accesslevel = $rows['accesslevel']; 
$position = $rows['position']; 

function update(){ 
    db(); // database function 
    $pname = $_POST['pname']; 
    $categoryid = $_POST['categoryid']; 
    $email = $_POST['email']; 
    $phone = $_POST['phone']; 
    $user = $_POST['users']; 
    $pass = $_POST['pass']; 

    function createSalt(){ 
    $string = md5(uniqid(rand(), true)); 
    return substr($string, 0, 3); 
    }; 

    $salt = createSalt(); 
    $hash = hash('sha256', $salt . $pass); 

    $sql = "UPDATE users SET user=?,pass=?,salt=?,pname=?,email=?,phone=? WHERE categoryid=?"; 
    $q = $conn->prepare($sql); 
    $q->execute(array($user,$hash,$salt,$pname,$email,$phone,$categoryid)); 
} 

?> 

形式 編輯個人設置

<input name="users" type="text" id="users" class="users" autocomplete="off" value="<?php echo $user1; ?>" /> 

<input type="text" autocomplete="off" name="pass" id="pass" placeholder="Create password" class="passwd" value="<?php echo $pass; ?>"/> 
    <input type="hidden" name="salt" id="salt" value="<?php echo $salt1; ?>"/> 


    <input name="pname" type="text" id="lname" placeholder="Name of Group" class="input-block-level" value="<?php echo $pname1; ?>"/> 

    <input type="hidden" id="categoryselect" name="categoryselect"/> 
    <input name="categoryid" type="text" id="resultselect" readonly class="input-block-level" value="<?php echo $_SESSION['id']; ?>"/> 


    <input type="text" name="email" id="email" placeholder="Email Address" class="input-block-level" value="<?php echo $email1; ?>"/> 


    <input type="text" name="phone" id="phone" placeholder="Enter Phone Number" class="input-block-level" value="<?php echo $phone1; ?>"/> 


    <input type="text" name="accesslevel" id="accesslevel" class="input-block-level" value="<?php echo $accesslevel; ?>" readonly/> 



    <input type="text" name="position" id="position" class="input-block-level" value="<?php echo $position; ?>" readonly/> 


    <button type="submit" class="btn btn-small btn-primary" name="register" id="register" value="Register" onclick="update()">Submit</button> 
    </form> 
+3

哇;一個PHP的問題,不會犯任何通常的錯誤!但是,對於密碼散列,SHA *速度太快(它允許極其迅速的暴力破解)。相反,使用bcrypt或scrypt或PBKDFv2。 – SLaks 2013-04-23 16:44:39

+1

你自己做了什麼來調試它?檢查返回值?現在你的數據庫操作似乎正在取得成功。 – 2013-04-23 16:45:08

+1

調用此函數的部分在哪裏?另外,您確定要在更新函數中聲明createSalt函數嗎? – 2013-04-23 16:45:17

回答

4
db(); // database function 

看來,如果你已經忘記了將函數的返回值賦值給$conn

正確的應該是:

$conn = db(); 
+0

ok.t​​rying out – 2013-04-23 18:53:03

+0

這也是我的猜測。 – dqhendricks 2013-04-23 19:24:18

+0

仍然有問題,我只是編輯我的腳本,以提供有關該功能的更多細節。 – 2013-04-24 06:32:09

0

嘗試?>之前在該行的底部添加以下代碼:

if isset($_POST['user']) { update(); } 
0

這只是一個粗略的例子,我沒有測試它。它在這裏,就是爲了讓你可以得到照片。

功能

function update_db($data, $update){ 
    $conn = new PDO('mysql:host=locahost; dbname=xxxx', 'xxx', 'xxx'); 
    $stmt = $conn->prepare("UPDATE table, SET something=? WHERE id = ? "); 
    $stmt->execute(array($data, $update)); 

    if($stmt->rowCount() > 0){ 
    return 'Updated';} 
    else { 
    return 'Something is wrong'; 
    } 
} 

調用它

if(isset($_GET['data'])) { 
$data = $_GET['data']; 
$update = 'text'; 


echo update_db($data, $update) 

} 
+0

我不知道是否有可能像'$ conn'一樣聲明普通變量爲超全局變量。 – bwoebi 2013-04-23 16:54:26

+0

@bwoebi這不是一個超級全球化,我只是把它擺脫了懶惰。他可以將其聲明爲全局的,或者他可以包含數據庫,那裏的資源 – 2013-04-23 16:56:39

+0

已修復我的代碼,包含資源 – 2013-04-23 16:57:35

0

感謝所有。我已經解決了這個問題。數據庫的問題在於被調用的函數無法訪問數據庫。

相關問題