2013-07-09 2 views
1

Это дополнительный вопрос на другую должность (link)PHP обновление подготовили массив заявления

Я пытаюсь обернуть вокруг головы, как я выполнить обновление MySQL, используя подготовленное заявление. Мне нужно добавить WHERE id =? .. Я смущен тем, как я получаю это обратно из своего массива. Благодаря!

Моя форма:

<form action="update.php" method="post"> 

    <input type="hidden" name="id" value=""/> 
    <input type="text" name="name" value=""/> 
    <input type="text" name="age" value=""/> 

    <input type="hidden" name="id" value=""/> 
    <input type="text" name="name" value=""/> 
    <input type="text" name="age" value=""/> 

    <input type="submit" value="submit" name="submit" /> 
</form> 

PHP:

// Create statement object 
$stmt = $db->stmt_init(); 


if (isset($_POST['submit'])) { 

// Create a prepared statement 
if($stmt->prepare("UPDATE contact SET (name, age) VALUES (?, ?)")) { 

    // Bind your variables to replace the ?s 
    $stmt->bind_param('si', $name, $age); 


    $returnedData = $_POST['data']; 

for($i=0;$i<count($returnedData);$i+=3){ 
    $id = $returnedData[$i]['id'] 
    $name = $returnedData[$i+1]['name']; 
    $age = $returnedData[$i+2]['age']; 
    $stmt->execute(); 
} 


    // Close statement object 
    $stmt->close(); 
} 

}

ответ

2

Во-первых, вам нужно использовать имена массивов стиля в виде:

<form action="update.php" method="post"> 

    <input type="hidden" name="id[]" value=""/> 
    <input type="text" name="name[]" value=""/> 
    <input type="text" name="age[]" value=""/> 

    <input type="hidden" name="id[]" value=""/> 
    <input type="text" name="name[]" value=""/> 
    <input type="text" name="age[]" value=""/> 

    <input type="submit" value="submit" name="submit" /> 
</form> 

Я не знаю, где вы получили $_POST['data'] от, что не появляется где-нибудь в вашей форме. Ключи $_POST - это имена входных элементов в форме.

И, наконец, если вы не указали в запросе предложение WHERE, вы обновите каждую строку в таблице.

// Create a prepared statement 
if($stmt->prepare("UPDATE contact SET (name, age) VALUES (?, ?) WHERE id = ?")) { 

    // Bind your variables to replace the ?s 
    $stmt->bind_param('sii', $name, $age, $id); 

    for($i=0;$i<count($_POST['id']);$i++){ 
     $id = $POST['id'][$i] 
     $name = $_POST['name'][$i]; 
     $age = $_POST['age'][$i]; 
     $stmt->execute(); 
    } 

    // Close statement object 
    $stmt->close(); 
} 
+0

Не могли бы вы взглянуть на мой последующий вопрос .. Я не совсем обволакиваю свои ошибки. Благодаря! http://stackoverflow.com/questions/17575653/php-prepared-statement-insert-from-a-loop-of-data – user1040259

2

Данные из вашей формы будут появляться в $_POST['id'], $_POST['name'] и $_POST['age'], но вы не используя эти переменные в коде, который вы опубликовали ,

Фактически вы не устанавливаете значение для id в вашей форме. Ваши скрытые ipputs должны выглядеть следующим образом:

<input type="hidden" name="id" value="myID"/> 

который будет возвращать $_POST['id'] == "myID"

Заметим также, что ваша форма просит для двух наборов этих переменных. Вы не увидите первый набор, если вы каким-либо образом не измените имена.