Gå til innhold

[Løst] $variabel fra while loop


Anbefalte innlegg

Hvordan kan jeg få satt en $variabel til hver output fra db?

SOm du ser av koden under så spytter den ut alle rader som passer til søket, men jeg trenger å få assignet en $variabel til hver av dem.

 

Slik at det blir noe slikt:

 

$delenr1

$delenavn1

..

..

$delenr2

$delenavn2

..

..

etc

 

$query  = "SELECT * FROM delebestilling WHERE lev = 'K-H Service' AND status = 'Ikke bestilt'";
$result = mysql_query($query);

if(mysql_num_rows($result)) {
echo "<table width=\"600\" border=\"1\">".
 " <tr><td><strong>K-H Service</strong></td><td><input type=\"submit\" name=\"sendKH\" id=\"sendKH\" value=\"Send denne\" /></td></tr>";

while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
  echo "<tr><td>Servicenr :{$row['delenr']}</td>" .
	 "<td>Innlevert : {$row['delenavn']}</td>" .
	 "<td>Kunde :{$row['deleplass']}</td> " .
        "<td>Merke : {$row['deleantall']}</td> " .
	 "<td>Modell : {$row['delepris']}</td></tr><br> " ;

Lenke til kommentar
Videoannonse
Annonse

Tenkte å bruke det til flere ting, men bla for å kunne sette verdiene inn i en tabell for å sende med en mail funksjon, slik jeg har det nå så viser den jo informasjonen i tabellen, men jeg får ikke til å sende den med innhold.

 

Slik informasjonen kommer fra koden over skjønner jeg ikke hvordan jeg skal kunne bruke den videre uten å gi en $variabel til hver del..

Lenke til kommentar


$delebestillinger = array();
$count = 0;
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{

$count++;

$delebestillinger[] =  "nr{$count}" => array ( "Servicenr" => $row['delenr'],
                                      	   "Innlevert" => $row['delenavn'],
                                         	"Kunde" => $row['deleplass'],
                                         	"Merke" => $row['deleantall'],
                                      	   "Modell" => $row['delepris']); 

}

 

Noe sånt... Mulig jeg har gjort noen feil, men du skjønner nok hva jeg mener.

Lenke til kommentar

Feil. Den overskriver ingenting.

$delebestillinger[] = 

betyr at du legger til et nytt element i arrayen.

 

Du kan altså skrive dette under while loopen dersom du ikke skjønner hvordan det fungerer:

 

echo '<pre>';
print_r($delebestillinger);
echo '</pre>';

Endret av Warz
Lenke til kommentar

Hvordan skiller den alle $delebestillinger fra hverandre, hvis jeg vil ha info fra f.eks rad 3 (loop 3)?

 

Tenkte å prøve ut den koden litt lenger opp, men får en syntax feil på denne linjen, som jeg ikke kan finne..

$delebestillinger[] =  "nr{$count}" => array ( "Servicenr" => $row['delenr'],

Lenke til kommentar

Hvis du vil ha rad 3 skriver du:

print_r($delebestillinger[3]);

 

Ja, du får syntax feil fordi koden er feil. Hvis jeg skjønner hva du prøver på rett kan du gjøre slik i stedet:

<?php
$delebestillinger = array();
$count = 0;
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
$count++;
$a = 'nr'.$count;
$a = array("Servicenr" => $row['delenr'],
       	"Innlevert" => $row['delenavn'],
       	"Kunde" 	=> $row['deleplass'],
       	"Merke" 	=> $row['deleantall'],
       	"Modell"	=> $row['delepris']
); 
}
?>

 

Da kan du ta:

echo nr1['Kunde'].'<br/>';
echo nr2['Kunde'];

 

osv...

Endret av Warz
Lenke til kommentar

Der virket den ja, og den viser innholdet som du sier ved å bruke

echo '<pre>';
print_r($delebestillinger);
echo '</pre>';

 

Men så støter jeg på problemer når denne informasjonen skal brukes videre.

 

En ting det skal brukes til er å sende en enkel epost, det har jeg gjort tidligere ved å bruke mail funksjonen også brukt $variabler for variable elementer i eposten, men prøver jeg det samme nå får jeg følgende på mailen:

Array

 

 

Da har jeg bare brukt

<?
$to = "[email protected]";
$subject = "test";

$message = "$delebestillinger[1]";

// Always set content-type when sending HTML email
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=utf-8" . "\r\n";

{
   mail($to,$subject,$message,$headers);
}   
?>

Endret av Actibus
Lenke til kommentar

Der virket den ja, og den viser innholdet som du sier ved å bruke

echo '<pre>';
print_r($delebestillinger);
echo '</pre>';

 

Men så støter jeg på problemer når denne informasjonen skal brukes videre.

 

En ting det skal brukes til er å sende en enkel epost, det har jeg gjort tidligere ved å bruke mail funksjonen også brukt $variabler for variable elementer i eposten, men prøver jeg det samme nå får jeg følgende på mailen:

Array

 

 

Da har jeg bare brukt

<?
$to = "[email protected]";
$subject = "test";

$message = "$delebestillinger[1]";

// Always set content-type when sending HTML email
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=utf-8" . "\r\n";

{
   mail($to,$subject,$message,$headers);
}   
?>

$delebestillinger[1] inneholder en array. Hvis du har gjort som Vetle skriver inneholder denne altså:

array ( "Servicenr" => $row['delenr'],
                                      	"Innlevert" => $row['delenavn'],
                                               "Kunde" => $row['deleplass'],
                                               "Merke" => $row['deleantall'],
                                      	"Modell" => $row['delepris']); 

 

 

Du kan ikke skrive echo $delebestillinger[1]; for da vil det stå "Array" på skjermen din. Samme gjelder når du sender en epost. Grunnen til dette er nettopp det at den inneholder en array. Du er dermed nødt til å skrive indexen i denne array for å få ut noe nyttig info. Slik som dette:

 

Det du derimot kan gjøre er å skrive:

echo $delebestillinger[1]['Innlevert'];

echo $delebestillinger[1]['Kunde'];

echo $delebestillinger[1]['Merke'];

echo $delebestillinger[1]['Modell'];

 

E-post må da bli noe slikt:

<?
$to = "[email protected]";
$subject = "test";

$message = 'Innlevert:' . $delebestillinger[1]['Innlevert'].'<br/>Kunde:' . $delebestillinger[1]['Kunde'].'<br/>Merke:' . $delebestillinger[1]['Merke'] . '<br/>Modell:' . $delebestillinger[1]['Modell'];

// Always set content-type when sending HTML email
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=utf-8" . "\r\n";

{
   mail($to,$subject,$message,$headers);
}   
?>

Lenke til kommentar

Fått det til å virke, men er det noen mulighet for å få den til å automatisk øke antall linjer i mailen basert på hvor mange rader den henter fra databasen?

 

$message = '<b>Vi ønsker å bestille følgende:</b> <br> '.
'Til servicenr: ' . $delebestillinger[0]['Servicenummer'] . ' - '. $delebestillinger[0]['Antall']. ' stk av: ' . $delebestillinger[0]['Delenr']. ' - ' . $delebestillinger[0]['Beskrivelse'].'<br>'.''. 
'Til servicenr: ' . $delebestillinger[1]['Servicenummer'] . ' - '. $delebestillinger[1]['Antall']. ' stk av: ' . $delebestillinger[1]['Delenr']. ' - ' . $delebestillinger[1]['Beskrivelse'].'<br><br><br>'.

 

Slik at hvis det hadde vært 3 rader, så hadde den lagt til en ny linje:

'Til servicenr: ' . $delebestillinger[2]['Servicenummer'] . ' - '. $delebestillinger[2]['Antall']. ' stk av: ' . $delebestillinger[2]['Delenr']. ' - ' . $delebestillinger[2]['Beskrivelse'].'<br>'.'

Endret av Actibus
Lenke til kommentar

Takk for forslaget!

Tror jeg fikk det til med en while loop:

 

Edit:

Eller kanskje ikke, koden under virker, men ikke når den settes inn i $message = " ", da vises kun koden i mailen..

 

$countb = 0;
while ($countb < $count) {
echo 'Til servicenr: ' . $delebestillinger[$countb]['Servicenummer'] . ' - '. $delebestillinger[$countb]['Antall']. ' stk av: ' . $delebestillinger[$countb]['Delenr']. ' - ' . $delebestillinger[$countb]['Beskrivelse'].'<br>';
$countb++; 
}

Endret av Actibus
Lenke til kommentar

Edit:

Eller kanskje ikke, koden under virker, men ikke når den settes inn i $message = " ", da vises kun koden i mailen..

 

$countb = 0;
while ($countb < $count) {
echo 'Til servicenr: ' . $delebestillinger[$countb]['Servicenummer'] . ' - '. $delebestillinger[$countb]['Antall']. ' stk av: ' . $delebestillinger[$countb]['Delenr']. ' - ' . $delebestillinger[$countb]['Beskrivelse'].'<br>';
$countb++; 
}

 

Den koden der blir kjørt så lenge $countb er mindre enn $count. Har du definert $count noe sted? Hvis ikke vil det jo ikke fungere.

 

Du må skjøte message, noe slikt:.

$count = 4;
$countb = 0;
$message = '';
while ($countb < $count) {
$message .= 'Til servicenr: ' . $delebestillinger[$countb]['Servicenummer']  . ' - '. $delebestillinger[$countb]['Antall']. ' stk av: ' .  $delebestillinger[$countb]['Delenr']. ' - ' .  $delebestillinger[$countb]['Beskrivelse'].'<br>';
$countb++; 
}

Legg merke til punktumet før = tegnet. Det gjør at $message blir tatt vare på og setningen skjøtes på hver gang loopen blir kjørt. Etter while loopen er helt ferdig skal $message inneholde en string med alt sammen som du kan sende i mailen.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...