Avatar billede johnwies Nybegynder
13. juli 2002 - 19:44 Der er 33 kommentarer og
1 løsning

overføre arrays til ny side via Header location...

Hej. Jeg kan ikke overføre et array der er udfyldt med data fra en mysql query.

$beskedindhold=sql_spoerg_og_faa_svar("
SELECT    opkald.*
FROM opkald
WHERE($Kundeid=1234)");

header("Location: nyaftale.php?beskedindhold=$beskedindhold");

Arrayet vil kun overføre indholdet"Array"

Jeg ved der er en del data i den opslåede tabel!

Hvad gør jeg galt??
Avatar billede johnwies Nybegynder
13. juli 2002 - 19:55 #1
Jeg må lige tilføje, det hele kører på en linux med apache, php og mysql.
Avatar billede intel4004 Novice
13. juli 2002 - 20:00 #2
Hmmm jeg er lidt ny indenfor PHP/MySQL men jeg mener da ikke at mysql_query returnerer en ren streng-værdi uanset hvad du spørger mysql om... er det forkert??
Avatar billede intel4004 Novice
13. juli 2002 - 20:02 #3
Skal man ikke have den igennem mysql_fetch_array??
Avatar billede johnwies Nybegynder
13. juli 2002 - 20:04 #4
variablen $kundeindhold er et array hvor man med flg. kan udtrække data.

for($a=0; $a<sizeof($indhold); $a++) {
    extract($indhold[$a]);
}

Hvis der så er en tabel med: navn, adresse, tlf ....

Så kan man udskrive

print $navn;
print $adresse; o.s.v
Avatar billede johnwies Nybegynder
13. juli 2002 - 20:05 #5
$indhold = $kundeindhold
Avatar billede johnwies Nybegynder
13. juli 2002 - 20:07 #6
jo, det skal igennem mysql_fetch_array,
men jeg bruger en funktion (sql_spoerg_og_faa_svar)så jeg slipper for at bruge de samme sætninger flere gange. Dene funktion returnerer arrayet som jeg vil overføre, og her er mit problem. :o)
Avatar billede intel4004 Novice
13. juli 2002 - 20:08 #7
Jeg tror(TROR) kun at du kan assigne rene string-værdier til en script-parameter.
Avatar billede johnwies Nybegynder
13. juli 2002 - 20:10 #8
hmm det er jo også der jeg er stået af, mon ikke det ER muligt, alt kan jo lade sig gøre ;-)
Avatar billede intel4004 Novice
13. juli 2002 - 20:18 #9
Dvs. at $kundeindhold ikke er det associative array man får vha. af mysql_fetch_array?? Hvis det er så kan for-løkken vel aldrig extracte $kundeindhold[$a...$a++] ??
Avatar billede johnwies Nybegynder
13. juli 2002 - 20:26 #10
hvad mener du med det associative array?

Det virker fint inden for samme side. her følger funktionen:

