Возможен ДВА ДВУХ ЗАПИСАНИЯ TextFields? - PullRequest
1 голос
/ 05 сентября 2011
    /* Adding Experiences */
$("#addExperience").click(function () {

if(experiencectr>5){
        alert("WOW! But 5 experiences are enough.");
        return false;
}   

var newTextBoxDiv = $(document.createElement('div'))
     .attr("id", 'ExperienceDiv' + experiencectr);

newTextBoxDiv.html('<label>Experience No. '+ experiencectr + ' : </label>' +
      '<input type="text" name="experience[]" id="experience' + experiencectr + '" >&nbsp;' +
      '<input type="text" id="year' + experiencectr +
      '" size="5" name="years[]"><label>years</label>');

newTextBoxDiv.appendTo("#ExperienceBoxesGroup");


experiencectr++;
 });

В приведенном выше коде добавляются два поля: текстовые поля с опытом и годами

    foreach ($_POST['experience'] as $experience) {
// save $experience to database
$sql_experience = "INSERT INTO experiences(number,experience)
values ('$number','$experience')";
if($result3 = mysql_query($sql_experience ,$db))
    {
            foreach ($_POST['years'] as $years) {
            $sql_years = "UPDATE experiences SET years=$years WHERE experience=$experience";
            if($result = mysql_query($sql_years ,$db))
                { }
            else 
                { echo "ERROR: ".mysql_error(); }
            }
    }
else 
    { echo "ERROR: ".mysql_error(); }
}

В этом коде выше он сохраняется в базе данных, но столбцы полей имеют одинаковое значение во всех строках.Ребята, не могли бы вы мне помочь?

Мне нужен ответ: D

1 Ответ

1 голос
/ 05 сентября 2011

Вы должны получить индексы для доступа к значениям в другом массиве:

foreach($_POST['experiences'] as $idx => $experience) {
    $sql = "INSERT INTO experiences (number, experience, years)
            VALUES ({$idx}, {$experience}, {$_POST['years'][$idx]}");
    // execute query, etc
}

Это будет работать, но вы, вероятно, не должны делать это таким образом, потому что это оставляет вас открытым для SQL-инъекций . Лучший способ сделать это - очистить ваши входные данные (например: mysql_reaL_escape_string или его эквивалент в mysqli)

Наилучшим путем будет с использованием подготовленных операторов :

$stmt = $dbh->prepare("INSERT INTO experiences (number, experience, years) 
                       VALUES (?, ?, ?)");

foreach($_POST['experiences'] as $idx => $experience) {
    // pass values and execute
    $stmt->execute(array($idx, $experience, $_POST['years'][$idx]));
}
...