login  Naam:   Wachtwoord: 
Registreer je!
 Forum

parser stopt onverwachts

Offline cracker - 12/09/2005 00:54 (laatste wijziging 14/09/2005 19:20)
Avatar van crackerOnbekend 'lo.
't is misschien wel laat maar ik denk niet dat dit veel te maken zal hebben met de volgende fout.
Dus:
Ik ben bezig met mijn eigen CP/ACP en wil opvragen uit de database of en ook hoeveel nieuwe PM's er zijn.
Dit doe ik 2 keer maar ik begin met het eerste:
linksboven wordt de functie <?php unreadmail($username); ?> uitgevoerd. (admin.php)
Voor, tijdens of na stopt de parser en geeft hij de gebruiker slechts de code totaan die functie weer.
Dit resulteert uiteraard in een W3C fout en de hele site die niet werkt.
Hier is de code van de functie unreadmail() :
  1. <?php
  2. function unreadmail($ontvanger){
  3. $ontvanger = strip_tags_sql(strip_tags(trim($ontvanger)));
  4. $db = mysql_connect("localhost","ddbs2_webadmin","PASSWORD") or die(mysql_error());
  5. mysql_select_db("ddbs2_server", $db) or die(mysql_error());
  6. $aantal = mysql_query("SELECT * FROM pm WHERE map='inbox' AND gelezen='0' AND ontvanger='".$ontvanger."'") or die(mysql_error());
  7. $rows = (int) mysql_num_rows($aantal) or die(mysql_error());
  8. if($rows == 1 && $rows != null && $rows != 0){
  9. echo("<font color=\"#ff0000\">".$rows." nieuw bericht</font>");
  10. }elseif($rows > 1 && $rows != null && $rows != 0){
  11. echo("<font color=\"#ff0000\">".$rows." nieuwe berichten</font>");
  12. }else{
  13. //Geen nieuwe berichten
  14. }
  15. }
  16. ?>

Bovenstaande functie staat in functies.php

In admin.php staat bovenaan require("functies.php");
Hierbij geen enkel probleem.

Of er nu PM's in de inbox zitten of niet, hierbij stopt de parser altijd 

tweede deel:
Ook kan je alle PM's opvragen. Dit gebeurt in een deel van pm.php.
code pm.php:
  1. <?php
  2. $sub = $_GET['sub'];
  3. if(isset($sub) && strlen($sub) >= 2){
  4. switch($sub){
  5. case "outbox":
  6. display_outbox($username);
  7. break;
  8. case "deleted":
  9. display_recyclebin($username);
  10. break;
  11. default:
  12. display_inbox($username);
  13. }
  14. }else{
  15. display_inbox($username);
  16. }
  17. ?>

de functies display_outbox() en display_recyclebin() zijn nog niet gedefinieëerd en geven dus ook geen fouten.
Echter bij display_inbox() werkt het script enkel en alleen Als er PM's zijn voor de gebruiker.
Als de tabel pm geen rijen bevat met als ontvanger de gebruikersnaam van de huidige persoon stopt de parser voor het uitvoeren van het script. (weer)

Er is geen parse error of niets.
Geen mySQL error...

Dit is display_inbox() (zit ook in functies.php) :
  1. <?php
  2. function display_inbox($ontvanger){
  3. global $MSGnopminbox;
  4. global $taal;
  5. $prefix = "admin.php?section=pm&amp;sub=detail&amp;pmid=";
  6. $ontvanger = strip_tags_sql(strip_tags(trim($ontvanger)));
  7.  
  8. $db = mysql_connect("localhost","ddbs2_webadmin","PASSWORD") or die(mysql_error());
  9. mysql_select_db("ddbs2_server", $db) or die(mysql_error());
  10. $aantal = mysql_query("SELECT * FROM pm WHERE map='inbox' AND ontvanger='".$ontvanger."'") or die(mysql_error());
  11. $rows = (int) mysql_num_rows($aantal) or die(mysql_error());
  12. if($rows > 0 && $rows != null){
  13. echo("<table class=\"pmlist\" cellspacing=\"0\"><tr><th class=\"pmgelezen\">gelezen</th><th class=\"pmzender\">zender</th><th class=\"pmonderwerp\">onderwerp</th><th class=\"pmtijd\">tijd en datum</th></tr>");
  14. $ontvanger = strip_tags_sql(strip_tags(trim($ontvanger)));
  15. $resultb = mysql_query("SELECT ID, zender, onderwerp, gelezen, tijd FROM pm WHERE map='inbox' AND ontvanger='".$ontvanger."' ORDER BY gelezen, tijd DESC LIMIT 0,20")or die(mysql_error());
  16. while($data = mysql_fetch_assoc($resultb)){
  17. if($data['gelezen'] == 1){
  18. $data['gelezen'] = "<img src=\"../images/notepad%20blue.png\" alt=\"YES\" title=\"Dit bericht is al gelezen\" border=\"0\" width=\"20\" height=\"20\">";
  19. }else{
  20. $data['gelezen'] = "<img src=\"../images/notepad%20red.png\" alt=\"NO\" title=\"Dit bericht is nog niet gelezen\" border=\"0\" width=\"20\" height=\"20\">";
  21. }
  22. echo("\n<tr><td><a href=\"". $prefix . $data['ID'] ."\">".$data['gelezen']."</a></td><td>".$data['zender']."</td><td>".$data['onderwerp']."</td><td>".date("d-m-Y G:i", $data['tijd'])."</td></tr>");
  23. }
  24. echo("\n</table>");
  25. }else{
  26. //Geen berichten in de inbox
  27. echo($MSGnopminbox[$taal]);
  28. }
  29. }
  30. ?>

