Error foreach
Had even een vraagje. Ik heb een "goedkeur systeempje" in mn admin zitten. Zodra er een reactie binnenkomt, moet je die in het adminpaneel eerst goedkeuren. Dit doe je dmv checkboxes.
Nu heb ik dit voor iemand op een andere site gezet, werkt perfect.. echter zie ik hier een error verschijnen die ik op de andere site niet krijg. Hij doet het echter dus wel.
Dit is regel 55 tm 61:
Nu heb ik dit voor iemand op een andere site gezet, werkt perfect.. echter zie ik hier een error verschijnen die ik op de andere site niet krijg. Hij doet het echter dus wel.
Code (php)
Dit is regel 55 tm 61:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
foreach($_POST["approve"] as $approve)
{
$sql = "UPDATE gastenboek SET status = '1' WHERE id='$approve'";
$resultaat=mysql_query($sql) ;
}
?>
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
foreach($_POST["approve"] as $approve)
{
$sql = "UPDATE gastenboek SET status = '1' WHERE id='$approve'";
$resultaat=mysql_query($sql) ;
}
?>
Je moet eerst je Post variabelen controleren, waarschijnlijk is daar wat fout mee (doe anders eens een print_r($_POST['approve'); dan zie je de inhoud).
De varable "$_POST["approve"]" is niet van het type array.
Je kunt hieraan het volgende doen:
Je kunt hieraan het volgende doen:
Code (php)
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
Quote:
En heb je die wel allemaal dezelfde naam gegeven en [] achter de naam gezet? Pas dan wordt er een array aangemaakt en doorgestuurd naar PHP.Dit doe je dmv checkboxes.
Het is in PHP niet nodig om een controle op array te doen, al moet je er wel voor zorgen dat je een eigen errorhandler hebt die dit soort meldingen correct afvangt. Denk aan hackers die dol zijn op dit soort informatie en alles fout laten gaan wat er maar fout kan gaan.
Als ik dat doe, dan krijg ik geen foutmelding meer maar doet hij het ook niet meer ;)
@pgFrank:
Zo heb ik mn checkboxes:
<input type="checkbox" name="approve[]" value=" ">
<input type="checkbox" name="remove[]" value=" ">
================================================
Ik wil natuurlijk dit probleem oplossen hoor, maar kan een van jullie mij wel vertellen waarom ik dit probleem niet heb op een andere host?
En ook nog even een vraagje:
Waarom refreshed hij niet als ik dit doe:
Zo heb ik mn checkboxes:
<input type="checkbox" name="approve[]" value=" ">
<input type="checkbox" name="remove[]" value=" ">
================================================
Ik wil natuurlijk dit probleem oplossen hoor, maar kan een van jullie mij wel vertellen waarom ik dit probleem niet heb op een andere host?
En ook nog even een vraagje:
Waarom refreshed hij niet als ik dit doe:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?
if($resultaat){
echo "<meta http-equiv=\"refresh\" content=\"0;URL=intro.php\">";
}
mysql_close();
?>
if($resultaat){
echo "<meta http-equiv=\"refresh\" content=\"0;URL=intro.php\">";
}
mysql_close();
?>
Doe eens print_r($_POST['approve']; dan krijg je precies te zien wat er nu in deze variabele staat.
@pgFrank:
Sorry voor de (nogal domme) vraag, maar waar precies moet ik dat zetten? Bij het resultaat?
Sorry voor de (nogal domme) vraag, maar waar precies moet ik dat zetten? Bij het resultaat?
Geef dan gelijk alle gegevens even weer die gepost worden:
edit:
Onder:
Want dan weet je zeker dat er iets gepost is. Dan hoeft $_POST trouwens nog niet gevuld te zijn.
edit:
Onder:
Want dan weet je zeker dat er iets gepost is. Dan hoeft $_POST trouwens nog niet gevuld te zijn.
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
@Martijn waarom meteen alle informatie? Te veel informatie kan zorgen dat je iets over het hoofd ziet
Dit stukje code controleert alleen of de laatste query gelukt is aangezien die bij elke query wordt overschreven.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?
if($resultaat){
echo "<meta http-equiv=\"refresh\" content=\"0;URL=intro.php\">";
}
mysql_close();
?>
if($resultaat){
echo "<meta http-equiv=\"refresh\" content=\"0;URL=intro.php\">";
}
mysql_close();
?>
Dit stukje code controleert alleen of de laatste query gelukt is aangezien die bij elke query wordt overschreven.
Direct na de contole of er een formulier is verzonden, ga je de inhoud van de POST-array op het scherm zetten. Dan weet je wat je hebt en kun je eenvoudig gaan debuggen.
Dat heb ik gedaan en dan krijg ik direct de volgende melding:
Warning: Invalid argument supplied for foreach() in test/admin/intro.php on line 58
Warning: Invalid argument supplied for foreach() in /test/admin/intro.php on line 64
dit is 56 tm 68:
Warning: Invalid argument supplied for foreach() in test/admin/intro.php on line 58
Warning: Invalid argument supplied for foreach() in /test/admin/intro.php on line 64
dit is 56 tm 68:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
{
foreach($_POST["approve"] as $approve)
{
$sql = "UPDATE gastenboek SET status = '1' WHERE id='$approve'";
$resultaat=mysql_query($sql) ;
}
foreach($_POST["remove"] as $remove)
{
$sql = "UPDATE gastenboek SET verwijderd = '1' WHERE id='$remove'";
mysql_query($sql) ;
}
}
?>
{
foreach($_POST["approve"] as $approve)
{
$sql = "UPDATE gastenboek SET status = '1' WHERE id='$approve'";
$resultaat=mysql_query($sql) ;
}
foreach($_POST["remove"] as $remove)
{
$sql = "UPDATE gastenboek SET verwijderd = '1' WHERE id='$remove'";
mysql_query($sql) ;
}
}
?>
[Hier staat mijn 1e post in dit topic]
Zoals gezegd: $_POST['approve'] en $_POST['remove'] zullen geen array's zijn. Als je nou eens
uitvoert direct na de plaats waar je controleert of er een formulier verstuurd is, kun je zien hoe de gegevens in de $_POST array zitten. Dan kun je dus ook zien of de twee eerder genoemde variabelen wel array's zijn.
uitvoert direct na de plaats waar je controleert of er een formulier verstuurd is, kun je zien hoe de gegevens in de $_POST array zitten. Dan kun je dus ook zien of de twee eerder genoemde variabelen wel array's zijn.
Sorry jongens, maar het is me toch niet echt duidelijk. Wat moet ik veranderen en waarom?
Hoe ziet de (X)HTML van je formulier er uit?
'Roy:
Sorry jongens, maar het is me toch niet echt duidelijk. Wat moet ik veranderen en waarom?
rustig diep ademhalen, denk zen.
we gaan iets veranderen, we willen alleen maar zien of de array ($_post['iets']) die je probeerd te doorlopen (foreach) ook wel daadwerelijk een twee dimensionale array is. Waarschijnlijk is dit mamelijk niet zo en dus kan je foreach loop er niet niet mee....




