2016-03-29 13 views
0

を働いていないいいえ:PHP PDOエラーませんが、私は私のPHPのフォームを処理するために、次のコード持って

$result1 = $db->query("SELECT `name` FROM staff_fields WHERE `".$_SESSION['logged_business']."` = 'Yes'")->fetchAll(PDO::FETCH_ASSOC); 
$query = "UPDATE staff SET "; 
foreach($result1 as $q){ 
    $query .= $q['name']."=:".$q['name'].", "; 
} 
$query = rtrim($query, ' ,')." WHERE id=:id"; 
$stmt = $db->prepare($query); 
foreach($result1 as $col){ 
    $stmt->bindParam(':'.$col['name'], $_POST[$col['name']]); 
} 

$stmt->bindParam(':id', $_POST['id']); 
if($stmt->execute()) 
    header('Location: staff.php?updated'); 
else 
    echo "<center><h1>Error Updating Staff</h1></center>"; 

やフォーム、それを自己のために、次のコードを。

ただし、コードをデバッグして調査しても機能していません。 コードの最初の部分は機能しません(フォーム提出)。 私は更新文にデバッグのparamsを使用してみましたが、これは私が得るものです:

SQL: [642] UPDATE staff SET first_name1459057776924=:first_name1459057776924, last_name1459057788088=:last_name1459057788088, job_title1459057796608=:job_title1459057796608, proof_of_age_on_file1459057805910=:proof_of_age_on_file1459057805910, date_of_birth1459057814082=:date_of_birth1459057814082, start_date1459057824504=:start_date1459057824504, signed_contract_in_place1459057835607=:signed_contract_in_place1459057835607, references_received1459057869650=:references_received1459057869650, payroll_informa Params: 11 Key: Name: [24] :first_name1459057776924 paramno=-1 name=[24] ":first_name1459057776924" is_param=1 param_type=2 Key: Name: [23] :last_name1459057788088 paramno=-1 name=[23] ":last_name1459057788088" is_param=1 param_type=2 Key: Name: [23] :job_title1459057796608 paramno=-1 name=[23] ":job_title1459057796608" is_param=1 param_type=2 Key: Name: [34] :proof_of_age_on_file1459057805910 paramno=-1 name=[34] ":proof_of_age_on_file1459057805910" is_param=1 param_type=2 Key: Name: [27] :date_of_birth1459057814082 paramno=-1 name=[27] ":date_of_birth1459057814082" is_param=1 param_type=2 Key: Name: [24] :start_date1459057824504 paramno=-1 name=[24] ":start_date1459057824504" is_param=1 param_type=2 Key: Name: [38] :signed_contract_in_place1459057835607 paramno=-1 name=[38] ":signed_contract_in_place1459057835607" is_param=1 param_type=2 Key: Name: [33] :references_received1459057869650 paramno=-1 name=[33] ":references_received1459057869650" is_param=1 param_type=2 Key: Name: [45] :payroll_information_given_to_ho1459057881692 paramno=-1 name=[45] ":payroll_information_given_to_ho1459057881692" is_param=1 param_type=2 Key: Name: [26] :leaving_date1459057889857 paramno=-1 name=[26] ":leaving_date1459057889857" is_param=1 param_type=2 Key: Name: [3] :id paramno=-1 name=[3] ":id" is_param=1 param_type=2 

はどのようにこのコードは動作しない来ますか? staff_fieldsにはフィールドが含まれており、フォームでも使用されているので、なぜこれが機能していないのかわかりません。

my.iniでIISのログを有効にしようとしましたが、私が見る限りログに記録されませんでした。

これは重複しません。 $stmt->execute()は、staff.php?updatedにリダイレクトされているため、TRUEを返します。

また、私は$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);を設定しているので、リンクしても何の助けにもなりません。急いで行動する前に質問を読んでください。

+0

「first_name1459057776924」という名前の列を作成したのはなぜですか? – itzmukeshy7

+0

@ itzmukeshy7列は、管理パネルを介して作成され、クライアントが名前を競合する可能性を減らすために使用されます。タイムスタンプを追加します –

+0

これは重複しません!!!! '$ stmt-> execute()'は 'staff.php?updated'にリダイレクトされているのでTRUEを返します! 私は '$ db-> setAttribute(PDO :: ATTR_ERRMODE、PDO :: ERRMODE_EXCEPTION);'を設定して、リンクしたものが役に立たないように設定します。急いで行動する前に質問を読んでください。 –

答えて

-1

、置き換えることができる:

foreach($result1 as $q){ 
$query .= $q['name']."='".$_POST[$q['name']]."', "; 
} 

foreach($result1 as $q){ 
$query .= $q['name']."=:".$q['name'].", "; 
} 

をあなたは値を送信するためのフォームを使用していますが、フォームからポストの値をキャプチャしhave't。

これはうまくいきます。

乾杯しています。

+0

ええ、私が使っているPDOというものがあります。 –

+0

はい、私はPDOが何であるか知っています。私はあなたが以前に逃したBindparamを見た。あなたはserialize()の使用を検討しましたか? payroll_informa Paramsのすべてのパラメータに対して – Ash

関連する問題