Avatar billede hollow Nybegynder
01. november 2009 - 04:29 Der er 7 kommentarer og
1 løsning

variabel i MySQL_query

Hvordan kan det være at min variabel $test ikke virker i min mysql_query..


jeg har prøvet at skrive:

'".$test."'

".$test."

'.$test.'

i mysql_query linien.. men kan ikke få det til at virke


####### KODE ########

<?php

session_start();
if(!session_is_registered(myusername)){
header("location:index.php");
}

include("mysql.php");
include("config.php");

    $query = mysql_query("SELECT * FROM customer WHERE id = '$_GET[id]'");
    $row = mysql_fetch_array($query);



$test = ''.$row[firm].'';

function orders() {
   
$query = mysql_query("SELECT * FROM contracts WHERE customer_firm = $test ");
while($order = mysql_fetch_array($query)) {

echo '
<table width="560" border="0" cellspacing="1" cellpadding="10">
                <tr>
                  <td align="left" valign="top" bgcolor="#F7F7F7">'.$order[description].'</td>
                  <td width="80" align="center" valign="top" bgcolor="#F7F7F7">'.$order[amount].'</td>
                  <td width="80" align="center" valign="top" bgcolor="#F7F7F7">'.$order[price].'</td>
                  <td width="100" align="center" valign="top" bgcolor="#F7F7F7">'.$order[status].'</td>
                </tr>
              </table>';
    }
}



?>
Avatar billede hollow Nybegynder
01. november 2009 - 04:31 #1
det skal lige siges at hvis jeg går ind og difinere hvad $test skal være i min query.. eks 'virksomhedensnavn' så virker det fint.
Avatar billede showsource Seniormester
01. november 2009 - 07:00 #2
En var skal gøres global for at kunne bruges i en funktion.

