Avatar billede gil-galad Nybegynder
31. juli 2004 - 00:57 Der er 14 kommentarer og
1 løsning

Find fejlen i et simpelt script

Hejsa

Hvem kan finde fejlen i dette script?:

<?php
    $besked = $_GET["besked"];
    $ip = $_GET["ip"];
    $link = $_GET["link"];

    if ($besked){
    require("connect.php");
    $tilfoj = "INSERT INTO 404log (besked, dato, ip) VALUES ('$besked', NOW(), '$ip')";
    mysql_query($tilfoj) or die(mysql_error());
    mysql_close();
?>
<h1>Tak for rettelsen</h1>
<div align="center">
Tak for rettelsen. Du vil automatisk blive sendt til forsiden om 4 sekunder.<br>
<a href="index.php">Forside</a>
<script type="text/javascript">
<!--
setTimeout("skiftside()",4000);
function skiftside() { window.location.href = "../index.php"; }
//-->
</script>
</div>
<?php
    }else{
?>
<h1 style="color: red;">404 - Siden kunne ikke findes</h1>
<div align="center">
Skriv venligst hvordan du kom til denne side, og hjælp med at forbedre siden:<br>
<form action="<?php echo $_SERVER["REQUEST_URI"]; ?>">
<textarea name="besked" cols="50" rows="10" class="inputfelt"></textarea>
<input type="hidden" name="ip" value="<?php echo $_SERVER["REMOTE_ADDR"]; ?>">
<br>
<input type="submit" name="Submit" value="Submit" class="knap">
</form>
<br><br>
<a href="#" onClick="java script:history.back();">Klik her for at gå tilbage</a><br>
<a href="index.php">Klik her for at komme til forsiden</a>
</div>
<?php
    }
?>





Siden dette befinder sig på er index.php?action=404  når jeg submitter skal det jo se sådan her ud i adresselinien:
index.php?action=404&besked=BESKED&ip=88.888.88.88&Submit=Submit

men det kommer kun til at se sådan ud:
index.php?besked=BESKED&ip=88.888.88.88&Submit=Submit
(uden ?action=404)

Hvis jeg sætter method="post" på skriver den slet ikke noget i adresselinien...

Er det fordi man ikke kan lave en action til en side der har en ?action=404 baggpå? altså så jeg skal lave en fil, kun til at gemme resultatet med?, for det vil jeg gerne undgå

tak
Avatar billede squashguy Nybegynder
31. juli 2004 - 01:03 #1
det kan umiddelbart løses på 2 måder:

1.
<form action="url.php?action=404">

2.
et skjult felt:
<input type="hidden" name="action" value="404">
Avatar billede terrak Nybegynder
31. juli 2004 - 01:06 #2
$besked = $_POST["besked"];
    $ip = $_POST["ip"];
    $link = $_POST["link"];

<form action="<?php echo $_SERVER["REQUEST_URI"]; ?>?action=404" method="post">

Det skulle umiddelbart gøre tricket :)
Avatar billede gil-galad Nybegynder
31. juli 2004 - 01:07 #3
<form action="<?php echo $_SERVER["REQUEST_URI"]; ?>">
=
<form action="/index.php?action=404">

Så det burde da ikke gøre nogen forskel..
Har prøvet det med det skjulte felt, men kunne ikke få det til at virke..

kommer hertil så: http://spiff.users.whitehat.dk/index.php?besked=lklkl&action=404&ip=80.161.64.29&Submit=Submit
Avatar billede gil-galad Nybegynder
31. juli 2004 - 01:09 #4
Glem jeg sagde: "kommer hertil så: http://spiff.users.whitehat.dk/index.php?besked=lklkl&action=404&ip=80.161.64.29&Submit=Submit"

Havde glemt at ændre en sti

terrak... pøver...
Avatar billede gil-galad Nybegynder
31. juli 2004 - 01:09 #5
pøver = prøver
Avatar billede terrak Nybegynder
31. juli 2004 - 01:10 #6
Det er ikke hensigtsmæssigt at sende indholdet af dit textarea, gennem adresselinjen, da en længere tekst ikke ville komme med(er det ikke 255 tegn maks?).

Post-metoden kan derimod indeholde flere tegn, end du nogensinde vil få brug for :)
Avatar billede gil-galad Nybegynder
31. juli 2004 - 01:12 #7
ok, det virker også!

Ved du hvorfor den brokker sig over mysql_close(); ? der kommer en php-fejl


Warning: mysql_close(): no MySQL-Link resource supplied in /usr/home/whitehat_dk/users/spiff/index.php on line 260
Avatar billede terrak Nybegynder
31. juli 2004 - 01:16 #8
Og lige 2 ting til:

1. Hvad bruges $link og $action til? Du har nemlig ikke brugt dem i dit script.

2. Variablen $action tilgås ved at bruge $_GET['action'], da den er sendt med adresselinjen, som de andre variabler, der tilgås med $_POST, ikke er :)
Avatar billede gil-galad Nybegynder
31. juli 2004 - 01:18 #9
action kom med ved en fejl da jeg prøvede at fikse det med et "hack"  og jeg ved ikke hvad $link laver der... de er fjernet nu! :-)
Avatar billede terrak Nybegynder
31. juli 2004 - 01:20 #10
Den fejl skal du nok kigge i connect.php efter, da jeg ikke ved hvad den gør.

Jeg plejer selv at includere filen conn.php, hvorefter jeg forbinder og lukker til MySQL med 2 funktioner - sqlconnect() og sqlclose() - det er så dejlig nemt :)

Her har du indholdet hvis du er interesseret:

<?php

function mask($text) {
for ($i = 0; $i < strlen($text); $i++) {
return "*";
}

}

function sqlconnect() {

$server = "localhost";
$bruger = "terrak";
$kodeord = "********";
$database = "localdb";

if (!mysql_connect("$server","$bruger","$kodeord")) {
die("Couldn't connect to &quot;$server&quot; as &quot;$bruger&quot; using password &quot;".mask($kodeord)."&quot;");
}


if (!mysql_select_db($database)) {
die("Database &quot;$database&quot; doesn't exist!");
}

}

function sqlclose() {
mysql_close();
}

?>
Avatar billede gil-galad Nybegynder
31. juli 2004 - 01:21 #11
fandt ud af det med mysql_close();  jeg havde lavet noget dobbelt mysql så jeg både hentede connect.php 2 gange, og afsluttede dem to gange inde i hindanden.. Det er dåmt
Avatar billede gil-galad Nybegynder
31. juli 2004 - 01:24 #12
Er det indholdet at conn.php ? Hvordan køre du så et script som ikke ligger mellem mysql_connect("$server","$bruger","$kodeord"  og  mysql_close(); ?
Avatar billede gil-galad Nybegynder
31. juli 2004 - 01:26 #13
Men ellers, mange tak for hjælpen!
Avatar billede terrak Nybegynder
31. juli 2004 - 01:28 #14
Jeg kalder dem i scriptet hvori de er inkluderet:

<?php
include("conn.php");

sqlconnect();

$userQ = mysql_query("select * from `user`");

while ($user = mysql_fetch_array($userQ)) {
echo "Navn: ".$user['name']."<br />Alder: ".$user['age']."<p></p>";
}

sqlclose();

?>

Sådan ;)
Avatar billede gil-galad Nybegynder
31. juli 2004 - 01:42 #15
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester