[PHP] undefined index probleem

Pagina: 1
Acties:
  • 332 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • bart1074
  • Registratie: September 2003
  • Laatst online: 27-03-2024
De volgende query died keer op keer:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if($_POST['aanmelden']){
            
                $gebruikersnaam = $_SESSION['login'];
                $agenda_id = $_GET['agenda_id'];  
                $sql2 = mysql_query("SELECT * FROM users WHERE gebruikersnaam = '".$gebruikersnaam."'");
                $list = mysql_fetch_object($sql2);
                $voornaam = $list->voornaam;
                $tussenvoegsel = $list->tussenvoegsel;
                $achternaam = $list->achternaam;
                $sql = "INSERT INTO aanmelden_agenda (agenda_id, voornaam, tussenvoegsel, achternaam) VALUES ('".$agenda_id."', '".$voornaam."', '".$tussenvoegsel."', '".$achternaam."') WHERE agenda_id='".$agenda_id."'";  
                mysql_query($sql) or die("toevoegen is mislukt, probeer het nog een keer.");
                echo "<table width=\"100%\" border=\"0\" align=\"center\"><tr><td><center>Je bent aangemeld voor dit agendapunt.</td></tr></table>";
                include("functions.php");
                refresh("index.php?p=admin", 1);
             }


Nou heb ik al een
PHP:
1
error_reporting(E_ALL);
toegepast en die geeft mij de volgende twee dingen terug
Notice: A session had already been started - ignoring session_start() in /storage/mijndomein/users/045763/public/sites/arsenal.bartcrum.com/config.php on line 2

Notice: Undefined index: aanmelden in /storage/mijndomein/users/045763/public/sites/arsenal.bartcrum.com/aanmelden.php on line 14
Nou denk ik dat die undefined index wel eens de boosdoener kan zijn dat de query niet functioneert en steeds died. Maar ik begrijp niet precies naar welk element het verwijst en wat ik eraan kan doen? Kan iemand mij helpen?

Alvast bedankt.

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Als eerste moet je eens kijken naar die session_start(), dit moet _voor_ alle eventuele output komen, dus het liefst als allereerste. want die voer je minstens 2x uit, dit mag slechts 1x!
Dan die "undefined index" je moet gewoon controleren of die bestaat met bijvoorbeeld isset

[ Voor 11% gewijzigd door Erkens op 02-01-2007 20:23 ]


Acties:
  • 0 Henk 'm!

  • software
  • Registratie: Mei 2003
  • Laatst online: 02-01 09:26
Van waar haal jij je
$gebruikersnaam = $_SESSION['login']; ?
Is je sessie dan al gestart ?

Vergeet ook niet iets tegen mysql injecties te doen.

Acties:
  • 0 Henk 'm!

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 17:53

DataGhost

iPL dev

Die undefined index geeft gewoon aan dat er geen 'aanmelden' in de array '$_POST' bestaat. Daarom wordt heel je query niet uitgevoerd. Als je verder nog problemen hebt zou ik je aanraden met mysql_error aan de slag te gaan.

google zoeken naar 'php undefined index'

En zoals hierboven min of meer gezegd wordt is het (volgens een logische opbouw van een 'aanmeld'-script) aannemelijk dat $_SESSION["login"] niet bestaat en dat daarom je query alsnog fout zal gaan zodra $_POST["aangemeld"] true is.

[ Voor 23% gewijzigd door DataGhost op 02-01-2007 20:28 ]


Acties:
  • 0 Henk 'm!

Anoniem: 103856

is de fout van lijn 14 ook echt in je code lijn 14? dan zit het probleem in je zelfgemaakte refresh() functie, laat die eens zien?

Acties:
  • 0 Henk 'm!

  • software
  • Registratie: Mei 2003
  • Laatst online: 02-01 09:26
Anoniem: 103856 schreef op dinsdag 02 januari 2007 @ 20:28:
is de fout van lijn 14 ook echt in je code lijn 14? dan zit het probleem in je zelfgemaakte refresh() functie, laat die eens zien?
Waarschijnlijk niet want op lijn 14 staat er niet van 'aanmelden'.

Notice: Undefined index: aanmelden in /storage/mijndomein/users/045763/public/sites/arsenal.bartcrum.com/aanmelden.php on line 14

