[PHP/MySQL] Niet alle POST-data wordt verwerkt

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig met het ontwikkelen van een site á la Audioscrobbler, maar dan in het Nederlands en voor een stuk kleiner publiek. Door middel van een plugin worden waardes gepost naar een script. Omdat ik al dagen aan het kloten ben met dezelfde fout besloot ik hier om hulp te vragen.

De POST-data ziet er zo uit:
code:
1
2
3
4
Artist1
Title1
Album1
(en nog meer waarden, waar ik nu nog geen gebruik van maak)
Wanneer er meerdere nummers tegelijk gepost worden verandert dit in Artist2, Title2, etc.

Het probleem is: Niet alle POST-data wordt verwerkt. Hoewel ze voldoen aan de verplichte eisen (artiestnaam en nummer-titel) worden ze niet verwerkt. Ik snap niet waarom.

Mijn excuses voor het uitgebreide script, maar de fout zou eigenlijk in het hele script kunnen zitten. Ik vraag niet om een optimalisatie van het script (het is nog volop in ontwikkeling en ik weet dat een hoop dingen beter/makkelijker kunnen), maar hulp om de fout te ontdekken.

De URL die gebruikt wordt om data te posten naar de server is:
http://domein/index.php?i=[unique_id], of http://domein/?i=[unique_id]

index.php
PHP:
1
2
3
4
if(!empty($_GET['i'])) {
    if(empty($_POST['Artist1']) || empty($_POST['Title1'])) die();
    include('proc/incoming.php');
}


proc/incoming.php online te bekijken

Het script is een beetje vervuild door alle queries die loggen wat er gebeurt en waar het fout gaat, maar dat leek me wel een makkelijke manier om er achter te komen waar het nou precies mis gaat. De resultaten van alle logs zijn hier te vinden. Alle groengele resultaten zijn de gegevens die binnenkomen. Als precies erboven dezelfde waardes in het groen staan, is het succesvol in de database gezet. Bij een rood resultaat is er iets fout gegaan (maar die zie ik verdacht weinig, terwijl er toch een hoop mis gaat).

Elke hulp is welkom!

