webForumDet fria alternativet

Odefinierade varibler

26 svar · 729 visningar · startad av wolfangle

wolfangleMedlem sedan jan. 200214 inlägg
#1

Tja,

Jag vill kunna ta fram användarens IP adress mm.

Det ska kunna gå med hjälp av:

$REMOTE_ADDR

Jag skriver echo $REMOTE_ADDR; och för följande felmeddelande:

Warning: Undefined variable: REMOTE_ADDR in C:\rootwww\global.php on line 3

Något syntax fel gör jag ju men vad?

KimMedlem sedan jan. 20007 697 inlägg
#2

Kolla i php.ini efter raden
register_globals

Sätt den till On så ska det nog lösa sig.

FlashXMedlem sedan nov. 19991 033 inlägg
#3

eller använd $_SERVER[REMOTE_ADDR] istället och låt register_globals vara Off

bohlinMedlem sedan mars 2000263 inlägg
#4

$_SERVER[REMOTE_ADDR] funkar väl bara i 4.1.0, eller?

------------------
/bohlin
kaffe är djävulens dryck
glögg är guds dryck

FlashXMedlem sedan nov. 19991 033 inlägg
#5

Jo, det är riktigt, den fungerar inte på versioner äldre än 4.10 men det gör ju å andra sidan $HTTP_SERVER_VARS[REMOTE_ADDR] som dessutom fungerar även i nyare versioner.

TypeMedlem sedan mars 20021 239 inlägg
#6

Varför?

Varför ska man sätta register_globals till On?

Eller rättare sagt varför måste man det?

När jag gjorde det funkade det asbra! Men frågan är varför?
hur ska man annars göra???

/MVH Type

SPiNMedlem sedan mars 20007 896 inlägg
#7

Man måste inte det, men det är en genväg för att komma åt variabler utanför PHP lättare. Jag brukar låta de vara Off, för att koden ser bättre ut... ;)

TypeMedlem sedan mars 20021 239 inlägg
#8

men hur?

Jag förstår inte hur du menar :(
Asså...
du säger att du låter de vara off.. men hur ska man då kunna definiera variablerna? Vad skriver man..

typ motsvarande dim i asp.. eller så..

jag har sökt runt i forumet men inte hittat...

;)

SPiNMedlem sedan mars 20007 896 inlägg
#9

I PHP behöver man inte dimma, det räcker med att de har ett värde - så är de definierade. :)

Ex. med register_globals = off:

<?php
// Servervariabler
echo "Din IP-address: " . $_SERVER[ 'REMOTE_ADDR' ] . "<br />";

// GET-variabler
if ( isset ( $_GET[ 'namn' ] ) && $_GET[ 'namn' ] != "" ) { // Kolla med funktionen isset () om en variabel är satt, dvs. definierad
     echo "Namn från addressfältet: " . $_GET[ 'namn' ] . "<br />";
}
else {
     echo "Inget namn skickades via GET. :(<br />";
}
?>
TypeMedlem sedan mars 20021 239 inlägg
#10

kämpigt....

Den där koden verkade inte lätt precis :)

iof är jag glad.. för mitt funkar ju ialla fall! så det är lugnt

Nu till ett annat problem (nu är jag kanske i fel tråd):

Hur skapar man en dsn i iis??? Jag får bara fel...

/ :stud

SPiNMedlem sedan mars 20007 896 inlägg
TypeMedlem sedan mars 20021 239 inlägg
#12

Näe

Vad skulle jag göra utan dig???

Ska testa det nu

Sorry :l

TypeMedlem sedan mars 20021 239 inlägg
#13

näe.. eller jo.. eller det går inte iaf

Nu får jag ett annat felmess...

ett bra felmess tror jag, fast jag vet inte hur jag ska kunna fixa till det :)

<?
if($p=='read')
{
print("du vill läsa gästboken");
$odbcPekare = odbc_connect ( "myDSN", "", "" );
$odbcResult = odbc_exec( $odbcPekare, "SELECT * FROM gastbokdata" );
$i = 0;
while ( $curRow = odbc_fetch_array($odbcResult) ) 
{
echo "<b>Rad " . ++$i . "</b><br />";
echo "Fält 1: " . $curRow[ 'ID' ] . "<br />";
echo "Fält 2: " . $curRow[ 'namn' ] . "<br />";
}
odbc_close ( $odbcPekare );
}
?>

Felmesset jag får är :

Fatal error: Call to undefined function: odbc_fetch_array() in C:\Documents and Settings\Erik\Skrivbord\erik\gastbok.php on line 15

Rad 15 är raden där det står while ( $curRow = odbc_fetch_array($odbcResult) )

Tacksam för hjälp :r

SPiNMedlem sedan mars 20007 896 inlägg
#14

Vilken version av PHP kör du? Det verkar som att Zend(?) har "tappat bort" den funktionen i 4.1.1 nämligen.