Acties:
  • 0 Henk 'm!

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 17:53

DataGhost

iPL dev

Anoniem: 103856 schreef op dinsdag 02 januari 2007 @ 20:28:
is de fout van lijn 14 ook echt in je code lijn 14? dan zit het probleem in je zelfgemaakte refresh() functie, laat die eens zien?
Het is geen fout, het is een notice. Die kan je in vrijwel alle gevallen veilig negeren, hoewel het het beste is deze netjes weg te werken.

Acties:
  • 0 Henk 'm!

  • bart1074
  • Registratie: September 2003
  • Laatst online: 27-03-2024
software schreef op dinsdag 02 januari 2007 @ 20:22:
Van waar haal jij je
$gebruikersnaam = $_SESSION['login']; ?
Is je sessie dan al gestart ?

Vergeet ook niet iets tegen mysql injecties te doen.
Ja die $_SESSION is al aangemaakt tijdens het inloggen.

Acties:
  • 0 Henk 'm!

Anoniem: 103856

aha, ik weet het al. die if() is lijn 14. je controleert of $_POST['aanmelden'] bestaat, maar als die niet is ingevuld bestaat die natuurlijk niet en daar gaat hij de mist in. ik weet niet meer hoe ik dat vroeger oplosde (het is alweer 3 jaar geleden dat ik in php programmeerde), maar dit is je aanknopingspunt

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

DataGhost schreef op dinsdag 02 januari 2007 @ 20:31:
[...]

Het is geen fout, het is een notice. Die kan je in vrijwel alle gevallen veilig negeren, hoewel het het beste is deze netjes weg te werken.
Een notice is weldegelijk een foutmelding, alleen is deze minder "belangrijk" aangezien (zoals je al aangeeft) het vaak goed opgelost wordt, echter is het gewoon dom om het te negeren. Juist dit soort "kleine" dingen kunnen vaak leiden tot lastig terug te vinden bugs of zelfs security issues ;) Niet negeren dus.

Acties:
  • 0 Henk 'm!

  • bart1074
  • Registratie: September 2003
  • Laatst online: 27-03-2024
DataGhost schreef op dinsdag 02 januari 2007 @ 20:26:
Die undefined index geeft gewoon aan dat er geen 'aanmelden' in de array '$_POST' bestaat. Daarom wordt heel je query niet uitgevoerd. Als je verder nog problemen hebt zou ik je aanraden met mysql_error aan de slag te gaan.
Ik was tot dezelfde conclusie gekomen, alleen ben ik er nogal zeker van dat 'aanmelden' wel aanwezig is in de array $_POST. kijk zelf maar:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<FORM ACTION="" METHOD="post" ENCTYPE="multipart/form-data">
<TABLE align="center" cellpadding="0" cellspacing="0" ><br> 
<TR> 
        <TD><strong>Agendapunt:</strong></TD> 
        <TD><input name="agendapunt" type="text" id="agendapunt" size="65" maxlength="100" value="<? echo "$row->agendapunt"; ?>"></TD> 
</TR> 
<TR>
  <TD>&nbsp;</TD>
  <TD>&nbsp;</TD>
</TR>
<TR> 
        <TD><strong>Datum, tijd:</strong></TD> 
        <TD><input name="datum" id="datum" size="65" maxlength="100" value="<? echo "$row->datum, $row->tijd"; ?>" /></TD> 
</TR>
<tr>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
            </tr>
<TR> 
        <TD></TD>
        <TD><INPUT TYPE="submit" VALUE="aanmelden" NAME="aanmelden"></TD> 
</TR> 
</TABLE> 
</form>

Acties:
  • 0 Henk 'm!

Anoniem: 103856

Murderer schreef op dinsdag 02 januari 2007 @ 20:38:
[...]


Ik was tot dezelfde conclusie gekomen, alleen ben ik er nogal zeker van dat 'aanmelden' wel aanwezig is in de array $_POST. kijk zelf maar:

[... CODE ...]
Ik weet vrij zeker dat een submit-knop niet mee wordt meegedeeld aan php-scripts. probeer er eens een hidden input van te maken

[ Voor 48% gewijzigd door Anoniem: 103856 op 02-01-2007 20:40 . Reden: huge page ]