[ Voor 162% gewijzigd door Verwijderd op 17-03-2005 00:39 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Wat bedoel je met "wordt niet verwerkt"? Komt de data überhaupt niet aan in je script? Of is dit wel het geval, en doet je script niet wat je ervan verwachtte?

Zet eens dit bovenaan je script:
PHP:
1
print_r($_POST);

Als hier wel alle gegevens in staan die je verwacht, dan heb je een foutje in je script. Dan is het simpelweg een kwestie van goed debuggen. Echo cruciale waarden, en echo debuggegevens in elke aftakking (if/else, funtie-aanroep, enz), en kijk of daar misschien wat fout gaat. Zo op het eerste gezicht zie ik niet echt wat er fout gaat, maar ik heb dan ook geen zin om 157 regels te gaan debuggen, zeker niet als die 157 regels niet eens netjes ingesprongen zijn. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De data komt wél aan, maar wordt niet verwerkt (zie onderste stukje van de OP). print_r is een beetje moeilijk, aangezien het script wordt gerund vanuit een plugin voor winamp. Er is niks visueels, daarom sla ik alles op in de database.

Ik zal het even met nepwaarden proberen en kijken wat er uit komt.

Om het met nette inspringing te zien, klik hier

[ Voor 15% gewijzigd door Verwijderd op 16-03-2005 23:50 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op woensdag 16 maart 2005 @ 23:50:
De data komt wél aan, maar wordt niet verwerkt (zie onderste stukje van de OP). print_r is een beetje moeilijk, aangezien het script wordt gerund vanuit een plugin voor winamp. Er is niks visueels, daarom sla ik alles op in de database.

Ik zal het even met nepwaarden proberen en kijken wat er uit komt.

Om het met nette inspringing te zien, klik hier
Je kan ook beter je script niet vanuit die plugin testen, maar eerst zelf een formuliertje maken op het web om te testen. Op die manier kun je ook zien wat er gebeurt, en fatsoenlijk debuggen. Als het eenmaal werkt kun je dat formulier uiteraard weer weghalen. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dat heb ik in eerste instantie ook gedaan, en toen leek alles goed. Maar nu lukt het op een of andere manier toch niet.

Maar ik zal het nog eens met een formpje proberen, bedankt voor de tips :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hij stopt op deze lijn:
PHP:
1
   $art_info = mysql_fetch_assoc(mysql_query("SELECT * FROM artiest WHERE artiest_naam LIKE '".$art."' LIMIT 1")) or die(mysql_error());


Dit werkt ook niet:
PHP:
1
2
$art_query = mysql_query("SELECT * FROM artiest WHERE artiest_naam LIKE '".$art."' LIMIT 1") or die(mysql_error());
$art_info = mysql_fetch_assoc($art_query) or die(mysql_error());


Maar dit wel:
PHP:
1
2
$art_query = mysql_query("SELECT * FROM artiest WHERE artiest_naam LIKE '".$art."' LIMIT 1") or die(mysql_error());
$art_info = mysql_fetch_assoc($art_query);


Bij een mysql_fetch_assoc mag dus geen "or die(mysql_error())" zitten? Weer wat geleerd. Maar waarom kreeg ik geen foutmelding? Wel raar, want volgens mij heb ik dit vroeger ook wel eens zo gebruikt, maar toen werkte het wel :?

Acties:
  • 0 Henk 'm!

  • DizzyWeb
  • Registratie: Februari 2001
  • Laatst online: 05-09 14:30

DizzyWeb

Ondertiteld

Dan zal er toch iets mis zijn met die query. Die die() wordt alleen uitgevoerd als mysql_fetch_assoc() een fout geeft.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Bij mijn weten mag dat gewoon hoor. :o

Maar het heeft natuurlijk geen nut om op een SQL-error te controleren als je dat bij de query al gedaan hebt. Je SQL is dan al opgehaald, dus is er ook geen error.

Overigens doet die LIKE niet veel als je het mij vraagt. Je hebt geen wildcard karakter (%) gebruikt, dus heeft die LIKE hetzelfde effect als een normale vergelijking met een = operator.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
DizzyWeb schreef op donderdag 17 maart 2005 @ 00:24:
Dan zal er toch iets mis zijn met die query. Die die() wordt alleen uitgevoerd als mysql_fetch_assoc() een fout geeft.
Het vreemde is dat ie het nu wel doet en alles ook verwerkt wordt :) (behalve de albums, maar dat zal niet zo'n probleem meer zijn nu)

[ Voor 48% gewijzigd door Verwijderd op 17-03-2005 00:27 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
-NMe- schreef op donderdag 17 maart 2005 @ 00:26:

Overigens doet die LIKE niet veel als je het mij vraagt. Je hebt geen wildcard karakter (%) gebruikt, dus heeft die LIKE hetzelfde effect als een normale vergelijking met een = operator.
Een gewone = operator is niet hoofdlettergevoelig? :?

ik voel me newbie

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Verwijderd schreef op donderdag 17 maart 2005 @ 00:26:
[...]

Het vreemde is dat ie het nu wel doet en alles ook verwerkt wordt :) (behalve de albums, maar dat zal niet zo'n probleem meer zijn nu)
Dat is helemaal niet vreemd. die() wordt namelijk alleen uitgevoerd als de uitkomst van mysql_fetch_assoc() false is, en dat is zo als er geen verdere records in de resultset zitten.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op donderdag 17 maart 2005 @ 00:27:
Een gewone = operator is niet hoofdlettergevoelig? :?

ik voel me newbie
Een gewone = operator is net zo hoofdlettergevoelig als LIKE, voor zover ik weet. :P

code:
1
SELECT * FROM artiest WHERE LCASE(artiest_naam) = '".strtolower($art)."' LIMIT 1

Zo controleer je hoofdletter-ongevoelige dingen. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1