Инкрементальная нумерация при пропуске определенных ячеек

У меня была такая же проблема, и она все еще не работала, несмотря на то, что мои столбцы базы данных были varchar (255), что хеши были 60 символов, и обеспечение моей кодировки было UTF-8 на всем протяжении. Я довольно новичок в PHP и SQL, поэтому я не буду притворяться, что понимаю, почему это сработало, но мне удалось это исправить, поэтому я надеюсь, что этот пост поможет другим людям с той же проблемой.

Оказалось, что основная причина, по которой password_verify () не проверяла мои хэши, состояла в том, что я сделал подготовленный оператор, который использовал хранимую процедуру ранее в скрипте, не выбирая все результаты запроса должным образом очистите буфер, перед закрытием и повторным подключением для выполнения следующего запроса. Вызов next_result () в mysqli_link после закрытия инструкции будет гарантировать, что любые результаты будут использованы. Кроме того, я использовал другой подготовленный оператор с хранимой процедурой, чтобы сделать вставку для пароля, но мне все еще нужно было делать вызовы store_result () и free_result (), даже если из вставки не были возвращены результирующие наборы. Я предполагаю, что комбинация этих вещей искажала мои данные где-то вдоль линии, в результате чего password_verify () возвращал false на, казалось бы, идентичные хэши.

Этот ответ был для другого но я счел это полезным для изучения того, как правильно закрыть подготовленные заявления с помощью хранимых процедур.

0
задан Xabier 13 July 2018 в 15:59
поделиться

1 ответ

Я не уверен, какое значение должно быть, если в столбце D вы найдете String «set_path» или «stop», но если они всегда одинаковы (т.е. «a», если столбец D = «set_path» и «a», stop ", если столбец D =" стоп "), вы можете достичь желаемых результатов по следующей формуле:

=IF(AND(D2<>"set_path",D2<>"stop"),COUNTIF($D$1:D2,"is_null")+COUNTIF($D$1:D2,"equals"),IF(D2="set_path","a",IF(D2="stop","stop","")))

UPDATE:

Использование VBA вы можете оставить содержимое ячейки так, как они есть, не переписав их формулой, используя следующий код:

Sub foo()
Dim ws As Worksheet: Set ws = Sheets("Sheet1")
'declare and set the worksheet you are working with, amend as required.
Dim LastRow As Long, i As Long

LastRow = ws.Cells(ws.Rows.Count, "D").End(xlUp).Row
'get the last row with data on Column D

For i = 2 To LastRow
    If ws.Cells(i, "B").Value = "" Then 'if cell is empty add formula
        ws.Cells(i, "B").FormulaR1C1 = "=COUNTIF(R1C4:RC[2],""is_null"")+COUNTIF(R1C4:RC[2],""equals"")"
    End If
Next i

End Sub

Второе обновление:

Теперь я адаптировал формулу к увеличивайте буквы на единицу, если в столбце D найдено «set_path». Пожалуйста, имейте в виду, что это будет происходить от AZ, а затем оно начнет перемещаться по символам в соответствии с таблицей ASCII, поэтому вам может потребоваться изменить это, если вы хотите изменить поведение ):

=IF(AND(D2<>"set_path",D2<>"stop"),COUNTIF($D$1:D2,"is_null")+COUNTIF($D$1:D2,"equals"),IF(D2="set_path",IFERROR(CHAR(COUNTIF($D$2:D2,"set_path")+64),""),IF(D2="stop","stop","")))

0
ответ дан Xabier 17 August 2018 в 12:27
поделиться
  • 1
    Формула ПОЧТИ! Единственное, что мне также нужно сделать поэтапное увеличение для «set_path». В текущем случае, в любое время "set_path" видно, что & alpha; . Если вы можете придумать формулу, которая имеет 1-й «set_path», как «a», 2-й «set_path», как "b" и так далее, это было бы прекрасно! – Sunny 13 July 2018 в 18:02
  • 2
    @Sunny Я обновил свой ответ со второй формулой, чтобы делать то, что вы ожидали, пожалуйста, вы могли бы принять мой ответ в качестве ответа, если бы это помогло? Благодаря :) – Xabier 16 July 2018 в 09:01
  • 3
    Работает так, как ожидалось. Спасибо огромное! – Sunny 16 July 2018 в 13:55
Другие вопросы по тегам:

Похожие вопросы: