QimenMedlem sedan juni 20015 009 inlägg Hej
Kan man inte ha två if satser i varandra?
Försökte med:
if ($_GET['action'] == "kop") {
$kop = "SELECT pris FROM hus where id='{$_GET['id']}'";
$kop1 = mysql_query($kop) or die ("Kan inte läsa från databasen!");
$kop2 = mysql_fetch_array($kop1);
if ($kop2['pris'] > $row['pixlar']) {
Header("Location: husinfo.php?fel=1");
exit;
}
} else {
$kop = "SELECT * FROM hus where id='{$_GET['id']}'";
$kop1 = mysql_query($kop) or die ("Kan inte läsa från databasen!");
$kop2 = mysql_fetch_array($kop1);
$sql = "...";
mysql_query($sql);
Header("Location: husinfo.php?klart=1");
exit;
}
Men det funkar inte, men tar jag bort den andra if satsen så funkar den första.
MatteMedlem sedan aug. 20002 975 inlägg Det går alldeles utmärkt att ha en if-sats i en if-sats.
På vilket sätt funkar det inte för dig?
QimenMedlem sedan juni 20015 009 inlägg När jag skickar iväg en querystring med ?action=kop&id=29
Så händer inget. Ända som händer är att i urlen läggs ?action=kop&id=29 till. Får dock inget fel.
MatteMedlem sedan aug. 20002 975 inlägg Detta är, om jag förstått rätt, if-satsen som får ditt skript att stanna:
if ($kop2['pris'] > $row['pixlar']) {
header("Location: husinfo.php?fel=1");
exit;
}
Varifrån kommer $row['pixlar'] ?
Vad är din felrapportering inställd på att visa?
Gör det någon skillnad om du lägger följande överst i ditt skript?
error_reporting(E_ALL);
QimenMedlem sedan juni 20015 009 inlägg
Matte skrev:
Varifrån kommer $row['pixlar'] ?
Överst på sidan har jag:
$query = "SELECT * FROM user WHERE name='{$_SESSION['sess_user']}'";
$res = mysql_query($query) or die ("Kan inte läsa från databasen!");
$row = mysql_fetch_array($res);
Så det ska väl gå att ta ett värde därifrån?
Hmmm lägger jag den koden så får jag:
Cannot modify header information - headers already sent
MatteMedlem sedan aug. 20002 975 inlägg
Cannot modify header information - headers already sent
Jag hade mina misstankar att det var något sådant.
Före en header får du inte skicka något till webbläsaren. Ingen HTML, ingen echo eller print. Du får inte heller ha någon tomrad eller mellanslag före den inledande PHP-taggen. Detta gäller även inkluderade filer. I inkluderade filer får man även vara uppmärksam på att det inte finns något dolt tecken (typ mellanslag eller radbrytning) efter den avslutande PHP-taggen.
QimenMedlem sedan juni 20015 009 inlägg Mm jag har läst här på wF att det ofta blir problem med det.
if ($_GET['action'] == "kop") {
$kop = "SELECT pris FROM hus where id='{$_GET['id']}'";
$kop1 = mysql_query($kop) or die ("Kan inte läsa från databasen!");
$kop2 = mysql_fetch_array($kop1);
if ($kop2['pris'] > $row['pixlar']) {
Header("Location: husinfo.php?fel=1");
exit;
}
} else {
$kop = "SELECT * FROM hus where id='{$_GET['id']}'";
$kop1 = mysql_query($kop) or die ("Kan inte läsa från databasen!");
$kop2 = mysql_fetch_array($kop1);
$sql = "Update user set husnamn = '{$kop2['sak']}' WHERE name='{$_SESSION['sess_user']}'";
mysql_query($sql);
Header("Location: husinfo.php?klart=1");
exit;
}
Men ovanstående kod, kan man inte göra det utan att det ska bli fel?
MatteMedlem sedan aug. 20002 975 inlägg Det hela hänger på vad du har för kod före den du visar. I ditt felmeddelande står det på vilken rad output startade.
Kan du visa upp hela skriptet från början ?
QimenMedlem sedan juni 20015 009 inlägg Antagligen väldigt klantigt uppbygd kod men iaf så här ser det ut:
<?php
session_start();
extract($_REQUEST);
error_reporting(E_ALL);
// Kolla om inloggad = sessionen satt
if (!isset($_SESSION['sess_user'])){
header("Location: ../default.php");
exit;
}
extract($_REQUEST);
include("../include/config.php");
$name = $_SESSION['sess_user'];
$query = "SELECT * FROM user WHERE name='{$_SESSION['sess_user']}'";
$res = mysql_query($query) or die ("Kan inte läsa från databasen!");
$row = mysql_fetch_array($res);
$query1 = "SELECT * FROM TID";
$res1 = mysql_query($query1) or die ("Kan inte läsa från databasen!");
$row1 = mysql_fetch_array($res1);
$sak = "SELECT * FROM hus order by pris";
$sak1 = mysql_query($sak) or die ("Kan inte läsa från databasen!");
$sak2 = mysql_fetch_array($res1);
$query_idag = "SELECT COUNT(*) FROM user";
$result_idag = mysql_query($query_idag);
$query_online = "SELECT COUNT(*) FROM user where online = 'Ja'";
$result_online = mysql_query($query_online);
?>
<?php
if ($_GET['action'] == "kop") {
$kop = "SELECT pris FROM hus where id='{$_GET['id']}'";
$kop1 = mysql_query($kop) or die ("Kan inte läsa från databasen!");
$kop2 = mysql_fetch_array($kop1);
if ($kop2['pris'] > $row['pixlar']) {
Header("Location: husinfo.php?fel=1");
exit;
}
} else {
$kop = "SELECT * FROM hus where id='{$_GET['id']}'";
$kop1 = mysql_query($kop) or die ("Kan inte läsa från databasen!");
$kop2 = mysql_fetch_array($kop1);
$sql = "Update user set husnamn = '{$kop2['sak']}', yta = '{$kop2['yta']}', hus = '{$kop2['bild']}', bostadshyra = '{$kop2['hyra']}', respekthus = '{$kop2['respekt']}', '{$kop2['hyra']}', pixlar = pixlar - '{$kop2['pixlar']}' WHERE name='{$_SESSION['sess_user']}'";
mysql_query($sql);
Header("Location: husinfo.php?klart=1");
exit;
}
if ($_GET['action'] == "fattig") {
$kop = "SELECT * FROM hus where id='{$_GET['id']}'";
$kop1 = mysql_query($kop) or die ("Kan inte läsa från databasen!");
$kop2 = mysql_fetch_array($kop1);
$sql = "Update user set husnamn = 'Fattighuset', yta = '15', hus = 'parken', bostadshyra = '0', respekthus = '0', respekt = respekt - '15' where where name='{$_SESSION['sess_user']}'";
mysql_query($sql);
Header("Location: husinfo.php?fel=2");
exit;
}
?>
MatteMedlem sedan aug. 20002 975 inlägg
?>
<?php
Här har du en radbrytning, utanför PHP-taggarna, som skickar en output till webbläsaren. Tag bort de två raderna och försök igen.
MatteMedlem sedan aug. 20002 975 inlägg
include("../include/config.php");
Du kan även ta en titt i filen config.php så du inte har ett mellanslag eller radbrytning utanför PHP-taggarna, varken på den i början eller slutet.
QimenMedlem sedan juni 20015 009 inlägg Humm hjälpte inte, men jag har ju inkluderat en fil och den har <?php och ?>, jag provade ta bort dem men då skriver den ut alla texten från include filen. :l
QimenMedlem sedan juni 20015 009 inlägg Config.php:
<?php
$link = mysql_pconnect("localhost","","") or die ("Kan inte ansluta till databasen!");
mysql_select_db("pixelworld", $link);
/********************************************
* Setup variables *
********************************************/
$systemLogin = "default.php";
?>
QimenMedlem sedan juni 20015 009 inlägg
Notice: Undefined index: action in d:\wwwroot\game\secure\husinfo.php on line 43
Warning: Cannot modify header information - headers already sent by (output started at d:\wwwroot\game\secure\husinfo.php:43) in d:\wwwroot\game\secure\husinfo.php on line 58
rad 43:
if ($_GET['action'] == "kop") {
MatteMedlem sedan aug. 20002 975 inlägg Till att börja med; du har tagit bort:
?>
<?php
?
Alltså precis före
if ($_GET['action'] == "kop") {
Sen ska PHP-taggarna vara kvar i config.php, men du ska se till så att du inte har något före eller efter dom. Före är lätt, det ser du med en gång. För att vara säker på att du inte har något efter så sätt markören direkt efter (på samma rad) den avslutande PHP-taggen och tryck upprepade gånger på delete tills du är säker på att där inte finns något.
QimenMedlem sedan juni 20015 009 inlägg Har tagit bort dem och har kollat include filen också.
MatteMedlem sedan aug. 20002 975 inlägg Och hur lyder hela ditt felmeddelande nu? (inklusive radnummer)
QimenMedlem sedan juni 20015 009 inlägg
Notice: Undefined index: action in d:\wwwroot\game\secure\husinfo.php on line 34
Warning: Cannot modify header information - headers already sent by (output started at d:\wwwroot\game\secure\husinfo.php:34) in d:\wwwroot\game\secure\husinfo.php on line 49
Uppdaterad kod:
<?php
session_start();
extract($_REQUEST);
error_reporting(E_ALL);
// Kolla om inloggad = sessionen satt
if (!isset($_SESSION['sess_user'])){
header("Location: ../default.php");
exit;
}
extract($_REQUEST);
include("../include/config.php");
$name = $_SESSION['sess_user'];
$query = "SELECT * FROM user WHERE name='{$_SESSION['sess_user']}'";
$res = mysql_query($query) or die ("Kan inte läsa från databasen!");
$row = mysql_fetch_array($res);
$query1 = "SELECT * FROM TID";
$res1 = mysql_query($query1) or die ("Kan inte läsa från databasen!");
$row1 = mysql_fetch_array($res1);
$sak = "SELECT * FROM hus order by pris";
$sak1 = mysql_query($sak) or die ("Kan inte läsa från databasen!");
$sak2 = mysql_fetch_array($res1);
$query_idag = "SELECT COUNT(*) FROM user";
$result_idag = mysql_query($query_idag);
$query_online = "SELECT COUNT(*) FROM user where online = 'Ja'";
$result_online = mysql_query($query_online);
if ($_GET['action'] == "kop") {
$kop = "SELECT pris FROM hus where id='{$_GET['id']}'";
$kop1 = mysql_query($kop) or die ("Kan inte läsa från databasen!");
$kop2 = mysql_fetch_array($kop1);
if ($kop2['pris'] > $row['pixlar']) {
Header("Location: husinfo.php?fel=1");
exit;
}
} else {
$kop = "SELECT * FROM hus where id='{$_GET['id']}'";
$kop1 = mysql_query($kop) or die ("Kan inte läsa från databasen!");
$kop2 = mysql_fetch_array($kop1);
$sql = "Update user set husnamn = '{$kop2['sak']}', yta = '{$kop2['yta']}', hus = '{$kop2['bild']}', bostadshyra = '{$kop2['hyra']}', respekthus = '{$kop2['respekt']}', '{$kop2['hyra']}', pixlar = pixlar - '{$kop2['pixlar']}' WHERE name='{$_SESSION['sess_user']}'";
mysql_query($sql);
Header("Location: husinfo.php?klart=1");
exit;
}
MatteMedlem sedan aug. 20002 975 inlägg Ditt felmeddelande säger att du inte har någon 'action' i din QUERYSTRING i filen husinfo.php.
Är detta koden för filen husinfo.php ?
I såfall är jag inte riktigt säker på vad du försöker göra eftersom du varken tar hand om variabeln $_GET['fel'] eller $_GET['klart'].
Ditt header-felmeddelande beror på ditt tidigare felmeddelande om undefined index.
I vilket fall bör du byta ut
if ($_GET['action'] == "kop") {
mot
if (isset($_GET['action']) && $_GET['action'] == "kop") {
QimenMedlem sedan juni 20015 009 inlägg ok. det stämmer nog eftersom när man först kommer tillsidan så har den inga querystring värden, nu när jag ändra det så får jag:
Notice: Undefined index: id in d:\wwwroot\game\secure\husinfo.php on line 44
Felet ligger i:
$kop = "SELECT * FROM hus where id='{$_GET['id']}'";
Det är väll samma där med att det inte har något värde.