Nogmaals: enkel als er geen berichten zijn zit ik in de problemen met het tweede script. 

Ik weet echt niet meer waar de fout zit.
Ik zit nu al drie dagen naar mijn scherm te kijken en telkens dingen weg te commentarieëren maar helaas... 

Hopelijk zijn er andere (betere) pro's die mij een eindje vooruit kunnen helpen.
Daarvoor is Sitemasters er 

Cracker.

10 antwoorden

Gesponsorde links
Offline marten - 12/09/2005 23:10
Avatar van marten Beheerder ik zal het morgen eens aan mijn leraar laten zien Cracker
Die heeft al wat jaren ervaring in php
Offline Thomas - 13/09/2005 00:11
Avatar van Thomas Moderator Hehe.
Als ik jouw parser was zou ik ook geen zin hebben in die code.
</sarcasme>

\:o/
Offline cracker - 14/09/2005 07:23
Avatar van cracker Onbekend marten: al resultaat ?
FagorN: waarom? 
Offline Thomas - 14/09/2005 07:42
Avatar van Thomas Moderator - heb je al gekeken naar gereserveerde woorden (in MySQL) in je kolomnamen ?
- mysql_num_rows retourneert altijd een integer, dus een expliciete typecast lijkt mij niet nodig
- het if-statement om te controleren wat voor waarde $rows heeft kan echt stukken eenvoudiger - je hoeft alleen maar te controleren of deze 1 is, of niet
- in het switch-statement in pm.php staat na de default-variant geen break
- $prefix in display_inbox() begint met admin.php&amp;, het lijkt mij dat hier een "?" moet staan in plaats van "&amp;"
- waarom maak je overal opnieuw een connectie met je database? dit hoef je in principe maar één keer te doen
- heb je al geprobeerd de queries eens ergens anders gewoon in te voeren met een vaste waarde van $ontvanger? Is $ontvanger een string ?! Ik zou hier toch echt een ontvanger-id (dus een nummer) gebruiken, en geen naam o.i.d.

Maak eerst je code eens schoon, en ga dan stapsgewijs wat zaken uitproberen. Je komt er vanzelf uit als je dingen systematisch aanpakt.
Offline marten - 14/09/2005 10:45
Avatar van marten Beheerder Heb het aan mijn leraar laten zien....
Die zag ook geen fouten in de code en zei dat het nog aan bijvoorbeeld de server configuratie liggen.
Mss kan je het script online zetten zodat ik hem kan testen? Samen met de tabellen natuurlijk 
Offline cracker - 14/09/2005 18:51
Avatar van cracker Onbekend
Citaat:
- in het switch-statement in pm.php staat na de default-variant geen break

niet nodig hier.
Er kan dan ook maar 1 default zijn ae 

Citaat:
- $prefix in display_inbox() begint met admin.php&amp;, het lijkt mij dat hier een "?" moet staan in plaats van "&amp;"

=> Niet HTML 4.01 Valid dan ;)
Offline Maarten - 14/09/2005 18:53
Avatar van Maarten Erelid UUh..

bij default moet gewoon geen break staan, punt uit, dus het is idd niet nodig, dus haal het dan ook weg.

En eenpagina.php?iets=dom is perfect valid, jij hebt staat eenpagina.php&iets=dom
Offline cracker - 14/09/2005 19:13 (laatste wijziging 14/09/2005 20:07)
Avatar van cracker Onbekend
Citaat:
dus haal het dan ook weg.

Er staat er geen.

(Quote FagorN)
Citaat:
- $prefix in display_inbox() begint met admin.php&amp;, het lijkt mij dat hier een "?" moet staan in plaats van "&amp;"

&amp; geeft geen ? maar wel een & dus ik ben correct.

Murfy: Lees eens wat ik schreef voor ge naar dat van FagorN kijkt.

edit: w00pz verkeerd gekopieerd 
die fout had ik al lang verwijderd.
Sorry guys... zat te kijken naar de code in AceHTML, niet op deze pagina: daarom dat ik geen fout zag.

In ieder geval, De parser blijft stoppen zonder reden.
[u]
EDIT:[/u]
Ik had een pagina geïnclude en daarbij stopte de parser ook.
Toen ik die pagina rechtstreeks opvroeg gaf de parser een parse error.
Dus:
Ik veronderstel dat daar ergens ook een parse error moet zitten.
Weliswaar niet in functies.php want dan zou de parser stoppen bij iedere pagina.
Offline Maarten - 14/09/2005 20:07
Avatar van Maarten Erelid
Citaat:
Murfy: Lees eens wat ik schreef voor ge naar dat van FagorN kijkt.


Ten eerste ist FangorN en ten tweede heb ik het ook gelezen, jij zei dat blabla.php?iets=iets niet HTML valid is..
Offline cracker - 14/09/2005 20:10
Avatar van cracker Onbekend FangorN WH00ps

2nd: ik bedoelde ?moo=blaagh&bleh=fish
&amp;

Dat bedoelde ik.
Indien fout uitgelegd etc: sorry 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.216s