2014-12-29 1 views
0

спасибо, что посмотрели на это. Я застрял в этой проблеме некоторое время, в основном, я занимаюсь сайтом агентства по набору персонала для своего школьного проекта. Я выполняю функцию, где я могу просмотреть всех кандидатов, которые подали заявку на любое задание, и я могу выбрать из раскрывающегося списка, следует ли «утверждать», «отрицать» или оставаться «ожидающим», который должен обновить таблицу в базе данных на выбранную мной опцию, и она будет отражена на странице кандидата. Однако с кодами, которые я использую прямо сейчас, он может отображать всю информацию, которая мне нужна из другой таблицы на странице, но когда я пытаюсь представить детали, она работает только для последнего парня, который применял, а не для остальных.Попытка вставить всю информацию в форму для обновления в базе данных

Это форма:

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

<div align ="center"> 

<table border='1' width ="500"> 

<tr> 

<td> <b> ID </b></td> 
      <td> <b> Candidate name </b></td> 
      <td> <b> Job ID </b></td> 
      <td> <b> Job title </b></td> 
      <td> <b> Company </b></td> 
      <td> <b> Shortlist status </b></td> 
</tr> 

while ($row = mysqli_fetch_array($result)) { 
    $jobid = $row['Job_id']; 
    $canid = $row['Candidate_id']; 
?> 
<tr> 

<td><?php echo $canid; ?></td> 

<input type="hidden" name="can_id" value=<?php echo $canid ?>> 
<input type="hidden" name="job_id" value=<?php echo $jobid ?>> 
<?php 

$query2 = "SELECT * FROM candidate WHERE Candidate_id =$canid"; 
$result2 = mysqli_query($link, $query2) or die(mysqli_error($link)); 

while ($row2 = mysqli_fetch_array($result2)) { 
    $canname = $row2['First_name']." ".$row2['Last_name']; 
?> 

<td><?php echo $canname; ?></td> 


<?php 
} 

$query3 = "SELECT * FROM jobs WHERE Job_id =$jobid"; 
$result3 = mysqli_query($link, $query3) or die(mysqli_error($link)); 

while ($row3 = mysqli_fetch_array($result3)) { 

    $jobname = $row3['Job_title']; 
    $comid = $row3['Company_id']; 
    ?> 

    <td><?php echo $jobid; ?></td> 
    <td><?php echo $jobname; ?></td>   
    <?php 
} 

$query4 = "SELECT * FROM company WHERE Company_id =$comid"; 
$result4 = mysqli_query($link, $query4) or die(mysqli_error($link)); 

while ($row4 = mysqli_fetch_array($result4)) { 

    $comname = $row4['Company_name']; 
    ?> 

    <td><?php echo $comname; ?></td> 

    <?php 
    } 

?> 

<td> 
    <select id="id_status" name="shortlist_status"> 
    <option value="0">Pending...</option> 
    <option value="1">Shortlist</option> 
    <option value="2">Denied</option> 
    </select> 

    </td> 

</tr> 

<?php 

} 

?> 

</table> 

</div> 

<input type="submit" value="Submit"/> 


</form> 

Это страница dosubmit:

<?php 
include "dbFunctions.php"; 

session_start(); 

$candidate_id = $_POST['can_id']; 
$job_id = $_POST['job_id']; 
$status = $_POST['shortlist_status']; 


$insertQuery = "UPDATE application SET Shortlist_status = '$status' WHERE Candidate_id = $candidate_id AND Job_id = $job_id"; 

$inserted = mysqli_query($link, $insertQuery) or die(mysqli_error($link)); 

if($inserted) 
{ 
    $message = 'Profile edited successfully <br><a href="testing.php">Home</a>';; 
    echo $candidate_id; 
    echo $status; 
} 
else 
{ 
    $message = "Profile edited failed"; 
} 
echo $message; 

?> 
+0

Ваш код уязвим для SQL инъекций. – Boann

+0

Вы правы .. думаю, что я буду смотреть на это, как только я смогу выполнить функцию в первую очередь. Спасибо за headup – Darkyaero

ответ

0

Дайте все ваши имена входов, которые заканчиваются []. Затем PHP создаст массив для каждого из них в $_POST. Например.

<input type="hidden" name="can_id[]" value=<?php echo $canid ?>> 
<input type="hidden" name="job_id[]" value=<?php echo $jobid ?>> 

Тогда ваш PHP может сделать:

$insertQuery = "UPDATE application SET Shortlist_status = ? WHERE Candidate_id = ? AND Job_id = ?"; 
$insertStmt = mysqli_prepare($link, $insertQuery); 
mysqli_stmt_bind_param($insertStmt, "iii", $status, $candidate_id, $job_id); 
foreach ($_POST['can_id'] as $i => $candidate_id) { 
    $job_id = $_POST['job_id'][$i]; 
    $status = $_POST['shortlist_status'][$i]; 
    $inserted = mysqli_execute($insertStmt) or die(mysqli_error($insertStmt)); 
    if ($inserted) { 
     ... 
    } else { 
     ... 
    } 
} 
+0

Я попытался ввести коды, которые вы указали, но я получил эту ошибку ». Примечание. Преобразование массива в строку в строке 11 Неизвестный столбец« Массив »в разделе« where clause »« Line 11 is $ insertQuery = »UPDATE application SET Shortlist_status = '$ status' WHERE Candidate_id = $ candid_id AND Job_id = $ job_id ";" – Darkyaero

+0

Похоже, что вы упустили '[$ i]' в назначениях. – Barmar

+0

Вы поместили код обновления внутри цикла, правильно? – Barmar