2016-04-07 11 views
0

配列を使用してデータを更新しようとしています。根拠は、私は次のように見えるテーブルを有することである:名前の配列から値を取得してデータを更新する

idtest主キーであり、外部IDが別のテーブルの主キーと相関IDであるので、行の、おそらくデータ値idtest =
|| idtest || testfieldA || testfieldB || testfieldC || externalId || 

1,2,3はすべて同じ外部IDを共有します。

私の目標は、その中のデータを更新することです。私が作成したフォーム要素は以下の通りである:復帰番号の初期値と、例えば、=名[E]名前でフォームタグをエコーし​​ます

$sql = "SELECT * FROM test.test WHERE externalId = $callID"; 
$r = mysqli_query($conn, $sql) or die(mysqli_error($conn)); 

for ($tcount =1; $rowTest = mysqli_fetch_assoc($rtest); $tcount++){ 
    $idtest = $rowTicket['idtest']; 
    $testfieldA = $rowTicket['testfieldA']; 
    $testfieldB = $rowTicket['testfieldB']; 
    $testfieldC = $rowTicket['testfieldC']; 
    $externalid = $rowTicket['externalId']; 
    echo "<div>"; 
     echo "<input type='hidden' name='idtest' value='$idtest'>"; 
     echo "<input type='text' name='testfieldA[$tcount]' value='$testfieldA'>"; 
     echo "<input type='number' step='0.01' min='0' name='testfieldB[$tcount]' value='$testfieldB'>"; 
     echo "<input type='number' name='testfieldC[$tcount]' value='$testfieldC'>"; 
     echo "<input type='hidden' name='externalId' value='$externalid'>"; 
    echo "</div>"; 
} 

。とにかく毎回ユニークなので、私はidtestの名前= idtest []もしません。

これはうまく動作し、updatetest.php?callid =#にリンクするonclick関数によって呼び出されたときに、データから私が望むものをエコーし​​ます。しかし、今私はコンテンツを更新したい。私が試しているシステムは、次のようにwhileループを呼び出すことです:

$e = 0; 
$more = TRUE; 
$idtest = $_POST['idtest']; 

while($more){ 
    if(isset($_POST['testfieldA'.$e]) && isset($_POST['testfieldB'.$e]) && isset($_POST['testfieldC'.$e])){ 
     $test1 = $_POST['testfieldA'.$e]; 
     $test1 = trim($test1); 

     $test2 = $_POST['testfieldB'.$e]; 
     $test2 = trim($test2); 

     $test3 = $_POST['testfieldC'.$e]; 
     $test3 = trim($test3); 

     $sql = "UPDATE test.test SET testfieldA = ?, testfieldB = ?, testfieldC= ? WHERE idtest = ?"; 
     $stmt = mysqli_prepare($conn, $sql) or die(mysqli_error($conn)); 
     mysqli_stmt_bind_param($stmt, "sssd", $test1, $test2, $test3, $idtest) or die(mysqli_error($conn)); 
     mysqli_stmt_execute($stmt) or die(mysqli_error($conn)); 
     mysqli_stmt_close($stmt); 
    } else { 
     $more = FALSE; 
    } 
} 
$e++; 

しかし、これは実行されません。各名前をループして番号を取得し、名前が存在する限りデータを更新する効果的な方法は何ですか?言い訳によると、この質問が不明なように見える場合、私はそれを表現するのが難しいです。

+0

'while'ループであなたの期待は何ですか:

その後、処理データは、このような何かを書くのか? '$ e'を初期化し、' while'ループの外側でインクリメントしますが、 '$ l'(未定義?)をチェックします。しかし、どのようなユーティリティに '$ e'、' $ l'、 'while'自体がありますか? '$ _POST ['testfield1'。$ e]' = '$ _POST ['testfield10']' – fusion3k

+0

私はスペルミスです。私はテーブルの見出しを変更したので少し質問を編集する必要があります。その場合、moreが真である間は、isset($ _ POST ['testfieldA'。$ e])が設定されていないか存在していないとfalseがfalseになります。 $ eも毎回加算されますが、あなたが指摘したように、これには欠陥があるようです。私の質問を更新して情報を更新してみましょう – verdeletg

答えて

1

は、このようにHTMLフォーム書き込み入力(S)で:

echo "<input type='text' name='testfield1[]' value='$testfield1'>"; 

配列変換は、直接フォームを送信されています。

for($i = 0; $i < count($_POST['testfield1']); $i++) 
{ 
    $test1 = trim($_POST['testfield1'][$i]); 
    $test2 = trim($_POST['testfield2'][$i]); 
    (...) 
} 
+0

これは途中で動作します。私はすでにinput name = 'testfieldA []'を持っていたので、問題は決して取得できず、アップデートが増えてループが正しく行われていませんでした。あなたのループシステムは完璧に働いた、ありがとう。 – verdeletg

関連する問題