[php] form verwerken met code uit db

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo, ik ben nu een site aan het maken, waarbij ik probeer maar één php-pagina te gebruiken: index.php

Hierbij haal ik wel code uit database (genaamd 'querion').

In deze db zit een table genaamd 'code' waarin dus alle code ligt opgeslagen, wanneer bijvoorbeeld de pagina 'register' moet worden geopend, wordt er verwezen naar index.php?register en haalt hij de code hiervoor uit de db.

Nu wil ik dat wanneer iemand zich registreert, alles ook afgehandeld wordt met code uit database, maar schijnbaar lukt dit niet, want ik krijg:

code:
1
2
HTTP 405 - Resource not allowed
Internet Information Services


De PHP-code uit index.php:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?
  include("inc/begin.php");

  mysql_select_db("querion", $link);

  $html = true;
  $php = false;
  $verder = 1;
  
  @$content = $_SERVER['QUERY_STRING'];
  if (!$content)
    $content = 'index';

  $result = mysql_query("SELECT code FROM code WHERE content = '".$content."' AND type = 'php';");

  $code = mysql_fetch_array($result, MYSQL_NUM);
  $html = false;
  $php = true;

  if (!is_array($code)){
    $result = mysql_query("SELECT code FROM code WHERE content = '".$content."' AND type = 'html';");
    $code = mysql_fetch_array($result, MYSQL_NUM);
    $html = true;
    $php = false;
  }

  if (!is_array($code)){
    $content = 'index';
    $result = mysql_query("SELECT code FROM code WHERE content = '".$content."' AND type = 'php';");
    $code = mysql_fetch_array($result, MYSQL_NUM);
    $html = false;
    $php = true;
  }

  if (!is_array($code)){
    $result = mysql_query("SELECT code FROM code WHERE content = '".$content."' AND type = 'html';");
    $code = mysql_fetch_array($result, MYSQL_NUM);
    $html = true;
    $php = false;
  }

$type = 'html';

if ($php)
  eval($code[0]);

elseif ($html)
  echo $code[0];

if ($verder == 1 && $php){
  $result = mysql_query("SELECT code FROM code WHERE content = '".$content."' AND type = '".$type."'") or die("Registration completed");
  $code = mysql_fetch_array($result, MYSQL_NUM);
  echo $code[0];
}
?>

</html>


De phpcode uit de database voor de register-pagina:
PHP:
1
2
3
4
if ($_SERVER['REQUEST_METHOD'] != 'POST')
 $content = 'register';
else
 $content = 'doregister';


Wanneer het formulier gesubmit wordt, verwijst hij naar 'doregister', dit is een gewone HTML-pagina waarop gezegd wordt: 'Bedankt voor registreren'

Maar hoe zorg ik er nu voor dat mijn form gewoon kan worden verwerkt?

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:06

gorgi_19

Kruimeltjes zijn weer op :9

Je mag niet posten naar een statische HTML-pagina. :) Dat veroorzaakt iig de 405-pagina.

Kijk ook eens hier