Acties:
  • 0 Henk 'm!

  • Japidoff
  • Registratie: November 2001
  • Laatst online: 20-06 03:56
helpt mij vaak uit de brand:

print_r($_post);

bovenaan je code, voor meer info kijk je maar ff op php.net

gang is alles


Acties:
  • 0 Henk 'm!

  • Pyrus
  • Registratie: November 2001
  • Laatst online: 22:03

Pyrus

Hardknock life

Anoniem: 103856 schreef op dinsdag 02 januari 2007 @ 20:39:
[...]


Ik weet vrij zeker dat een submit-knop niet mee wordt meegedeeld aan php-scripts. probeer er eens een hidden input van te maken
jawel, dat gebeurt wel. Tenminste in IE en Fx. Maak er zelf ook heel soms gebruik van :)

LinkedIn


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 23-06 11:51

Janoz

Moderator Devschuur®

!litemod

Murderer schreef op dinsdag 02 januari 2007 @ 20:38:
Ik was tot dezelfde conclusie gekomen, alleen ben ik er nogal zeker van dat 'aanmelden' wel aanwezig is in de array $_POST. kijk zelf maar:
Als je de melding 'undefined index' krijgt dan kun je zelf wel eigenwijs zijn, maar dan betekend dat gewoon dat er op die regel een element uit een array opgevraagd wordt die er gewoon niet in zit. Een veel gebruikt gezegde in de IT is niet voor niks 'assumptions are the mother of all fuckups' (en aangezien je engels misschien niet al te best is: Aannames zijn de moeder der fouten).

Kortom: Niet zomaar dingen aannemen, gewoon dubbelchecken en dingen 100% zeker weten (bv met print_r($POST) zoals hierboven ook al aangegeven is)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • bart1074
  • Registratie: September 2003
  • Laatst online: 27-03-2024
Janoz schreef op dinsdag 02 januari 2007 @ 21:12:
[...]

Als je de melding 'undefined index' krijgt dan kun je zelf wel eigenwijs zijn, maar dan betekend dat gewoon dat er op die regel een element uit een array opgevraagd wordt die er gewoon niet in zit. Een veel gebruikt gezegde in de IT is niet voor niks 'assumptions are the mother of all fuckups' (en aangezien je engels misschien niet al te best is: Aannames zijn de moeder der fouten).

Kortom: Niet zomaar dingen aannemen, gewoon dubbelchecken en dingen 100% zeker weten (bv met print_r($POST) zoals hierboven ook al aangegeven is)
door die print_r($_POST); even bovenaan mn code te zetten, kreeg ik dit bovenaan de pagina:
Array ( )
Notice: A session had already been started - ignoring session_start() in /storage/mijndomein/users/045763/public/sites/arsenal.bartcrum.com/config.php on line 2

Notice: Undefined index: aanmelden in /storage/mijndomein/users/045763/public/sites/arsenal.bartcrum.com/aanmelden.php on line 15

Acties:
  • 0 Henk 'm!

Anoniem: 26306

Lijkt me vrij duidelijk dat je $_POST array helemaal leeg is. Weet je zeker dat je method="post" gebruikt voor het formulier?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 23-06 11:51

Janoz

Moderator Devschuur®

!litemod

En wat voor conclusie kun je daar uit trekken? Inderdaad, dat er helemaal niks in je POST array zit en dat je formulier dus helemaal niet opgestuurd is.

Ik raad je aan om je iets zelfredzamer op te stellen. Als dit een 'bij het handje neem'-topic wordt gaat hij dicht.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • software
  • Registratie: Mei 2003
  • Laatst online: 02-01 09:26
Zo te zien wordt je $_POST niet gevult.
Je krijgt een lege array.
Betere manier om te controleren of dat iemand gepost heeft :

