PHP syntax error help

Soldato
Joined
7 Jan 2007
Posts
10,607
Location
Sussex, UK
PHP:
foreach ($variable1 as $element) {
	if ($variable1 != $LastWeeksVariable && is_numeric($element) && $d=="Tue") {
        mysql_query("INSERT INTO table1 
					(idproducts, info1, info2, info3, info4, info5, info6, fullinfo1, drawndate, drawnyear) VALUES('9', '$variable1[0]', '$variable1[1]', '$variable1[2]', '$variable1[3]', '$variable1[4]', '$variable1[5]', '$variable1[6]', NOW(), NOW())") 
or die(mysql_error());  

mysql_query("UPDATE table2 SET dates = DATE_ADD(DATE_ADD(DATE(NOW() + INTERVAL 2 DAY), INTERVAL 19 HOUR), INTERVAL 00 MINUTE)
			WHERE idsomething = '9'")
    or die(mysql_error());

		break 1;
	foreach ($variable1 as $element) {
	} if ($variable1 != $LastWeeksVariable && is_numeric($element) && $d=="Thu") {
        mysql_query("INSERT INTO table1 
					(idproducts, info1, info2, info3, info4, info5, info6, fullinfo1, drawndate, drawnyear) VALUES('9', '$variable1[0]', '$variable1[1]', '$variable1[2]', '$variable1[3]', '$variable1[4]', '$variable1[5]', '$variable1[6]', NOW(), NOW())") 
or die(mysql_error());  

mysql_query("UPDATE table2 SET dates = DATE_ADD(DATE_ADD(DATE(NOW() + INTERVAL 2 DAY), INTERVAL 19 HOUR), INTERVAL 00 MINUTE)
			WHERE idsomething = '9'")
    or die(mysql_error());

		break 1;
	
	foreach ($variable1 as $element) {	
	} if ($variable1 != $LastWeeksVariable && is_numeric($element) && $d=="Sat") {
        mysql_query("INSERT INTO table1 
					(idproducts, info1, info2, info3, info4, info5, info6, fullinfo1, drawndate, drawnyear) VALUES('9', '$variable1[0]', '$variable1[1]', '$variable1[2]', '$variable1[3]', '$variable1[4]', '$variable1[5]', '$variable1[6]', NOW(), NOW())") 
or die(mysql_error());  

mysql_query("UPDATE table2 SET dates = DATE_ADD(DATE_ADD(DATE(NOW() + INTERVAL 3 DAY), INTERVAL 19 HOUR), INTERVAL 00 MINUTE)
			WHERE idsomething = '9'")
    or die(mysql_error());

		break 1;
	
		} else {
        echo "'{$element}' is NOT numeric or results same as last week, or It isn't Thursday", PHP_EOL;
    }
}

mysql_close();

Can anyone spot the syntax error?
 
PHP:
foreach ($variable1 as $element) {     
    } if ($variable1 != $LastWeeksVariable && is_numeric($element) && $d=="Sat") {

Does your editor highlight the opposite bracket when you select one? there's nothing in that foreach loop.

PHP:
foreach ($variable1 as $element) {
	if ($variable1 != $LastWeeksVariable && is_numeric($element) && $d == "Tue") {
		mysql_query("INSERT INTO table1  
                    (idproducts, info1, info2, info3, info4, info5, info6, fullinfo1, drawndate, drawnyear) VALUES('9', '$variable1[0]', '$variable1[1]', '$variable1[2]', '$variable1[3]', '$variable1[4]', '$variable1[5]', '$variable1[6]', NOW(), NOW())")
				or die(mysql_error());

		mysql_query("UPDATE table2 SET dates = DATE_ADD(DATE_ADD(DATE(NOW() + INTERVAL 2 DAY), INTERVAL 19 HOUR), INTERVAL 00 MINUTE) 
            WHERE idsomething = '9'")
				or die(mysql_error());

		break 1;
	}
		foreach ($variable1 as $element) {
			if ($variable1 != $LastWeeksVariable && is_numeric($element) && $d == "Thu") {
				mysql_query("INSERT INTO table1  
                    (idproducts, info1, info2, info3, info4, info5, info6, fullinfo1, drawndate, drawnyear) VALUES('9', '$variable1[0]', '$variable1[1]', '$variable1[2]', '$variable1[3]', '$variable1[4]', '$variable1[5]', '$variable1[6]', NOW(), NOW())")
						or die(mysql_error());

				mysql_query("UPDATE table2 SET dates = DATE_ADD(DATE_ADD(DATE(NOW() + INTERVAL 2 DAY), INTERVAL 19 HOUR), INTERVAL 00 MINUTE) 
            WHERE idsomething = '9'")
						or die(mysql_error());

				break 1;

				if ($variable1 != $LastWeeksVariable && is_numeric($element) && $d == "Sat") {
					mysql_query("INSERT INTO table1  
                    (idproducts, info1, info2, info3, info4, info5, info6, fullinfo1, drawndate, drawnyear) VALUES('9', '$variable1[0]', '$variable1[1]', '$variable1[2]', '$variable1[3]', '$variable1[4]', '$variable1[5]', '$variable1[6]', NOW(), NOW())")
							or die(mysql_error());

					mysql_query("UPDATE table2 SET dates = DATE_ADD(DATE_ADD(DATE(NOW() + INTERVAL 3 DAY), INTERVAL 19 HOUR), INTERVAL 00 MINUTE) 
            WHERE idsomething = '9'")
							or die(mysql_error());

					break 1;
				} else {
					echo "'{$element}' is NOT numeric or results same as last week, or It isn't Thursday", PHP_EOL;
				}
			}
		}
}

mysql_close();

Overall the code is quite ... what are you trying to achieve with this?
 
Try some better structure:

PHP:
foreach ($variable1 as $element) {
	
	if($variable1 != $LastWeeksVariable && isset($d) && $d != '')
	{
		switch($d)
		{
			case 'Tue': 
				/* Setup Values */
				break;
			case 'Thu'
				/* Setup Values */
				break;
			case 'Sat': 
				/*Setup Values */
				break;
			default:
				/* Setup values */				
		}
		
		if($values) { /* Check all values are setup correctly */
			/* Do Query */
			
		} else {
			/* Uh oh! You dun goofed */
		}
	}
}

The goal is to remove redundant data and checks.
 
OK I now have this, which is much easier to follow. However, it is inserting 7 lines into my db, because of the loop. How do I make it only do a first pass then stop?

It is entering the same line 7 times into my db now.

PHP:
foreach ($variable1 as $element) {
 if($variable1 != $variable2 && is_numeric($element) && isset($d) && $d != '')
    {
        switch($d)
        {
            case 'Tue': 
						mysql_query("INSERT INTO table1
						(idproducts, info1, info2, info3, info4, info5, info6, totalinfo1, drawndate, drawnyear) VALUES('9', '$variable1[0]', '$variable1[1]', '$variable1[2]', '$variable1[3]', '$variable1[4]', '$variable1[5]', '$variable1[6]', NOW(), NOW())") 
						or die(mysql_error());  

						mysql_query("UPDATE table2 SET dates = DATE_ADD(DATE_ADD(DATE(NOW() + INTERVAL 2 DAY), INTERVAL 19 HOUR), INTERVAL 00 MINUTE)
						WHERE idtable2 = '9'")
						or die(mysql_error());
                break;
            case 'Thu':
						mysql_query("INSERT INTO table1
						(idproducts, info1, info2, info3, info4, info5, info6, totalinfo1, drawndate, drawnyear) VALUES('9', '$variable1[0]', '$variable1[1]', '$variable1[2]', '$variable1[3]', '$variable1[4]', '$variable1[5]', '$variable1[6]', NOW(), NOW())") 
						or die(mysql_error());  

						mysql_query("UPDATE table2 SET dates = DATE_ADD(DATE_ADD(DATE(NOW() + INTERVAL 2 DAY), INTERVAL 19 HOUR), INTERVAL 00 MINUTE)
						WHERE idtable2 = '9'")
						or die(mysql_error());
                break;
            case 'Sat': 
                        mysql_query("INSERT INTO table1
						(idproducts, info1, info2, info3, info4, info5, info6, totalinfo1, drawndate, drawnyear) VALUES('9', '$variable1[0]', '$variable1[1]', '$variable1[2]', '$variable1[3]', '$variable1[4]', '$variable1[5]', '$variable1[6]', NOW(), NOW())") 
						or die(mysql_error());  

						mysql_query("UPDATE table2 SET dates = DATE_ADD(DATE_ADD(DATE(NOW() + INTERVAL 3 DAY), INTERVAL 19 HOUR), INTERVAL 00 MINUTE)
						WHERE idtable2 = '9'")
						or die(mysql_error());
                break;
            default:
						echo "error";
        }
    }
}
 
Last edited:
PHP:
$inserted = false;
foreach ($variable1 as $element) {
 if($inserted) { continue; }
 if($variable1 != $variable2 && is_numeric($element) && isset($d) && $d != '')
    {
        switch($d)
        {
            case 'Tue': 
                        mysql_query("INSERT INTO table1
                        (idproducts, info1, info2, info3, info4, info5, info6, totalinfo1, drawndate, drawnyear) VALUES('9', '$variable1[0]', '$variable1[1]', '$variable1[2]', '$variable1[3]', '$variable1[4]', '$variable1[5]', '$variable1[6]', NOW(), NOW())") 
                        or die(mysql_error());  

                        mysql_query("UPDATE table2 SET dates = DATE_ADD(DATE_ADD(DATE(NOW() + INTERVAL 2 DAY), INTERVAL 19 HOUR), INTERVAL 00 MINUTE)
                        WHERE idtable2 = '9'")
                        or die(mysql_error());
                        $inserted = true;
                break;
            case 'Thu':
                        mysql_query("INSERT INTO table1
                        (idproducts, info1, info2, info3, info4, info5, info6, totalinfo1, drawndate, drawnyear) VALUES('9', '$variable1[0]', '$variable1[1]', '$variable1[2]', '$variable1[3]', '$variable1[4]', '$variable1[5]', '$variable1[6]', NOW(), NOW())") 
                        or die(mysql_error());  

                        mysql_query("UPDATE table2 SET dates = DATE_ADD(DATE_ADD(DATE(NOW() + INTERVAL 2 DAY), INTERVAL 19 HOUR), INTERVAL 00 MINUTE)
                        WHERE idtable2 = '9'")
                        or die(mysql_error());
                        $inserted = true;
                break;
            case 'Sat': 
                        mysql_query("INSERT INTO table1
                        (idproducts, info1, info2, info3, info4, info5, info6, totalinfo1, drawndate, drawnyear) VALUES('9', '$variable1[0]', '$variable1[1]', '$variable1[2]', '$variable1[3]', '$variable1[4]', '$variable1[5]', '$variable1[6]', NOW(), NOW())") 
                        or die(mysql_error());  

                        mysql_query("UPDATE table2 SET dates = DATE_ADD(DATE_ADD(DATE(NOW() + INTERVAL 3 DAY), INTERVAL 19 HOUR), INTERVAL 00 MINUTE)
                        WHERE idtable2 = '9'")
                        or die(mysql_error());
                        $inserted = true;
                break;
            default:
                        echo "error";
        }
    }
}

Though I am fairly sure there's a better method of doing this. When do you call this action?
 
OK I now have this, which is much easier to follow. However, it is inserting 7 lines into my db, because of the loop. How do I make it only do a first pass then stop?

It is entering the same line 7 times into my db now.

PHP:
foreach ($variable1 as $element) {
 if($variable1 != $variable2 && is_numeric($element) && isset($d) && $d != '')
    {
        switch($d)
        {
            case 'Tue': 
						mysql_query("INSERT INTO table1
						(idproducts, info1, info2, info3, info4, info5, info6, totalinfo1, drawndate, drawnyear) VALUES('9', '$variable1[0]', '$variable1[1]', '$variable1[2]', '$variable1[3]', '$variable1[4]', '$variable1[5]', '$variable1[6]', NOW(), NOW())") 
						or die(mysql_error());  

						mysql_query("UPDATE table2 SET dates = DATE_ADD(DATE_ADD(DATE(NOW() + INTERVAL 2 DAY), INTERVAL 19 HOUR), INTERVAL 00 MINUTE)
						WHERE idtable2 = '9'")
						or die(mysql_error());
                break;
            case 'Thu':
						mysql_query("INSERT INTO table1
						(idproducts, info1, info2, info3, info4, info5, info6, totalinfo1, drawndate, drawnyear) VALUES('9', '$variable1[0]', '$variable1[1]', '$variable1[2]', '$variable1[3]', '$variable1[4]', '$variable1[5]', '$variable1[6]', NOW(), NOW())") 
						or die(mysql_error());  

						mysql_query("UPDATE table2 SET dates = DATE_ADD(DATE_ADD(DATE(NOW() + INTERVAL 2 DAY), INTERVAL 19 HOUR), INTERVAL 00 MINUTE)
						WHERE idtable2 = '9'")
						or die(mysql_error());
                break;
            case 'Sat': 
                        mysql_query("INSERT INTO table1
						(idproducts, info1, info2, info3, info4, info5, info6, totalinfo1, drawndate, drawnyear) VALUES('9', '$variable1[0]', '$variable1[1]', '$variable1[2]', '$variable1[3]', '$variable1[4]', '$variable1[5]', '$variable1[6]', NOW(), NOW())") 
						or die(mysql_error());  

						mysql_query("UPDATE table2 SET dates = DATE_ADD(DATE_ADD(DATE(NOW() + INTERVAL 3 DAY), INTERVAL 19 HOUR), INTERVAL 00 MINUTE)
						WHERE idtable2 = '9'")
						or die(mysql_error());
                break;
            default:
						echo "error";
        }
    }
}

Your values should be from element[] not variable1[], otherwise your code makes no sense. Another tip is use PDO, and prepared statements, as opposed to mysql_query, etc.
 
Back
Top Bottom