|
| 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.
| |
|
|