[ Voor 36% gewijzigd door gorgi_19 op 07-03-2003 21:54 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • cybermans
  • Registratie: Maart 2001
  • Laatst online: 17-09 09:56
wat d8 je om na de else gewoon de zooi te zetten die die moet uitvoeren?

Strava | Runkeeper | Endomondo (mijn leikr uploads)


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nee, dit werkt helaas ook niet, ik heb nu de php code van 'register' als volgt aangepast:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
if ($_SERVER['REQUEST_METHOD'] != 'POST')
 $content = 'register';
else{
 $verder = 0;
 $mysql_select_db("querion");
 $mysql_query("INSERT INTO users (username, password, nickname, emailaddress, website, ip, hostname, ".
     "user_agent, resolution, reg_date) VALUES ('".
 $_POST['user']."', '".$_POST['password']."', '".$_POST['nickname']."', '".$_POST['email'].
 "', '".$_POST['website']."', '".$_SERVER['REMOTE_ADDR']."', '".gethostbyaddr($_SERVER['REMOTE_ADDR']).
 "', '".$_SERVER['HTTP_USER_AGENT']."', '".$_POST['res']."', NOW()");
}
?>

Als de code fout was geweest, zou ik een andere foutmelding hebben gekregen, maar alles wordt nu dus direct afgehandeld zonder dat er verder nog wat gebeurt, want '$verder = 0' en ik krijg nog steeds dezelfde foutmelding.

edit:
Trouwens, gorgi_19 op de pagina waar jij het over had gaat het over 'Method Not Allowed' en ik heb 'Resource Not Allowed'. Verder gebruik ik een 'normale' form zonder plaatjes of wat dan ook.

[ Voor 31% gewijzigd door Verwijderd op 07-03-2003 22:14 ]


Acties:
  • 0 Henk 'm!

  • cybermans
  • Registratie: Maart 2001
  • Laatst online: 17-09 09:56
ff een tip haal die enkele quotes uit de $_POST[] .
weet niet wat die now() doet maar date("Y-m-d h:i:s") doet het geloof ik ook wel als het een datetime veld is.

enne nog iets $_select_db en $mysql_query het zijn functies geen vars dus weg met die $

Strava | Runkeeper | Endomondo (mijn leikr uploads)


Acties:
  • 0 Henk 'm!

  • Boomerang
  • Registratie: November 2000
  • Niet online
Ik heb ook maar es ff gezocht, en na 2 minuten, jawel.... :
405 happens when you try to POST to static content.

/admin/ is considered static content by IIS.

/admin/index.php is considered dynamic content if .php extension is
scriptmapped (which it is).
bron: klik!

Conclusie: je probeert naar een niet-statische pagina variabelen te posten.

Verder begrijp ik ook niet wat het voordeel is van je php code uit een MySQL database halen. Als je het gewoon binnen je PHP file houdt is dat nog beter voor de performance ook.

[edit]
Nog een tip: gebruik geen eval in je code, het maakt je code (waarschijnlijk) een stuk minder veilig. Zie ook hier

[ Voor 38% gewijzigd door Boomerang op 07-03-2003 23:10 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb nu veel meer werkende!

Ik kwam er na veel speurwerk achter via google ( op deze pagina ) dat de action van mijn form moest verwijzen naar 'index.php?register' en niet naar '?register'! Het had dus wel wat te maken met statische/dynamische pagina's ja.

Nu heb ik wel nog wat problemen met mysql, ik heb de volgende simpele query om te testen:

PHP:
1
2
3
 $user = $_POST['user'];
 $result = mysql_query("INSERT INTO users (username) VALUES ('".
     strval($user)."');") or die ("ook nie");

Alleen werkt dit niet. Ik heb $user geoutput en deze variabele blijkt gewoon 'gevuld' te zijn, dat is het probleem dus niet. Deze code werkt weer wél:
PHP:
1
2
3
$user = 'test';
$result = mysql_query("INSERT INTO users (username) VALUES ('".
     strval($user)."');") or die ("ook nie");

Vreemd, vind ik. Iemand raad? :)

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:06

gorgi_19

Kruimeltjes zijn weer op :9

Output $result eens op je scherm.
En zet ipv "ook nie" de mysql-error eens neer.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb $result geoutput, maar dit geeft niets weer (er gaat natuurlijk iets fout, dus kan ik $result niet outputten). En ik weet niet hoe ik een error moet weergeven, hoe doe ik dit? :)

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:06

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 07 maart 2003 @ 23:48:
Ik heb $result geoutput, maar dit geeft niets weer (er gaat natuurlijk iets fout, dus kan ik $result niet outputten). En ik weet niet hoe ik een error moet weergeven, hoe doe ik dit? :)
Ik had eik gehoopt dat je deze vraag neit zou stellen, omdat ik niet zo thuis ben in PHP / MySQL. Wel staat in de FAQ een klein stukje hierover, met voorbeeldcode.
:)
http://gathering.tweakers...messages/392390/#phpdebug

[ Voor 17% gewijzigd door gorgi_19 op 07-03-2003 23:55 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • cybermans
  • Registratie: Maart 2001
  • Laatst online: 17-09 09:56
PHP:
1
2
3
4
<?
$result = mysql_query("INSERT INTO users (username) VALUES ('". 
     $_POST[user]."')") or die ("foutmelding: ".mysql_error());
?>

[ Voor 45% gewijzigd door cybermans op 07-03-2003 23:57 ]

Strava | Runkeeper | Endomondo (mijn leikr uploads)


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ehm.... het lijkt erop dat nu werkelijk alles werkt! >:)

Ik zag in de foutmelding iets met dubbele waarden (ik geloof dubbele entry of key). Ik denk dat dit kwam omdat ik aan het testen was met het form, en daardoor steeds op F5 drukte waardoor hij steeds dezelfde waarde verstuurde, waardoor ik dus die foutmelding kreeg 8)7

Hij doet het nu dus, bedankt voor alle hulp! :)

Acties:
  • 0 Henk 'm!

  • -Tibo-
  • Registratie: Januari 2002
  • Niet online

-Tibo-

ow = teh

Los van jouw probleem, kijk eens wat er gebeurt als ik

index.php?';DELETE FROM code;'SELECT code FROM code WHERE content='

in zou vullen? Denk er even bij dat quotes worden omgezet. Dit zou lijden tot de totale vernietiging van je code ;)

[ Voor 5% gewijzigd door -Tibo- op 08-03-2003 00:03 ]


Acties:
  • 0 Henk 'm!

  • martinvw
  • Registratie: Februari 2002
  • Laatst online: 20-08 20:35
cybermans schreef op 07 March 2003 @ 22:45:
ff een tip haal die enkele quotes uit de $_POST[] .
weet niet wat die now() doet maar date("Y-m-d h:i:s") doet het geloof ik ook wel als het een datetime veld is.
...
Wat doe je nou NOW() is sql dus waarom zou je door php de datum laten generen als sql dat zelf kan :?
Pagina: 1