2013-04-23 18 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

感谢所有。我已经解决了这个问题。数据库的问题在于被调用的函数无法访问数据库。

相关问题