Avatar billede little_kim86 Nybegynder
22. november 2003 - 15:40 Der er 33 kommentarer og
2 løsninger

Problem med headers og php

Jeg har lavet en side som skal indskrive noget i en tabel når man ser et billede i stor men når jeg håber billede kommer den med fejlen:

Warning: Cannot add header information - headers already sent by (output started at /home/www/02-03/Billede_Arkiv/view_mysql.php:13) in /home/www/02-03/Billede_Arkiv/view_mysql.php on line 37

På den forgående side bruger jeg også headers. Men dette vindue bliver åbnet i et nyt et, uden noget html... Se eventuelt felen ved at gå ind på http://www.bjergsnaes.dk/02-03/Billede_Arkiv/index.php?side=makepic.php&imagefile=Cykelskur/P1010005.JPG&nr=1&mappe=Cykelskur&ba=6&fil=P1010005.JPG og så trykke på billed.

Det er lidt svært at forklare men her er min kode:

Det kan selvfølgelig også være den side jeg inkludere der laver noget html inden min "header("Location: $billed");" kommer.

Håber nogle kan hjælpe mig med mit problemet

Kode til viewmysql.php:
<?php

require("../Opdater/Kim_Laursen/Genbrug/viewfunktioner.php");

$billed = $_REQUEST["billed"];

$enket_fil = $_REQUEST["fil"];

aabn_forbindelse_og_vaelgdb();
       
$resultat = mysql_query("select * from billed_view");

