2013-04-23 15 views
5

Utworzono tę funkcję, aby zaktualizować bazę danych po kliknięciu przycisku przesyłania. Ale to nie działa. Skrypt ma na celu narysowanie wartości użytkownika z bazy danych przy użyciu danych logowania użytkownika poprzez id i wypełnienie formularzy. Ta funkcja pomaga zaktualizować dane użytkownika, gdy jest to zmiana w polu tekstowym formularza.Jak utworzyć funkcję php do aktualizacji bazy danych podczas przesyłania?

Potrzebuję pomocy przy debugowaniu.

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)); 
} 

?> 

na formę Edytuj ustawienia osobiste

<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

Wow; pytanie PHP, które nie popełnia żadnych zwykłych błędów! Jednak SHA * jest zbyt szybki dla skrótu hasła (pozwala na bardzo szybkie wymuszanie brute). Zamiast tego użyj bcrypt lub scrypt lub PBKDFv2. – SLaks

+1

co zrobiłeś, żeby samemu to debugować? sprawdzone wartości zwracane? teraz twoje operacje db wydają się przynosić sukces. –

+1

Gdzie jest ta część, która nazwałaby tę funkcję? Czy na pewno chcesz zadeklarować funkcję createSalt w funkcji aktualizacji? –

Odpowiedz

4
db(); // database function 

Wydaje się, jakby was Zapomniałem przypisać wartość zwracaną funkcji do $conn.

Poprawnie powinno być:

$conn = db(); 
+0

ok.wyrażając to –

+0

To również moje przypuszczenie. – dqhendricks

+0

nadal problemy z nim. Właśnie edytowałem skrypt, aby podać więcej szczegółów na temat funkcji. –

0

Spróbuj dodać ten kod na dole na linii przed ?>:

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

Jest to tylko przykład szorstki, a ja jej nie testowane. Jest tutaj, żebyś mógł uzyskać obraz.

Funkcja

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'; 
    } 
} 

Nazywając to

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


echo update_db($data, $update) 

} 
+0

Nie wiedziałem, że istnieje możliwość zadeklarowania normalnej zmiennej, takiej jak '$ conn', jako superglobalnej. – bwoebi

+0

@bwoebi To nie jest super globalne, po prostu wyrzuciłem to z lenistwa. może zadeklarować to jako globalne, lub może zawrzeć bazę danych, zasoby tam –

+0

Naprawiono mój kod, w tym zasobu –

0

Dzięki wszystkim. Rozwiązałem problem. problem dotyczył bazy danych, ponieważ wywoływana funkcja nie mogła uzyskać dostępu do bazy danych.

Powiązane problemy