Примечание: неопределенное переполнение стека смещения

у меня есть это PHP код, который выдает предупреждение notice: undefined offset

$thisMonth=$_POST['month']; //the value is today's date's month
$thisYear=$_POST['year']; //the value is today's date's year
$thisDay=$_POST['day']; //the value is today's date's day

$table=mysql_query("SELECT * FROM `kids` WHERE `debt`!='0'") or die(mysql_error());
$debt=0;

while($row=mysql_fetch_assoc($table)){
$explodedDate=explode('/',$row['enrollmentdate']);
$theYear=$explodedDate[0];
$theMonth=$explodedDate[1]; //this line throws the error
$theDay=$explodedDate[2]; //and also this line
if((int)$theYear==(int)$thisYear && (int)$theMonth==(int)$thisMonth){
if((int)$theDay==(int)$thisDay || (int)$thisDay==0){
$debt+=$row['debt'];
}
}
}

Я читал по всему интернету для решения, но кажется, что эта ошибка зависит от кода, и, к сожалению, я не могу понять, как это исправить.

есть идеи как исправить ошибку или что ее вызывает?

это полная ошибка:

Примечание: неопределенное смещение: 1 в C: \ wamp \ www \ kids_house \ php \ functions.php в строке 600
Примечание: неопределенное смещение: 2 в C: \ wamp \ www \ kids_house \ php \ functions.php в строке 601

2

Решение

Причина, по которой эти две строки выдают ошибки, заключается в том, что значение в этом поле не гггг / мм / дд, как вы ожидаете:

$explodedDate=explode('/',$row['enrollmentdate']);

Если вы посмотрите на значение, которое выдает ошибку с чем-то вроде этого, вы должны увидеть проблему:

$thisMonth=$_POST['month']; //the value is today's date's month
$thisYear=$_POST['year']; //the value is today's date's year
$thisDay=$_POST['day']; //the value is today's date's day

$table=mysql_query("SELECT * FROM `kids` WHERE `debt`!='0'") or die(mysql_error());
$debt=0;

while($row=mysql_fetch_assoc($table)){
$explodedDate=explode('/',$row['enrollmentdate']);

if ( count( $explodedDate ) <= 1 ) {
var_dump( $row );   //this will show you the row that is causing the notice
var_dump( $explodedDate );   //this will show you the date
die();
}

$theYear=$explodedDate[0];
$theMonth=$explodedDate[1]; //this line throws the error
$theDay=$explodedDate[2]; //and also this line
if((int)$theYear==(int)$thisYear && (int)$theMonth==(int)$thisMonth){
if((int)$theDay==(int)$thisDay || (int)$thisDay==0){
$debt+=$row['debt'];
}
}
}

Если вы хотите повторить попытку с запятыми для строк с датой регистрации, отформатированной как гггг, мм, дд, вы можете сделать это. Это не самое элегантное решение, но, похоже, у вас грязные данные, поэтому, возможно, придется.

$thisMonth=$_POST['month']; //the value is today's date's month
$thisYear=$_POST['year']; //the value is today's date's year
$thisDay=$_POST['day']; //the value is today's date's day

$table=mysql_query("SELECT * FROM `kids` WHERE `debt`!='0'") or die(mysql_error());
$debt=0;

while($row=mysql_fetch_assoc($table)){
$explodedDate=explode('/',$row['enrollmentdate']);

//try again with commas
if ( count( $explodedDate ) == 0 ) {
$explodedDate=explode(',',$row['enrollmentdate']);
}

//skip the record if still no enrollment date
if ( count( $explodedDate ) == 3 ) {

$theYear=$explodedDate[0];
$theMonth=$explodedDate[1]; //this line throws the error
$theDay=$explodedDate[2]; //and also this line
if((int)$theYear==(int)$thisYear && (int)$theMonth==(int)$thisMonth){
if((int)$theDay==(int)$thisDay || (int)$thisDay==0){
$debt+=$row['debt'];
}
}
}
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]