Försök med följande istället: ( Innan while-slingan )

<?php
if($p=='read') {
     print("du vill läsa gästboken");

     $odbcPekare = odbc_connect ( "myDSN", "", "" );
     $odbcResult = odbc_exec( $odbcPekare, "SELECT * FROM gastbokdata" );

     $i = 0;

     odbc_fetch_into ( $odbcResult, &$odbcFetching );
     while ( $curRow = array_slice ( $odbcFetching ) ) {
          echo "<b>Rad " . ++$i . "</b><br />";
          echo "Fält 1: " . $curRow[ 0 ] . "<br />";
          echo "Fält 2: " . $curRow[ 1 ] . "<br />";
     }

     odbc_close ( $odbcPekare );
}
?>

Märk att du måste använda index-numrena när du hämtar värden från aktuell rad. Du kan komma undan med det genom att skriva en liten funktion som gör om till en associativ array. :)

TypeMedlem sedan mars 20021 239 inlägg
#15

Det gick inte heller....

Det går inte heller.... felet blir nu:

Warning: Wrong parameter count for array_slice() in C:\Documents and Settings\Erik\Skrivbord\erik\gastbok.php on line 17

Måste man krångla till det så till den milda grad??

SPiNMedlem sedan mars 20007 896 inlägg
#16

Jag hade inget bättre för mig, så jag skrev ihop en liten funktion:

if ( !function_exists ( odbc_fetch_array ) ) {
     function odbc_fetch_array ( $odbcResult ) {
          odbc_fetch_into ( $odbcResult, &$odbcFetching );

          foreach ( $odbcFetching as $key => $odbcValue ) {
               $odbcFetchedArray[ odbc_field_name ( $odbcResult, $key + 1 ) ] = $odbcValue;
          }
          return $odbcFetchedArray;
     }
}

Red.} Hittade en skön foreach-slinga på PHP.net som var smidig. :)

TypeMedlem sedan mars 20021 239 inlägg
#17

*lol*

Problemet är att jag inte vet hur jag ska använda funktionen :e

SPiNMedlem sedan mars 20007 896 inlägg
#18

Hm, jag har nu kollat och kollat på PHP.net för att hitta enkla lösningar och funktioner för ODBC, men jag märker bara att det blir krångligare och krångligare. :l

Eftersom att du är nybörjare så ska jag visa ett exempel på hur du använder COM mot Access, som nicclas också visade högre upp i förra tråden... Det är ivf lite enklare att förstå och ta till sig förhoppningsvis.

<?php
$comConnection = new COM ( "ADODB.Connection" );
$comConnection->Open ( "DSN=myDSN" );
$comRecordset = $comConnection->Execute ( "SELECT ID, [namn] FROM gastbokdata" );

$rowCounter = 0;

while ( !$comRecordset->EOF ) {
     echo "Rad: " . ++$rowCounter . "<br />";
     echo "ID: " . $comRecordset->Fields ( 0 );
     echo "Namn: " . $comRecordset->Fields ( 1 );

     $comRecordset->MoveNext ();
}

$comRecordset->Close ();
$comConnection->Close ();

Samma sak gäller dock här, du måste veta index-numrena på de fält du ska skriva ut. :l
Ska se om jag kan hitta en vettig funktion alternativt skriva en egen för att skapa en associativ array... :)

TypeMedlem sedan mars 20021 239 inlägg
#19

Jag ska ta o fundera kring detta...

Jag måste ta o sova nu. är jättetrött..

tack för all hjälp! du har verkligen varit till stor hjälp, känns som att jag inte skulle klara det utan guide....

TACK! / ;)

SPiNMedlem sedan mars 20007 896 inlägg
#20

Såg nu en miss jag hade gjort i ett inlägg här över, hade använt fel funktion... :r

Försök med följande kod, så kanske du får ODBC att fungera:

<?php
if($p=='read') {
     print("du vill läsa gästboken");

     $odbcPekare = odbc_connect ( "myDSN", "", "" );
     $odbcResult = odbc_exec( $odbcPekare, "SELECT * FROM gastbokdata" );

     $i = 0;

     odbc_fetch_into ( $odbcResult, &$odbcFetching );
     while ( $curRow = array_shift ( $odbcFetching ) ) {
          echo "<b>Rad " . ++$i . "</b><br />";
          echo "Fält 1: " . $curRow[ 0 ] . "<br />";
          echo "Fält 2: " . $curRow[ 1 ] . "<br />";
     }

     odbc_close ( $odbcPekare );
}
?>

Koden är från inlägg: http://www.webforum.nu/showthread.php?s=&postid=351783#post351783
Använde tydligen array_slice () istället för array_shift (), som bör användas... *trött*

146 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
142 ms — hämta tråd, inlägg och bilagor (db)