<?php
/*
* Titel    : MySQL abstraktion
* Version  : $Id: mysql_funktioner,v 1.4 2000/11/02 18:56:49 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 = "databasserveren";
  $bruger = "brugeren der har rettighederne";
  $kodeord = " et evt. kodeord";
  $database = "den database der bruges";

  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 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 intel4004 Novice
13. juli 2002 - 20:34 #11
Hmmm har siddet og skullet på det:

Extract kan kun hente fra et associativt array, dvs. at $kundeindhold er et multidimensionelt array, hvor $kundeindhold[0] igen er et array????

Er som sagt lidt ny indenfor PHP, men du skal vel have lavet en variabel som bliver forøget med en streng: &data&data1&data2 osv...
Avatar billede johnwies Nybegynder
13. juli 2002 - 20:42 #12
lad os lige åbne arrayet, som jeg har forstået det.
$kundeindhold:
Navn=Børge
Adresse=gadevej
tlf=33445566

når man så udskriver med echo"$navn $adresse $tlf";
så bliver resultatet: Børge gadevej 22445566

har jeg ret?
Avatar billede intel4004 Novice
13. juli 2002 - 20:48 #13
Med et associativt array mener jeg en som har dets keys repræsenteret som navne istedet for tal.

Hmmm jeg begynder så småt at fatte din funktion :)...

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;
}

Dvs. for hver række med kundedata(tlf, adresse mm.) eksisterer der en $kundeindhold[0], $kundeindhold[1] osv. Men da du i starten spørger efter en enkelt række ekisterer der derfor kun $kundeindhold[0]. Kundeindhold[0] er selv et array som du kan extracte med forløkken.

Kan man ikke skrive print $kundeindhold[0][kundeid]; og få 1234 ud??
Avatar billede intel4004 Novice
13. juli 2002 - 20:49 #14
Forudsat at der eksisterer et felt(kolonne) med navnet kundeid...
Avatar billede intel4004 Novice
13. juli 2002 - 20:51 #15
Måske er det: $kundeindhold[0]['kundeid'] ??
Avatar billede johnwies Nybegynder
13. juli 2002 - 20:54 #16
for($a=0; $a<sizeof($kundeindhold); $a++) {
    extract($kundeindhold[$a]);
}

Når det er extracted skriver du bare

print $kundeid
så får du 1234

Men mit problem er at overføre arrayet til en ny side med header location:
header("Location: nyaftale.php?beskedindhold=$beskedindhold");

For at få uddybet min funktion kan du kigge på linket: http://webcafe.dk/php/
Avatar billede intel4004 Novice
13. juli 2002 - 21:01 #17
sql_spoerg_og_faa_svar("
SELECT    opkald.*
FROM opkald
WHERE($Kundeid=1234)");

$str = $resultat_array;
$parametre = $str[0][kolonne1].'&'.$str[0][kolonne2];

header("Location: nyaftale.php?=$parametre");

Kan man det??
Avatar billede intel4004 Novice
13. juli 2002 - 21:05 #18
Det kan være det er $beskedindhold[0]['kundeid'] istedet....?

Ihvertfald er $beskedindhold(helt fra starten) et multidimmensionelt array, aner dog ikke om man kan kalde data fra dem på den måde som jeg gør det...
Avatar billede johnwies Nybegynder
13. juli 2002 - 21:12 #19
Du har ret, det er et multidimensionelt array.
Jeg arbejder roder videre, !
Ja, man kan overføre enkelte variabler til headeren.
header("Location: nyaftale.php?variabel=$variablens navn");
så kan man bruge navnet på variablen lige efter ? med betegnelsen $variabel
Avatar billede intel4004 Novice
13. juli 2002 - 21:14 #20
Fra manualen:

Because the value of an array can be everything, it can also be another array. This way you can make recursive and multi-dimensional arrays.
Avatar billede intel4004 Novice
13. juli 2002 - 21:22 #21
ok fedt nok...men er det ikke rigtigt at der kun eksisterer $beskedindhold[0] ?? Og at $beskedindhold[0] selv er et associativt array(hvor keys er felt/kolonnenavne).

Så kan du bruge array_keys($beskedindhold[0]) til at returnerer endnu et array med navne på keys i $beskedindhold[0].

Ser her:

$kundeindhold = $beskedindhold[0];
$kundedata = array_keys($kundeindhold);
extract($kundedata);

Den sidste laver variabler med navne som $kundeid og $kolonne1, $kolonne2 osv... Disse kan du bagefter proppe i en længere streng og sætte på som parameter til scriptet...

Phy!

Intel4004
Avatar billede intel4004 Novice
13. juli 2002 - 21:23 #22
Et svar helt sikkert :)
Avatar billede johnwies Nybegynder
13. juli 2002 - 21:31 #23
fandt faktisk ud af det samme samtidig med dig. Nu vil jeg bare prøve at overføre variablen til headeren. Hvis det lykkes, så er det også nemmere at overføre mange variabler uden man skal skrive flg.
header("Location: nyaftale.php?abonummer=$Abonnementsnr&tlf=$Telefonnr&KundeId=$KundeId&navn=$Kontaktfornavn&adresse=$Faktureringsadresse&postnrbyID=$postnrbyID&postnr=$Postnr&by=$Bynavn&dag=$dag&aar=$aar&maaned=$maaned&tekid=$tekid&curruser=$curruser&klokken=$klokken&klokkeslet=$klokkeslet&fundet=$fundet&starttid=$starttid");
Avatar billede intel4004 Novice
13. juli 2002 - 21:56 #24
$kundedata1 = array_keys($kundeindhold[0]);
$kundedata2 = array_values($kundeindhold[0]);

for ($a=0, $a=sizeof($kundedata), $a++) {
        $parametre .= '&'.$kundedata1[$a];
        $parametre .= '='.$kundedata2[$a];
}

Der er stadig noget med ?-tegnet...men det kan være du har fundet ud af det??

Intel4004
Avatar billede johnwies Nybegynder
13. juli 2002 - 21:58 #25
Det virker fint inden for samme side/script, men når variablen overføres til headeren går det galt???, så hva' nu?
Avatar billede intel4004 Novice
13. juli 2002 - 22:01 #26
$kundedata1 = array_keys($kundeindhold[0]);
$kundedata2 = array_values($kundeindhold[0]);

for ($a=0, $a=sizeof($kundedata), $a++) {
        if (empty($parametre)) {
              $t = '?'; } else {
              $t = '&'; }
        $parametre .= $t.$kundedata1[$a];
        $parametre .= '='.$kundedata2[$a];
}

header("Location: nyaftale.php$parametre");

hmmmm....blot et forslag...men det ser da egentlig vild ud. Wow!
Avatar billede intel4004 Novice
13. juli 2002 - 22:07 #27
du skal vel blot lige bruge:

header("Location: nyaftale.php".$parametre);

...istedetfor.
Avatar billede intel4004 Novice
13. juli 2002 - 22:10 #28
Husk der er noget med at Location skal bruge den absolute URI, altså helt fra protokol til selve
scriptet...

Note: HTTP/1.1 requires an absolute URI as argument to Location:
including the scheme, hostname and absolute path, but some clients
accept relative URIs. You can usually use $_SERVER['HTTP_HOST'],
$_SERVER['PHP_SELF'] and dirname() to make an absolute URI from a
relative one yourself:


header("Location: http://".$_SERVER['HTTP_HOST']
                      .dirname($_SERVER['PHP_SELF'])
                      ."/".$relative_url);
Avatar billede intel4004 Novice
13. juli 2002 - 22:16 #29
$kundedata1 = array_keys($kundeindhold[0]);
$kundedata2 = array_values($kundeindhold[0]);

for ($a=0, $a<=sizeof($kundeindhold[0]), $a++) {
        if (empty($parametre)) {
              $t = '?'; } else {
              $t = '&'; }
        $parametre .= $t.$kundedata1[$a];
        $parametre .= '='.$kundedata2[$a];
}

header("Location: nyaftale.php$".parametre);


rettet... :)
Avatar billede johnwies Nybegynder
13. juli 2002 - 23:09 #30
Ja, nu virker det, tak for hjælpen.
Avatar billede intel4004 Novice
13. juli 2002 - 23:59 #31
Jamen det var så lidt, sjovt at kunne hjælpe.

Er du selv ny indenfor PHP eller??

Intel4004

PS: Tak for point
Avatar billede johnwies Nybegynder
14. juli 2002 - 00:24 #32
Ja, har ikke progr. så meget i php, men jeg synes det er interessant, da det er rimeligt nemt at lære.
Avatar billede intel4004 Novice
14. juli 2002 - 00:37 #33
Ja...nemlig. Jeg har aldrig oplevet noget der ligger
så nemt og lige til. Jeg har forsøgt mig lidt med
pascal(i folkeskolen) og ellers Delphi. Men det her
PHP fungerer faktisk!!
Avatar billede johnwies Nybegynder
14. juli 2002 - 00:48 #34
Jeg har lavet en del Visual Basic og turbopascal, men php er helt sikkert nemmere, især når eksperten
er ved hånden samt de mange tusinder af links på nettet til php.
Prøv f.eks. http://www.hotscripts.com der er en masse godter.
En god editor som jeg bruger er editplus. Findes på www.editplus.com
God fornøjelse :-)
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