if($_SERVER['REQUEST_METHOD'] == 'POST'){

Acties:
  • 0 Henk 'm!

Anoniem: 103856

misschien ook te proberen: je gebruikt ENCTYPE="multipart/form-data", probeer het eens zonder?

Acties:
  • 0 Henk 'm!

  • bart1074
  • Registratie: September 2003
  • Laatst online: 27-03-2024
Janoz schreef op dinsdag 02 januari 2007 @ 21:57:
En wat voor conclusie kun je daar uit trekken? Inderdaad, dat er helemaal niks in je POST array zit en dat je formulier dus helemaal niet opgestuurd is.

Ik raad je aan om je iets zelfredzamer op te stellen. Als dit een 'bij het handje neem'-topic wordt gaat hij dicht.
Ik kende de functie niet, maar toch dacht ik ook al dat de array leeg is. En ik heb niet de bedoeling om er een 'bij het handje nemen-topic' van te maken, maar ik zie gewoon de fout niet in m'n form. Volgens mij wordt de post gewoon gevormd door de drie elementen van het form, namelijk 'agendapunt', 'datum, tijd' en 'aanmelden'. Dus ik snap niet wat er mis gaat.

Acties:
  • 0 Henk 'm!

  • Japidoff
  • Registratie: November 2001
  • Laatst online: 20-06 03:56
ik heb altijd

code:
1
action="<? echo $_SERVER['PHP_SELF']; ?>"


in mn form tag staan, ik weet niet of t optioneel is, maar ik mis de action bij jou!

edit:

ownee, action is leeg ("") bij jou!

[ Voor 14% gewijzigd door Japidoff op 02-01-2007 22:10 ]

gang is alles


Acties:
  • 0 Henk 'm!

  • _Sunnyboy_
  • Registratie: Januari 2003
  • Laatst online: 20:11

_Sunnyboy_

Mooooooooooooooooo!

Welke versie van PHP gebruik je eigenlijk? En wat is je php configuratie?

Afhankelijk van de versie en configuratie bestaat $_POST misschien helemaal niet.

Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life


Acties:
  • 0 Henk 'm!

  • bart1074
  • Registratie: September 2003
  • Laatst online: 27-03-2024
Japidoff schreef op dinsdag 02 januari 2007 @ 22:09:
ik heb altijd

code:
1
action="<? echo $_SERVER['PHP_SELF']; ?>"


in mn form tag staan, ik weet niet of t optioneel is, maar ik mis de action bij jou!

edit:

ownee, action is leeg ("") bij jou!
nee dat hoeft volgens mij alleen als de form op een andere pagina verwerkt moet worden, maar bij mij gebeurt dit op een en dezelfde pagina.

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Je query doet het sowieso niet gok ik.

INSERT INTO .... WHERE bla=...

lijkt me niet valide.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • bart1074
  • Registratie: September 2003
  • Laatst online: 27-03-2024
_Sunnyboy_ schreef op dinsdag 02 januari 2007 @ 22:12:
Welke versie van PHP gebruik je eigenlijk? En wat is je php configuratie?

Afhankelijk van de versie en configuratie bestaat $_POST misschien helemaal niet.
dit zijn de gegevens van mijn server:
Platform: Linux 2.6, Apache 2.0, MySQL 4.1, PHP 4.3, Perl 5.8.

Dus wat dat betreft niks aan het handje lijkt me. Ik begrijp nog steeds niet wat er mis gaat in de $_POST array. :?

Acties:
  • 0 Henk 'm!

  • marko77
  • Registratie: Februari 2002
  • Laatst online: 06-05 19:41
_Sunnyboy_ schreef op dinsdag 02 januari 2007 @ 22:12:
Welke versie van PHP gebruik je eigenlijk? En wat is je php configuratie?

Afhankelijk van de versie en configuratie bestaat $_POST misschien helemaal niet.
Ik denk ook dat je het in deze richting moet zoeken. Werkt deze methodiek die je hanteert wél bij andere forms? Of is dit de eerste?

Ik zou e.e.a. even debuggen en op het scherm outputten, b.v. de hele post op het scherm zetten etc. zoals hierboven ook al genoemd is.

Iets aannemen werkt idd niet bij dit soort problemen, zeker zijn van iets is altijd beter.

Mijn rig


Acties:
  • 0 Henk 'm!

  • Pyrus
  • Registratie: November 2001
  • Laatst online: 22:03

Pyrus

Hardknock life

Er zal idd iets mis zijn met je configuratie. Als ik je ding letterlijk kopieer en probeer op m'n eigen server werkt het prima.

<insert rant over niet netjes en dtd>
Daarnaast: wat doet een <br> in een <table>? (regel 2 in je voorbeeld)

LinkedIn


Acties:
  • 0 Henk 'm!

  • bart1074
  • Registratie: September 2003
  • Laatst online: 27-03-2024
Pyrus schreef op dinsdag 02 januari 2007 @ 22:46:
Er zal idd iets mis zijn met je configuratie. Als ik je ding letterlijk kopieer en probeer op m'n eigen server werkt het prima.

<insert rant over niet netjes en dtd>
Daarnaast: wat doet een <br> in een <table>? (regel 2 in je voorbeeld)
Ok ik ga even kijken op de website van m'n hoster www.mijndomein.nl, heb je een idee waar ik naar moet kijken?

Acties:
  • 0 Henk 'm!

  • software
  • Registratie: Mei 2003
  • Laatst online: 02-01 09:26
Wat je doet :
Maak een nieuwe bestand.
Zet daarin
PHP:
1
2
3
<?php
phpinfo();
?>

[ Voor 12% gewijzigd door software op 02-01-2007 22:55 ]


Acties:
  • 0 Henk 'm!

  • bart1074
  • Registratie: September 2003
  • Laatst online: 27-03-2024
software schreef op dinsdag 02 januari 2007 @ 22:54:
Wat je doet :
Maak een nieuwe bestand.
Zet daarin
PHP:
1
2
3
<?php
phpinfo();
?>
ok, gedaan. En dan krijg ik die hele lijst waar moet ik dan naar kijken? bij session?

Acties:
  • 0 Henk 'm!

  • Padschild
  • Registratie: September 2004
  • Laatst online: 28-11-2020
Wat is precies die refresh("index.php?p=admin", 1);?

Wat je eens moet doen is alle code binnen de if statement weghalen, en daar een simpele echo neerzetten zodat je weet of de if wordt uitgevoerd... Zodra dat werkt weer verder gaan.

Acties:
  • 0 Henk 'm!

  • bart1074
  • Registratie: September 2003
  • Laatst online: 27-03-2024
Nou ik ben er inmiddels vrij zeker van dat de fout te maken heeft met de $_POST die niet werkt op mijn server, want de hele array is leeg en alle andere forms op mijn server werken ook niet terwijl die op andere servers wel prima werken. Dus nu is het de vraag hoe ik dit kan verhelpen.

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Murderer schreef op woensdag 03 januari 2007 @ 00:29:
Nou ik ben er inmiddels vrij zeker van dat de fout te maken heeft met de $_POST die niet werkt op mijn server, want de hele array is leeg en alle andere forms op mijn server werken ook niet terwijl die op andere servers wel prima werken. Dus nu is het de vraag hoe ik dit kan verhelpen.
Beheer je die server zelf? roep de hulp van iemand die er meer verstand van heeft, want het is namelijk onverstandig om servers te beheren die op internet draaien waar je eigenlijk de kennis niet voor hebt, sorry. Is het niet je eigen server, schakel je hosting provider in voor hulp, waarschijnlijk moet er iets geactiveerd worden oid.

Maargoed, als je toch hier geholpen wilt worden is het niet onverstandig om met meer informatie te komen, geef bijvoorbeeld een linkje naar die phpinfo pagina, hierop staan namelijk diverse instellingen beschreven waarmee je kan zien waarom iets wel of niet zou kunnen werken.

Acties:
  • 0 Henk 'm!

  • WormLord
  • Registratie: September 2003
  • Laatst online: 10-05 11:00

WormLord

Devver

Misschien een stomme vraag van mij, maar de fout treed ook daadwerkelijk op bij de POST van de pagina, en niet bij de GET? Dus pas nadat je de pagina hebt opgehaald en op de submit button klikt?

Acties:
  • 0 Henk 'm!

Anoniem: 103856

maak gewoon eerst dat forum eens wat simpeler. al die encdata enzo, niet doen. action netjes invullen. niet raar gaan lopen doen met informatie in een submit knop. geen tabel, gewoon wat lelijke velden onder elkaar (hint: <br />)

wat gebeurt er dan?

second try: als je firefox gebruikt is er zoiets als de "live http headers" extension, daar kun je al het request verkeer mee aftappen. staat daar je POST gedoe in?
Pagina: 1