Увеличьте одно значение в массиве на основе пользовательского ввода, используя цикл for - PullRequest
0 голосов
/ 27 апреля 2018

Я не совсем уверен, как это сделать, и я застрял, пытаясь понять это. Я хочу иметь возможность увеличивать одно значение внутри массива каждый раз, когда пользователь нажимает кнопку отправки, которая сохраняется в файле CSV. Тем не менее, каждый раз, когда я пытаюсь, число остается на 1.

Могу ли я получить руководство? Вот что у меня есть:

<?php $name = $_POST["Name"];
$grade = $_POST["Grade"];
$handle = fopen("users.csv", "a+t");

if (!$handle) {
    die("error, can't open file!");
}
if (!flock($handle, LOCK_EX)) {
    die("lock error!");
}
$count = 10;
for ($i = 0; $i < count($count); $i++) {
    $count++; 
    fputcsv($handle, array($i++, $name, $grade)); }
fseek($handle, 0);

while (!feof($handle)) { 

$record = fgetcsv($handle);
?>
<div>
    ID Number: <?php echo $record[0]; ?><br/>
    Name: <?php echo $record[1]; ?><br/>
    Grade: <?php echo $record[2]; ?><br/>
</div> }

Спасибо.

1 Ответ

0 голосов
/ 27 апреля 2018

Основная стратегия состоит в том, чтобы прочитать существующие записи из файла CSV, а затем использовать эту информацию для создания нового идентификатора. Новый идентификатор может быть основан на:

  1. Общее количество записей или
  2. Наибольший текущий сохраненный идентификатор.

В вашем существующем коде цикл for кажется ненужным, поскольку он искусственно генерирует число - которое всегда будет 0, потому что count($count) всегда возвращает 1.

Я убрал код и добавил несколько комментариев:

$name = $_POST["Name"];
$grade = $_POST["Grade"];
$handle = fopen("users.csv", "a+t");

if (!$handle) die("error, can't open file!");
if (!flock($handle, LOCK_EX)) die("lock error!");

$records = array();
while (!feof($handle))
    $records[] = fgetcsv($handle);

// 1. Use this to find the number of elements
$count = count($records);

// 2. Use this to find the largest current ID
$max = $count > 0 ? max(array_column($records, 0)) : 0;

// Our new ID should be based on (1) or (2) above
$newId = $max + 1;

fputcsv($handle, array($newId, $name, $grade));

fseek($handle, 0);
while (!feof($handle)) { 
    $record = fgetcsv($handle);
    // ... print out your <div> here ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...