у меня есть это 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
Причина, по которой эти две строки выдают ошибки, заключается в том, что значение в этом поле не гггг / мм / дд, как вы ожидаете:
$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'];
}
}
}
}
Других решений пока нет …