Avatar billede compac Seniormester
24. oktober 2005 - 12:12 Der er 16 kommentarer og
1 løsning

definition af variable

Jeg kunne godt tænke mig at få styr på at definere variable ud fra et eksempel:

Fil 1 : administrator.php

<?php require mainside.php; ?>
<?php
   
  if($txtId != ""  &&  $selArticle == "0"  )  {
        doUpdate($txtId,$txtStartDate,$txtEndDate,
                $txtHeader,$txtTeaser,$txtMaintext,$txtLink);
        print("Database updated.");
      }
?>     
<html>
<head>
<title>Adminpage</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<form action="administrator.php" method="POST">

<table width="40%" border="1" cellspacing="0" cellpadding="2">
  <tr valign="top">
    <td width="43%">Choose article here</td>
    <td width="57%">
      <select name="selArticle">
        <option selected value="0">--- Choose article here ---</option>
        <?php getHeaders(); ?>
      </select>
    <input type="hidden" name="txtId" value="<?php print(unFormatData($row[0])); ?>">
    </td>
  </tr>
  <tr valign="top">
    <td width="43%">Publish date</td>
    <td width="57%">
      <input type="text" name="txtStartDate" value="<?php print(unFormatData($row[1])); ?>">
    </td>
  </tr>
 
  </tr>
  <tr valign="top">
    <td width="43%" height="23">Header</td>
    <td width="57%" height="23">
      <input type="text" name="txtHeader" value="<?php print(unFormatData($row[3])); ?>">
    </td>
  </tr> 
  <input type="submit" name="submit" value="Submit">
      <input type="reset" name="reset" value="Reset">
    </td>
  </tr>
</table>
</form>
</body>
</html>

fil 2. mainside.php


