/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
php post_id=1 problemer
Fra : Lars


Dato : 29-08-07 17:22

I formen:
<form action=ret.php?post_id=1 method=POST>
id:<input type=hidden name=id>
<input type=\"text\" name=\"post_id\" value=\"$id\" />
<input type=submit name=Send value=Opdater></form>

...fremkaldes post 1 med: $query="SELECT * FROM tabel where
id=".$_GET["post_id"];

Står der: action=ret.php og jeg i indput-feltet skriver 1, får jeg
nedenstående fejl:
mysql_fetch_array(): supplied argument is not a valid MySQL result resource
in /ret.php on line 16

(ret.php)
14 $query="SELECT * FROM tabel where id=".$_GET["post_id"];
15 $result=mysql_query($query);
16 while($num = mysql_fetch_array($result))

Jeg vil imidlertid gerne fremkalde den post jeg vil rette i, ved at skrive
id-nr i indput feltet. Hvad gør jeg forkert her?
Mvh. Lars Andersen



 
 
Philip Nunnegaard (29-08-2007)
Kommentar
Fra : Philip Nunnegaard


Dato : 29-08-07 19:35

> ..fremkaldes post 1 med: $query="SELECT * FROM tabel where
> id=".$_GET["post_id"];

Ret $_GET til $_POST

$_GET henter værdierne fra adresselinien, mens $_POST henter det, der
indtastes i en formular - dog undtaget når form method er sat til "get" i
stedet for "post".


Dan Storm (29-08-2007)
Kommentar
Fra : Dan Storm


Dato : 29-08-07 19:45

Philip Nunnegaard skrev:
>> ..fremkaldes post 1 med: $query="SELECT * FROM tabel where
>> id=".$_GET["post_id"];
>
> Ret $_GET til $_POST
>
> $_GET henter værdierne fra adresselinien, mens $_POST henter det, der
> indtastes i en formular - dog undtaget når form method er sat til "get"
> i stedet for "post".

Men hvis form elementets action sættes til ret.php?post_id=1 vil
$_GET["post_id"] stadig kunne hentes på modtagersiden uanset hvilken
method der bliver brugt.


--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Philip Nunnegaard (29-08-2007)
Kommentar
Fra : Philip Nunnegaard


Dato : 29-08-07 20:09

> Men hvis form elementets action sættes til ret.php?post_id=1 vil
> $_GET["post_id"] stadig kunne hentes på modtagersiden uanset hvilken
> method der bliver brugt.

Jep! Havde lige overset form-taggen

<form action=ret.php?post_id=1 method=POST>
skal selvfølgelig ændres til:
<form action="ret.php" method="post">

Selvfølgelig samtidig med, at $_GET rettes til $_POST


Lars (29-08-2007)
Kommentar
Fra : Lars


Dato : 29-08-07 22:29

>"Philip Nunnegaard" skrev Ret $_GET til $_POST

TAk for hjælp, - nu virker det.
Herunder de komplette files.

Et, i denne omgang, sidste spørgsmål:

For at update i databasen, - er det så som her:
UPDATE tabel SET $Fornavn=$_POST['Fornavn'], etc... WHERE $id=$_POST['id'];
Mvh. Lars Andersen

-- ret_form.php --
<?php

include 'sql_config.php';
include 'sql_opendb.php';

$query="SELECT * FROM tabel where id=1";

$result=mysql_query($query);
while($num = mysql_fetch_array($result))
{
$id=$num["id"];
echo "<form action=ret.php method=POST>";
echo "<input type=hidden name=id>";
echo "<input type=\"text\" name=\"post_id\" value=\"$id\" />";
echo "<input type=submit name=Send value=Opdater></form>";
}
?>

-- ret.php --
<?php
include 'sql_config.php';
include 'sql_opendb.php';

$query="SELECT * FROM tabel where id=".$_POST["post_id"];
$result=mysql_query($query);
while($num = mysql_fetch_array($result))

{
$id=$num["id"];
$Fornavn=$num["Fornavn"];
$Mellemnavn=$num["Mellemnavn"];
$Efternavn=$num["Efternavn"];
$Mail=$num["Mail"];

echo "<form action=ret_exe.php method=post>";
echo "id:<input type=\"hidden\" name=\"post_id\" value=\"$id\" /><br>";
echo "Fornavn:<input type=\"text\" name=\"fornavn\" value=\"$Fornavn\"
/><br>";
echo "Mellemnavn:<input type=\"text\" name=\"Mellemnavn\"
value=\"$Mellemnavn\" /><br>";
echo "Efternavn:<input type=\"text\" name=\"Efternavn\" value=\"$Efternavn\"
/><br>";
echo "Mail:<input type=\"text\" name=\"Mail\" value=\"$Mail\" /><br>";
echo "<input type=submit name=Send value=Opdater></form>";
}
?>



Dan Storm (29-08-2007)
Kommentar
Fra : Dan Storm


Dato : 29-08-07 23:41

Lars skrev:
> For at update i databasen, - er det så som her:
> UPDATE tabel SET $Fornavn=$_POST['Fornavn'], etc... WHERE $id=$_POST['id'];

Jaeh, bare husk ikke at sætte $ præfix på dine tabel felter.

$sql = "UPDATE tabel SET fornavn='".$_POST["fornavn"]."',
mellemnavn='".$_POST["mellemnavn"]."',
efternavn='".$_POST["efternavn"]."', email='".$_POST["email"]."' WHERE
id='".$_POST["post_id."]'";

--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Dan Storm (29-08-2007)
Kommentar
Fra : Dan Storm


Dato : 29-08-07 19:44

Lars skrev:
> Står der: action=ret.php og jeg i indput-feltet skriver 1, får jeg
> nedenstående fejl:

Det er fordi dit sql kald bygges ud fra $_GET["post_id"], efter dit eget
udsagn.
Så når der kun står ret.php og ikke ret.php?post_id=1 bliver din sql
streng kun til
SELECT * FROM tabel WHERE id=;
hvilket ikke er gyldigt og derfor fejler mysql_fetch_array.

> Jeg vil imidlertid gerne fremkalde den post jeg vil rette i, ved at skrive
> id-nr i indput feltet. Hvad gør jeg forkert her?

Det kommer nok an på den eksisterende struktur, det er svært at udtale
sig om ud fra 10 liniers kode...

--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

John (30-08-2007)
Kommentar
Fra : John


Dato : 30-08-07 09:53

> 14 $query="SELECT * FROM tabel where id=".$_GET["post_id"];

Nu ved jeg ikke om det kun var et eksempel, men husk _ALTID_ at validere
dine input - du må aldrig tage en værdi direkte fra URL'en, da du risikere
de værste ting (både forsætlige og ved fejl).



Philip Nunnegaard (30-08-2007)
Kommentar
Fra : Philip Nunnegaard


Dato : 30-08-07 13:07

> Nu ved jeg ikke om det kun var et eksempel, men husk _ALTID_ at validere
> dine input - du må aldrig tage en værdi direkte fra URL'en, da du risikere
> de værste ting (både forsætlige og ved fejl).

Det var kun et eksempel.
Jeg har gerne en pæn smøre af kode liggende foran, hvor jeg tjekker en række
parametre først - herunder $_GET- og $_POST-værdierne.

$post_id = $_GET["post_id"];
....forskellige tjek - er tallet overhovedet indputtet - og hvis det er - er
det så nummerisk.
For postede strenge tjekkes der selvfølgelig, om nogen har indsat
aprostroffer eller anførselstegn, da det ellers i værste fald kan gøre koden
til en ladeport for angreb af den mere ondsindede slags.


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste