2013-04-23 7 views
5

Ho creato questa funzione per aggiornare un database quando si fa clic sul pulsante di invio. Ma non sembra funzionare. Lo script ha lo scopo di disegnare i valori dell'utente dal database utilizzando i dettagli di accesso dell'utente tramite id e popolare i moduli. La funzione è di aiutare ad aggiornare i dettagli dell'utente quando si tratta di una modifica nel campo di testo del modulo.Come creare una funzione php per aggiornare il database all'invio?

Per favore, ho bisogno di aiuto per il debug.

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

?> 

la forma Modifica impostazioni personali

<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; una domanda PHP che non fa nessuno dei soliti errori! Tuttavia, SHA * è troppo veloce per un hash della password (consente una forzatura bruta estremamente rapida). Utilizzare invece bcrypt o scrypt o PBKDFv2. – SLaks

+1

cosa hai fatto per eseguire il debug da solo? valori di ritorno controllati? in questo momento le tue operazioni db sembrano avere successo. –

+1

Dov'è la parte che chiamerebbe questa funzione? Inoltre, sei sicuro di voler dichiarare la funzione createSalt all'interno della funzione di aggiornamento? –

risposta

4
db(); // database function 

sembra come se si Hai dimenticato di assegnare il valore di ritorno della funzione a $conn.

corretta dovrebbe essere:

$conn = db(); 
+0

ok.attacco fuori –

+0

Questa è la mia ipotesi pure. – dqhendricks

+0

hanno ancora problemi con esso. Ho appena modificato il mio script per fornire maggiori dettagli sulla funzione. –

0

Prova ad aggiungere questo codice in fondo alla linea prima della ?>:

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

Questo è solo un esempio di massima, e non ho provato. È qui, solo così puoi avere l'immagine.

La funzione

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

Chiamarlo

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


echo update_db($data, $update) 

} 
+0

Non sapevo che esistesse la possibilità di dichiarare una variabile normale come '$ conn' come superglobale. – bwoebi

+0

@bwoebi Non è un super globale, l'ho messo solo per pigrizia. può dichiararlo globale, o potrebbe includere il database, risorse lì –

+0

Risolto il mio codice, inclusa una risorsa –

0

Grazie a tutti. Ho risolto il problema. il problema era con il database poiché la funzione chiamata non poteva accedere al database.

Problemi correlati