while ($raekke = mysql_fetch_array($resultat)) {
  extract($raekke);

if ($stinavn == $billed) {

$updater_billed ="update billed_view
              set view=view+1
              where stinavn='$billed'";
    mysql_query($updater_billed);

$updater_tid ="update billed_view
              set tid='now()'
              where stinavn='$billed'";
    mysql_query($updater_tid);
   
} else {
  $insertSQL = "insert into billed_view (stinavn, filnavn, view, tid)
              values ('$billed', '$enket_fil', '1', 'now())";
  mysql_query($insertSQL);
}       
}

luk_forbindelse();

header("Location: $billed");

?>


Den requirede kode:
<?php
/*
* Titel    : MySQL abstraktion
* Version  : $Id: mysql_funktioner,v 1.1.1.1 2002/01/11 00:15:45 villyft Exp $
* Kodet af  : Villy Thomsen (villyft@webcafe.dk)
* Placering : http://webcafe.dk/php/artikler/204/mysql_funktioner
* Formål    : en abstraktion over the MySQL funktionerne i PHP, som
*            klarer alle de "trælse" ting, så som at åbne/lukke
*            forbindelser og håndtere fejl fra MYSQL.
*/

function aabn_forbindelse_og_vaelgdb() {
  $server = "****";
  $bruger = "****";
  $kodeord = "****";
  $database = "****";

  if (!mysql_connect("$server","$bruger","$kodeord")) {
    udskriv_fejl("Kunne ikke oprette en forbindelse til MySQL.");
  }

  if(!mysql_select_db("$database")) {
    udskriv_fejl("Kunne ikke vælge databasen: $database");
  }
}

function sql_spoerg_og_faa_svar($query) {
  $resultat = mysql_query($query);

  if(!$resultat) {
    udskriv_fejl("Kunne ikke udføre: <em>$query</em>");
  }

  while($raekke = mysql_fetch_array($resultat)) {
    $resultat_array[] = $raekke;
  }

  return $resultat_array;
}

function br($var) {
return ereg_replace("(\r\n|\n\r|\n|\r)", "<br>\n", $var);
}

function sql_spoerg($query) {
  $resultat = mysql_query($query);

  if(!$resultat) {
    udskriv_fejl("Kunne ikke udføre: <em>$query</em>");
  }
}

function luk_forbindelse() {
  if(!mysql_close()) {
    udskriv_fejl("Kunne ikke lukke forbindelsen til MySQL!");
  }
}

function udskriv_fejl($fejl) {
  echo "<p>$fejl";

  if ($mysql_fejl = mysql_error()) {
    echo "<br>Fejlen er: <em>$mysql_fejl</em>";
  }

  exit;
}
?>
Avatar billede phpwiz Nybegynder
22. november 2003 - 15:43 #1
jeg får ingen problemer med din side ..
Avatar billede little_kim86 Nybegynder
22. november 2003 - 15:45 #2
nej det kan jeg godt se har også lige selv tjekket det
men der sker ikke det som der skal ske...
Den tilføjer ikke noget ind til databasen... Nogler der kan se hvad problemet er???
Avatar billede phpwiz Nybegynder
22. november 2003 - 15:50 #3
som jeg ser det så er den variabel
$billed, en der bliver overført via GET, og derfor kunne jeg tro at du skulle bruge :

$billed = $_GET['billed'] i toppen af dit script.

For hvis du bruger php 4.xxxx (kan ikke lige huske) så er det fordi
globale variabler std. er sat off, af sikkerhedshensyn

så alle variabler overført via POST fanger du med $_POST['varname'] osv
Avatar billede little_kim86 Nybegynder
22. november 2003 - 15:52 #4
Så giver den følgende fejl...

Parse error: parse error, unexpected T_VARIABLE in /home/www/02-03/Billede_Arkiv/view_mysql.php on line 7
Avatar billede little_kim86 Nybegynder
22. november 2003 - 15:54 #5
og linje 7 er $enket_fil = $_REQUEST["fil"];
Avatar billede little_kim86 Nybegynder
22. november 2003 - 15:55 #6
Jeg har ellers brugt $enket_fil = $_REQUEST["fil"]; på de andre sider...
Avatar billede phpwiz Nybegynder
22. november 2003 - 15:55 #7
og du har husket ; i linien ovenover
Avatar billede little_kim86 Nybegynder
22. november 2003 - 15:57 #8
Det havde jeg men det ser ikke ud til at den skriver noget ind i databasen...
Avatar billede phpwiz Nybegynder
22. november 2003 - 15:57 #9
hov den linie jeg skrev, er lige meget da du bruger $_REQUEST.....

men du skal nok teste lidt om $stinavn og $billed indeholder det som det skal,
for ellers vil den ikke gemme noget som helst i din database
Avatar billede little_kim86 Nybegynder
22. november 2003 - 15:58 #10
Hvorfor vil den ikke gemme noget???
Avatar billede little_kim86 Nybegynder
22. november 2003 - 15:58 #11
Jeg har jo en else sætning...
Avatar billede phpwiz Nybegynder
22. november 2003 - 16:00 #12
ja men hvis nu de 2 er ens så kommer den jo ALDRIG til din else .
Avatar billede little_kim86 Nybegynder
22. november 2003 - 16:01 #13
nej men så opdatere den jo stadig mine tal... Og de vil jo aldrig blive ens da der ikke er skrevet noget ind i min tabel...
Avatar billede phpwiz Nybegynder
22. november 2003 - 16:03 #14
ok, tror jeg har fundet fejlen :

} else {
  $insertSQL = "insert into billed_view (stinavn, filnavn, view, tid)
              values ('$billed', '$enket_fil', '1', 'now())";
  mysql_query($insertSQL);
}       

der mangler du en ' efter now()
Avatar billede little_kim86 Nybegynder
22. november 2003 - 16:03 #15
okay det prøver jeg
Avatar billede little_kim86 Nybegynder
22. november 2003 - 16:05 #16
Det ser ikke ud til at det hjalp noget...
Avatar billede phpwiz Nybegynder
22. november 2003 - 16:08 #17
ok hvad hvis du prøver at outputte din $insertSQL og paste den ind i phpmyadmin

$insertSQL = "insert into billed_view (stinavn, filnavn, view, tid)
              values ('$billed', '$enket_fil', '1', 'now())";

mysql_query($insertSQL);
Avatar billede phpwiz Nybegynder
22. november 2003 - 16:08 #18
hov !


$insertSQL = "insert into billed_view (stinavn, filnavn, view, tid)
              values ('$billed', '$enket_fil', '1', 'now())";
echo $insertSQL;
mysql_query($insertSQL);
Avatar billede little_kim86 Nybegynder
22. november 2003 - 16:12 #19
Den udskriver ikke noget...
Avatar billede little_kim86 Nybegynder
22. november 2003 - 16:16 #20
Der bliver slet ikke indskrevet noget i databasen... Jeg har lavet en test side hvor jeg kan se alt der er blevet indskrevet... Og den er bare tom...
Avatar billede phpwiz Nybegynder
22. november 2003 - 16:18 #21
hvis den echo ikke skriver noget overhovedet, så kommer den ikke til den ELSE , så vil det sige at $stinavn == $billed så må du teste lidt i den del af din if ...

for at se hvad den skriver til db'en, echo $..... osv og paste til phpmyadmin
Avatar billede little_kim86 Nybegynder
22. november 2003 - 16:25 #22
Nu fik jeg den til at skrive noget i databasen...
Avatar billede little_kim86 Nybegynder
22. november 2003 - 16:36 #23
Hved du hvis man har en if sætning og så har man noget der ikke må være lig hinanden???
Avatar billede phpwiz Nybegynder
22. november 2003 - 16:47 #24
!=
Avatar billede little_kim86 Nybegynder
22. november 2003 - 16:51 #25
okay... Er ved at være meget tæt på at det virker som det skal men mangler at få opdate halvdelen til at virke...

Min if-sætning ser således ud nu, else stykket af den virker men ikke opdater delen. Har en ide om at det er noget med while ($raekke = mysql_fetch_array($resultat)) {
  extract($raekke); at gøre:


if ($stinavn == $billed) {

aabn_forbindelse_og_vaelgdb();
       
$resultat = mysql_query("select * from billed_view");

while ($raekke = mysql_fetch_array($resultat)) {
  extract($raekke);

$updater_billed ="update billed_view
              set view=view+1
              where stinavn='$billed'";
    mysql_query($updater_billed);

$updater_tid ="update billed_view
              set tid=now()
              where stinavn='$billed'";
    mysql_query($updater_tid);

}

luk_forbindelse();
   
} else {

aabn_forbindelse_og_vaelgdb();

  $insertSQL = "insert into billed_view (stinavn, filnavn, view, tid)
              values ('$billed', '$enket_fil', '1', now())";
  mysql_query($insertSQL);
 
luk_forbindelse();

}
Avatar billede phpwiz Nybegynder
22. november 2003 - 16:56 #26
Og du checker lige at din queries indeholder det de skal ??

while ($raekke = mysql_fetch_array($resultat)) {
  extract($raekke);

$updater_billed ="update billed_view
              set view=view+1
              where stinavn='$billed'";
echo $updater_billed;
    mysql_query($updater_billed);

$updater_tid ="update billed_view
              set tid=now()
              where stinavn='$billed'";
echo $updater_tid;
    mysql_query($updater_tid);

}
Avatar billede little_kim86 Nybegynder
22. november 2003 - 17:00 #27
Der kommer ikke noget... Som jeg somsagt siger er jeg meget sikker på at der er noget med "while ($raekke = mysql_fetch_array($resultat)) {
  extract($raekke);" Men jeg kan ikke huske hvordan med for indholder ud af de array's uden at det går ud over det andet...
Avatar billede phpwiz Nybegynder
22. november 2003 - 17:06 #28
og du er sikker på at $stinavn kan være det samme som $billed

prøv at skrive : echo $stinavn." = ".$billed;
lige inden din if ($stinavn.............
Avatar billede little_kim86 Nybegynder
22. november 2003 - 17:08 #29
Ja det er jeg sikker på... Men det du skriver hjælper ikke noget, da jeg først henter det fra min database i if-sætningen...
Avatar billede phpwiz Nybegynder
22. november 2003 - 17:10 #30
What ??

Så er det da derfor, hvis du først finder $stinavn og $billed i din if sætning. så er det da derfor at de ALDRIG bliver det samme inden if sætningen ....

$billed = noget som er defineret tidligere.

$stinavn = INTET da det ikke er hentet fra db.

så er det da klart at du ikke får kørt den query
Avatar billede little_kim86 Nybegynder
22. november 2003 - 17:11 #31
det er rigtig har også lige haft flyttet det... Det er rigtig nok... Hvordan skal den så se ud??
Avatar billede phpwiz Nybegynder
22. november 2003 - 17:16 #32
måske sådan utestet og grimt... ;o)

prøv dig frem...


aabn_forbindelse_og_vaelgdb();

$resultat = mysql_query("select * from billed_view");
$r = mysql_fetch_array($resultat);
extract($r);
if ($stinavn == $billed) {

while ($raekke = mysql_fetch_array($resultat)) {
  extract($raekke);

$updater_billed ="update billed_view
              set view=view+1
              where stinavn='$billed'";
    mysql_query($updater_billed);

$updater_tid ="update billed_view
              set tid=now()
              where stinavn='$billed'";
    mysql_query($updater_tid);

}

   
} else {


  $insertSQL = "insert into billed_view (stinavn, filnavn, view, tid)
              values ('$billed', '$enket_fil', '1', now())";
  mysql_query($insertSQL);

}

 
luk_forbindelse();
Avatar billede little_kim86 Nybegynder
22. november 2003 - 17:20 #33
Den skriver 2 fejl, ved ikke helt hvad jeg skal lave om i det du har lavet men fejlene er:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/www/02-03/Billede_Arkiv/view_mysql.php on line 13

Warning: extract() expects first argument to be an array in /home/www/02-03/Billede_Arkiv/view_mysql.php on line 14
Avatar billede little_kim86 Nybegynder
22. november 2003 - 18:08 #34
Det er lige meget har fået løst mit problem... Bruget lidt at du du sagde men fandt da frem til det...
Avatar billede phpwiz Nybegynder
22. november 2003 - 18:10 #35
tak for hjælpen og points ...
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