function orders() {

global $test;


......

Eller du kan bruge som parameter til din funktion

function orders($var) {


Du kan også bruge define()
define() er global.

define("TESTER", "noget");

function orders() {

$sql = "SELECT * FROM tabel WHERE firma = '".TESTER."'";



Derudover vil jeg anbefale dig at holde php og mysql adskilt som i ovenstående ex. med TESTER
Samt som min. bruge flg. funktion:

function safe_sql($value) {

    $value = trim($value);

    $value = (get_magic_quotes_gpc() ? $value : addslashes($value));

    $value = (is_numeric($value) ? $value : "'".$value."'");

    return $value;
}

$sql = "SELECT * FROM customer WHERE id = ".safe_sql($_GET["id"]);
Avatar billede hollow Nybegynder
01. november 2009 - 10:19 #3
ok.. god beskriveslse

ved at definere $row ved en forespørgsel i databasen, kan jeg så evt godt putte noget ind fra min database således?

define("TEST",".$row[testdata].");
Avatar billede dkfire Nybegynder
01. november 2009 - 13:05 #4
Hvis du har en variabel som ændre sig, så skal du ikke definere den som en konstant.
En konstant kan ikke ændre værdi når først den er defineret.

Du bør måske tage et skridt tilbage og overveje om der er behov for at lave bruge en funktion der.
En funktion skal kun laves hvis det giver mening.
Skal din kode genbruges andre steder på siden ?
Skal din kode genbruges på andre sider ?
Hvis ikke der er tilfældet, så skal du ikke lave en funktion.

Jeg ville anbefale dig, hvis du beholder funktionen, at bruge det andet forslag fra showsource. Lad din funktion modtage en parameter.

Du bør også kigge lidt på hvordan man bruger elementer i et array og til går dem.
Når du skal hente noget fra f.eks $_GET med et navn skal du bruge ' rundt om navnet, $_GET['id'].
Når du så vil bruge det i en streng, kan det gøres på flere måder:
$string = "Her er noget fra {$_GET['id']}";
$string = "Her er noget fra ".$_GET['id'];
I din tilfælde:
$query = mysql_query("SELECT * FROM customer WHERE id = {$_GET['id']}");
eller
$query = mysql_query("SELECT * FROM customer WHERE id = ".$_GET[id]);
Da dit id sikkert er et tal i databasen skal der ikke ' rundt om værdien, læg mærke til at jeg har fjernet dem.
01. november 2009 - 13:34 #5
Jeg proevede at lave en funktion med en variable $test som skal kaldes.  I saa fald synes '$test' at virke i mysql kaldet.  Jeg har lavet nedenstaaende kode som jeg har tested paa en databasetabel som kommer sidst.  Det virker.  Du kan kikke paa http://christianjorgensen.be/hollow1.php.

Jeg vil gaette paa at et problem er den maade du definerer $test paa som ''.$row[firm].''  Jeg vil mene (men har ikke testet det) at det simpelthen skal vaere $test = $row[firm] 

For at teste resten af koden har jeg lavet et funktion kald orders("firm3").

Proev det ud.  Hvis det ikke virker saa fortael mig.  Og hav fortsat et god soendag.

Her er koden:

<html>
<head>
  <title></title>
</head>

<body>
</body>
</html>

<?php

session_start();
if(!session_is_registered(myusername))
{
header("location:index.php");
}

include("mysql.php");
include("config.php");

//****min databaseforbindelse
$link = mysql_connect ('christianjorgensen.be.mysql', 'christianjoygen', 'dnyBKKbe') or die(mysql_eror());
mysql_select_db('christianjoygen') or die('Could not select database');
//****

/*$query = mysql_query("SELECT * FROM customer WHERE id = '$_GET[id]'");
$row = mysql_fetch_array($query);
$test = ''.$row[firm].'';*/

orders("firm3");

function orders($test)

  $query = mysql_query("SELECT * FROM contracts WHERE firm = '$test' ") or die(mysql_error());
  while($order = mysql_fetch_array($query))
  {
    echo '
      <table width="560" border="0" cellspacing="1" cellpadding="10">
        <tr>
          <td align="left" valign="top" bgcolor="#F7F7F7">'.$order[description].'</td>
          <td width="80" align="center" valign="top" bgcolor="#F7F7F7">'.$order[amount].'</td>
          <td width="80" align="center" valign="top" bgcolor="#F7F7F7">'.$order[price].'</td>
          <td width="100" align="center" valign="top" bgcolor="#F7F7F7">'.$order[status].'</td>
        </tr>
      </table>
    ';
  }
}


//****
mysql_close($link);
//****
?>

</body>
</html>

Og her er tabellen:


firm  description  amount  price  status 
      firm1 descr1 10 100 statsus1
      firm2 descr2 20 200 statsus2
      firm3 descr3 30 300 statsus3
      firm4 descr4 40 400 statsus4
      firm5 descr5 50 500 statsus5
Avatar billede dkfire Nybegynder
01. november 2009 - 15:00 #6
Christian_Belgien: To ting til din kommentar. Du gentager jo allerede noget som er sagt før og så lægger det et svar og IKKE en kommentar. Det er normalt praksis at først lægge et svar når spørgsmålet er løst.
01. november 2009 - 17:05 #7
dkfire, tak for din vejledning.
(1)  Mens jeg arbejdede med spoergsmaalet, hvilket tog nogen tid, sendte du dit indlaeg hvilket jeg ikke havde set da jeg 29 minutter senere sendte mit.
(2)  Jeg mener at mit indlaeg svarer paa det stillede spoergsmaal.  Derfor sendte jeg det som et svar.  I FAQ staar der at der er delte meninger om hvornaar man skal sende kommentarer og hvornaar svar.  Du og jeg stoetter aabenbart hver sin side.

Men jeg foreslaar ikke at bruge mere krudt paa at argumentere med hinanden.
Avatar billede showsource Seniormester
02. november 2009 - 20:23 #8
Nåh, hva' fa'n, var det Søndag ?
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