<?php
function hookUpDb(){
    Global $connection;
    /*config connection to database*/
    $host = 'localhost';
    $user = 'root';
    $password = '';
    $db = 'tutorialdb';
    /*connect to the database*/
    if(mysql_connect($host,$user,$password)){
      $connection = mysql_connect($host,$user,$password);
      mysql_select_db($db,$connection);
      return $connection;
    }else{
      print("<b>Sorry, cannot connect to the database.</b>");
    }
}
function getHeaders(){
    Global $connection;
    $today = date("Ymd");
    hookUpDb();
    $query = "SELECT id,header
    FROM content
    ORDER BY start_date DESC";
          $result = mysql_query($query,$connection);
          while ($row = mysql_fetch_row($result)){
                $id = $row[0];
                $header = unFormatData($row[1]);
                print("<option value=\"$id\">
                      $header</option>\n");
          }
          mysql_free_result($result);
          mysql_close($connection);
}
function unFormatData($string){
    $string = stripslashes($string);
    return $string;
}

function doInsert($txtStartDate,$txtEndDate,$txtHeader,$txtTeaser,$txtMaintext,$txtLink){
    Global $connection;

    $txtStartDate = formatData($txtStartDate);
    $txtEndDate = formatData($txtEndDate);
    $txtHeader = formatData($txtHeader);
    $txtTeaser = formatData($txtTeaser);
    $txtMaintext = formatData($txtMaintext);
    $txtLink = formatData($txtLink);
       
    hookUpDb();

    $query = "INSERT INTO content
----- osv.
}

function doUpdate($txtId,$txtStartDate,$txtEndDate,$txtHeader,$txtTeaser,$txtMaintext,$txtLink){
    Global $connection;
   
    $txtStartDate = formatData($txtStartDate);
    $txtEndDate = formatData($txtEndDate);
    $txtHeader = formatData($txtHeader);
    $txtTeaser = formatData($txtTeaser);
    $txtMaintext = formatData($txtMaintext);
    $txtLink = formatData($txtLink);
   
    hookUpDb();
    $query = "UPDATE content SET .....osv.

når jeg definerer variabler kommer der fejmedd. som:
undefinded variable, hvis det er med POST GET el. REQUEST
-og ellers undefined index.

Koden er ikke fuldstændig men blot et udpluk.
Avatar billede mortenkjeldberg Nybegynder
24. oktober 2005 - 13:12 #1
Variable defineret i en funktion kan ikke ses fra en anden og heller ikke fra selve "hovedscriptet" med mindre du skriver global foran. Kunne det være det? Ellers skal du lige sende den helt præcise fejl text.
Avatar billede compac Seniormester
24. oktober 2005 - 14:26 #2
I det tilfælde, står i mit eksempel skriver den:
Notice: Undefined variable: txtId in C:\Programmer\apacheserver\Apache2\htdocs\guru\admin.php on line 4

Hvis jeg så indsætter $_REQUEST['txtID'] skriver den
Notice: Undefined index: txtId in C:\Programmer\apacheserver\Apache2\htdocs\guru\admin.php on line 4
Avatar billede mortenkjeldberg Nybegynder
24. oktober 2005 - 14:30 #3
Der er heller ikke noget der hedder txtID som bliver tildelt værdi nogen steder.
Avatar billede compac Seniormester
24. oktober 2005 - 14:41 #4
Jo, det ligger i en input-sætning længere nede på siden.
Avatar billede mortenkjeldberg Nybegynder
24. oktober 2005 - 15:01 #5
OK. Prøv med $_POST['txtID'].
Avatar billede mortenkjeldberg Nybegynder
24. oktober 2005 - 15:04 #6
Undskyld -> $_REQUEST['txtId'] Det er ikke med stort 'D'
Avatar billede compac Seniormester
24. oktober 2005 - 15:05 #7
Den siger:

Notice: Undefined index: txtId in C:\Programmer\apacheserver\Apache2\htdocs\guru\admin.php on line 4
-og det gør $_GET['txtID'] også.
Avatar billede compac Seniormester
24. oktober 2005 - 15:11 #8
Ang. txtId
Ja, jeg har skrevet forkert i mine svar til dig her på siden, men i min kode (og efterfølgende rettelser) er det ok.
Avatar billede compac Seniormester
24. oktober 2005 - 15:42 #9
- og de fejlmeddelelser, som det handler om, kommer der stadigvæk.
Avatar billede mortenkjeldberg Nybegynder
24. oktober 2005 - 16:24 #10
Første gang du åbner denne side. Administrator.php kan jeg ikke se hvor txtId skulle være blevet initialiseret. Den bliver først sat når du submitter formen. Så det første tjek ved ikke hvad $txtId er. Det er også derfor den ikke kender det index.

Prøv evt at sætte følgende kode ind i din if på l.4:

if(isset($txtId)  &&  $selArticle == "0"  )
Avatar billede compac Seniormester
24. oktober 2005 - 17:14 #11
Ja, det hjalp. Men næste gang den møder txtId kommer fejlen (naturligvis) igen.
Hvordan får jeg defineret txtId, så det virker gennem hele programforløbet?
Avatar billede mortenkjeldberg Nybegynder
24. oktober 2005 - 17:46 #12
Hvor møder den txtId igen?

Sæt evt. en else del på din if hvor txtId sætetes til ""
Avatar billede compac Seniormester
24. oktober 2005 - 18:22 #13
Ja, det er jo ulempen ved at lave et udsnit af et programeksempel, men i det originale program ligger der disse linier efter 6. linie:

}elseif($submit !="" && $txtId == "" && $txtStartDate != ""){
        }elseif(($submit))&& $txtId && (!isset($txtStartDate))){
        doInsert($txtStartDate,$txtEndDate,
                $txtHeader,$txtTeaser,$txtMaintext,$txtLink);
        print("Data inserted.");

-sætter man her txtId til isset($txtId) så opstår fejlen for $submit på samme linie.
Avatar billede mortenkjeldberg Nybegynder
24. oktober 2005 - 20:21 #14
Du har noget som du ikke kan være sikker på bliver sat hver gang. Det bliver du nødt til at tage forbehold for. Inden din første if sætning kunne du gøre følgende :

if ($_REQUEST er tomt) {
  $txtId = "";
  $submit = "";
}
Avatar billede compac Seniormester
24. oktober 2005 - 21:35 #15
Jeg kunne godt tænke mig at vide om ikke programmets opbygning er ideelt:

1.kriterier i en fil
2. html- i samme fil
3. funktioner i en fil for sig selv.

Problemet er, såvidt jeg kan se, at kriterierne ligger før html-oplysningerne??

Er der ikke løsning på det?
Avatar billede mortenkjeldberg Nybegynder
24. oktober 2005 - 21:42 #16
Dine HTML-ting får først en værdi når du submitter din form så vidt jeg ved. Det er det der driller dig. Selvom du satte dine kriterier under html'en ville de stadig ikke have en værdi første gang. Derfor bliver du nødt til at lave tjekkene.
Avatar billede compac Seniormester
25. oktober 2005 - 15:22 #17
Måske ikke den mest smarte måde at løse problemet, men det er en måde:
if (!isset($first) or $first != 1) {
      ($txtId = "");
      ($selArticle = "");
      ($txtStartDate = "");
      ($txtEndDate = "");
      ($txtHeader = "");
      ($txtMaintext = "");
      ($txtLink = "");
      ($submit = "");
      ($first = 1); 
}
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