Just nu i M3-nätverket
Gå till innehåll
Aktuellspeedway.se

Köra PHP funktion i en annan funktion

Rekommendera Poster

Aktuellspeedway.se

Är det möjligt att köra en funktion i en annan funktion?

Med risk för att krångla till det ska jag ändå försöka förklara vad jag försöker åstadkomma.

I korthet har jag ett PHP script som skapar en HTML-sida, denna HTML sidan används sen i vårat livescore system för att minska anslutningar till databasen.

Då det gäller sporten speedway ska 20 heat skrivas ut. Hittills har jag uppnått 1 heat och det är den huvudsaklig funktionen som jag då vill skriva ut 20 ggr.


Koden som jag nu har är (har tagit bort delar som inte är väsentliga, jag vill altså kunna köra createliveo och spara alla "heaten" till samma dokument
 


function heatbyheat(){
>funktionen<
$doc->save('live'.$match.'.html');
}



function createlive($matchID) {
global $con;
    heatbyheat("SH1","CH1","BH1","PH1","H1","PH1","H1","Heat 1",$matchID);
    heatbyheat("SH2","CH2","BH2","PH2","H2","PH1+PH2","H1+H2","Heat 2",$matchID);
    heatbyheat("SH3","CH3","BH3","PH3","H3","PH1+PH2+PH3","H1+H2+H3","Heat 3",$matchID);
    heatbyheat("SH4","CH4","BH4","PH4","H4","PH1+PH2+PH3+PH4","H1+H2+H3+H4","Heat 4",$matchID);
    heatbyheat("SH5","CH5","BH5","PH5","H5","PH1+PH2+PH3+PH4+PH5","H1+H2+H3+H4+H5","Heat 5",$matchID);
    heatbyheat("SH6","CH6","BH6","PH6","H6","PH1+PH2+PH3+PH4+PH5+PH6","H1+H2+H3+H4+H5+H6","Heat 6",$matchID);
    heatbyheat("SH7","CH7","BH7","PH7","H7","PH1+PH2+PH3+PH4+PH5+PH6+PH7","H1+H2+H3+H4+H5+H6+H7","Heat 7",$matchID);
	....OSV....
}


 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Mr Andersson

Förstår inte riktigt vad du är ute efter.

Du kan anropa en funktion inne i en annan:

f1();



function f1() {

   $x = f2(5);

   echo $x;  // Skriver ut talet 50

}



function f2($value) {

  return(10 * $value);

}

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Aktuellspeedway.se

Verkar som att jag får sälva den delen att funka, men sen genereras det

"Fatal error: Call to a member function heatbyheat()" 
"Fatal error: Call to a member function save()" 

Felet ligger väl förmodligen någon annanstans 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Aktuellspeedway.se

Jag har funktionen heatbyheat(), den skapar en html tabell som senare ska skrivas till en html fil.

Sen med hjälp av funktionen createlive() vill jag köra heatbyheat() 25 ggr och sen skapa html filen.

createlive ser då således ut såhär

createlive(){
heatbyheat()
heatbyheat()
heatbyheat()
heatbyheat()
$doc->save('live'.$match.'.html');
}

Någon som har idè om hur man får det att funka. $doc verkar inte kunna samla in datan den ska skriva från funktionerna.

Lägger jag $doc->save('live'.$match.'.html'); i heatbyheat() funktionen funkar det prima, men då blir det logiskt sett bara 1 heat som skrivs ut och inte alla 25.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
.M

Jag tror vi behöver lite mer sammanhang av koden. Vad är $doc för något? Jag misstänker att det är ditt html-dokument som du vill spara, men var är den deklarerad någonstans? Och i ditt exempel så verkar heatbyheat bara anropa save metoden, den borde väl lägga till element också?

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Aktuellspeedway.se

Funktionen heatbyheat(), den funktionen funkar som planerat.

 


global $con;

$doc = new DOMDocument('1.0');
$root = $doc->createElement('html');
$root = $doc->appendChild($root);
$head = $doc->createElement('head');
$head = $root->appendChild($head);
$title = $doc->createElement('title');
$title = $head->appendChild($title);


$css_text='

a{color:#4682B4;text-decoration:none;}
a:hover{color:#4682B4;text-decoration:underline;}

table {
    border-collapse:separate;
    border:solid black 1px;
    -moz-border-radius:8px;
    -webkit-border-radius: 8px;
    border-radius: 8px;
    width:100%;
    font-family: Arial, Helvetica, sans-serif;
    background: white;
    font-size:14px;
}
table th {
    background: linear-gradient(#2F4F4F, #708090);
    border-left:solid black 0px;
    border-top:solid black 0px;
    color:white;
    padding:3px;
   padding-bottom:8px;
    border-left:solid black 0px;
    border-top:solid black 0px;
}

table td {
    border-left:solid black 0px;
    border-top:solid black 0px;
    padding: 4px; 
    background: #F8F8FF;
}
table th:first-child {
  -moz-border-radius: 5px 0 0 0 !important;
    background-color: blue;
    border-top: none;
}
table th:last-child {
  -moz-border-radius: 0 5px 0 0 !important;
    background-color: blue;
    border-top: none;
}
table tr:last-child td:first-child {
  -moz-border-radius: 0 0 0 5px !important;
}
table tr:last-child td:last-child {
  -moz-border-radius: 0 0 5px 0 !important;
}
table tr:hover td {
  background-color: #F5F5F5
}

td:first-child, th:first-child {
     border-left: none;
}

tr td{text-align:center;}

.text-left	{text-align:left !important;width:40% !important}
.bold	{font-weight:bold;font-size:16px;text-align:left !important;padding:6px;    background: linear-gradient(#4682B4, #B0C4DE);color:white;}
.bold_sum	{font-weight:bold;font-size:16px;text-align:center !important;padding:6px;background: linear-gradient(#4682B4, #B0C4DE);color:white;}

.td_sum		{text-align:center;font-weight:bold;background:#B0C4DE !important;width:50px;}

.red		{background:#DEA5A3 !important;text-align:center;font-weight:bold;border:1px SOLID black !important;-moz-box-shadow: inset 0 0 5px #000000;-webkit-box-shadow: inset 0 0 5px#000000;box-shadow: inner 0 0 5px #000000;}
.blue		{background:#99CCFF !important;text-align:center;font-weight:bold;border:1px SOLID black !important;-moz-box-shadow: inset 0 0 5px #000000;-webkit-box-shadow: inset 0 0 5px#000000;box-shadow: inner 0 0 5px #000000;}
.white		{background:#FFFFFF !important;text-align:center;font-weight:bold;border:1px SOLID black !important;-moz-box-shadow: inset 0 0 5px #000000;-webkit-box-shadow: inset 0 0 5px#000000;box-shadow: inner 0 0 5px #000000;}
.yellow		{background:#FFFF99 !important;text-align:center;font-weight:bold;border:1px SOLID black !important;-moz-box-shadow: inset 0 0 5px #000000;-webkit-box-shadow: inset 0 0 5px#000000;box-shadow: inner 0 0 5px #000000;}
.green		{background:#8FBC8F !important;text-align:center;font-weight:bold;border:1px SOLID black !important;-moz-box-shadow: inset 0 0 5px #000000;-webkit-box-shadow: inset 0 0 5px#000000;box-shadow: inner 0 0 5px #000000;}
.black		{background:#A9A9A9 !important;text-align:center;font-weight:bold;border:1px SOLID black !important;-moz-box-shadow: inset 0 0 5px #000000;-webkit-box-shadow: inset 0 0 5px#000000;box-shadow: inner 0 0 5px #000000;}

';



$style = $doc->createElement('style', $css_text);//Create new <style> tag with the 
$domAttribute = $doc->createAttribute('type');//Create the new attribute 'type'
$domAttribute->value = 'text/css';//Add value to attribute
$style->appendChild($domAttribute);//Add the attribute to the style tag
$head->appendChild($style);//Add the style tag to document
$text = $doc->createTextNode('live.aktuellspeedway.se');
$text = $title->appendChild($text);
$body = $doc->createElement('body');
$body = $root->appendChild($body);
$table = $doc->createElement('table');
$domAttribute = $doc->createAttribute('class');
$domAttribute->value = 'scorecard';
$table->appendChild($domAttribute);
$body->appendChild($table);





$tr = $doc->createElement('tr');
$table->appendChild($tr);
$th = $doc->createElement('th', "$heatname");
$tr->appendChild($th);
$tdAttribute = $doc->createAttribute('colspan');
$tdAttribute->value = 6;
$th->appendChild($tdAttribute);








  $result = mysqli_query($con,'SELECT DriverID, '.$points.', '.$bonus.', '.$color.', '.$grind.', CASE WHEN '.$points.'=8 THEN 9 WHEN '.$points.'=7 THEN 8 WHEN '.$points.'=6 THEN 7 WHEN '.$points.'=5 THEN 6 WHEN '.$points.'=4 THEN 5 WHEN '.$points.'=3 THEN 4 WHEN '.$points.'=2 THEN 3 WHEN '.$points.'=1 THEN 2 WHEN '.$points.'=0 THEN 1 WHEN '.$points.'="N" THEN -1 ELSE 0 END as finish, f_namn, e_namn, url
    FROM resultat LEFT JOIN DATA_drivers ON DriverID=driver_id WHERE MatchID='.$match.' && '.$grind.'>0 ORDER BY finish DESC, '.$points.' ASC') or die(mysqli_error());
while($rad = mysqli_fetch_array($result)) {




$tr = $doc->createElement('tr');$table->appendChild($tr);

$td = $doc->createElement('td');
$img_src="http://www.aktuellspeedway.se/wp-content/themes/hueman/assets/asra/helm/".$rad[3].".png";
$img = $doc->createElement('img');$td->appendChild($img);
$domAttribute = $doc->createAttribute('src');
$domAttribute->value = $img_src;
$img->appendChild($domAttribute);
$tr->appendChild($td);


$td = $doc->createElement('td');
$domAttribute = $doc->createAttribute('class');
$domAttribute->value = 'text-left';
$td->appendChild($domAttribute);
$name="".$rad[6]." ".$rad[7]."";
$a_href="http://www.aktuellspeedway.se/forare/".$rad[8]."/";
$a = $doc->createElement('a', $name);
$domAttribute = $doc->createAttribute('href');
$domAttribute->value = $a_href;
$a->appendChild($domAttribute);
$td->appendChild($a);
$tr->appendChild($td);


$td = $doc->createElement('td', "Startspår $rad[4]");$tr->appendChild($td);
$td = $doc->createElement('td', "$rad[1]");$tr->appendChild($td);
$td = $doc->createElement('td', "$rad[2]");$tr->appendChild($td);


}


Men funktionen heatbyheat() skapar 1 heat och sen ska jag använda createlive() för att skapa 25 heat, med andra ord loopa heatbyheat()

 

global $con;

    $result = mysqli_query($con,"SELECT `schema` FROM schedule WHERE MatchID='".$matchID."'");
    while($rad = mysqli_fetch_array($result)){ $heatschema=$rad[0];}
    $schema = explode(".", $heatschema);
    $forare = explode("-", $schema[2]);
    $antal_heat=$schema[1];
    $antal_lag=$schema[0];
    $colspan=$antal_heat+2;
    $antal_forare=$forare[0];
    $extra_heat=$forare[1];


	echo "<hr>";
	IF($matchID>0){echo "<B>MatchID</B>:".$matchID."";}else{echo "Ingen match aktiverad";} echo "<br>";
	IF($antal_lag==""){echo "Match ".$matchID." är inte konfigurerad";}else{	



    heatbyheat("SH1","CH1","BH1","PH1","H1","PH1","H1","Heat 1",$matchID);
    heatbyheat("SH2","CH2","BH2","PH2","H2","PH1+PH2","H1+H2","Heat 2",$matchID);
    heatbyheat("SH3","CH3","BH3","PH3","H3","PH1+PH2+PH3","H1+H2+H3","Heat 3",$matchID);
    heatbyheat("SH4","CH4","BH4","PH4","H4","PH1+PH2+PH3+PH4","H1+H2+H3+H4","Heat 4",$matchID);
    heatbyheat("SH5","CH5","BH5","PH5","H5","PH1+PH2+PH3+PH4+PH5","H1+H2+H3+H4+H5","Heat 5",$matchID);
    heatbyheat("SH6","CH6","BH6","PH6","H6","PH1+PH2+PH3+PH4+PH5+PH6","H1+H2+H3+H4+H5+H6","Heat 6",$matchID);
    heatbyheat("SH7","CH7","BH7","PH7","H7","PH1+PH2+PH3+PH4+PH5+PH6+PH7","H1+H2+H3+H4+H5+H6+H7","Heat 7",$matchID);
    heatbyheat("SH8","CH8","BH8","PH8","H8","PH1+PH2+PH3+PH4+PH5+PH6+PH7+PH8","H1+H2+H3+H4+H5+H6+H7+H8","Heat 8",$matchID);
    heatbyheat("SH9","CH9","BH9","PH9","H9","PH1+PH2+PH3+PH4+PH5+PH6+PH7+PH8+PH9","H1+H2+H3+H4+H5+H6+H7+H8+H9","Heat 9",$matchID);
    heatbyheat("SH10","CH10","BH10","PH10","H10","PH1+PH2+PH3+PH4+PH5+PH6+PH7+PH8+PH9+PH10","H1+H2+H3+H4+H5+H6+H7+H8+H9+H10","Heat 10",$matchID);
    heatbyheat("SH11","CH11","BH11","PH11","H11","PH1+PH2+PH3+PH4+PH5+PH6+PH7+PH8+PH9+PH10+PH11","H1+H2+H3+H4+H5+H6+H7+H8+H9+H10+H11","Heat 11",$matchID);
    heatbyheat("SH12","CH12","BH12","PH12","H12","PH1+PH2+PH3+PH4+PH5+PH6+PH7+PH8+PH9+PH10+PH11+PH12","H1+H2+H3+H4+H5+H6+H7+H8+H9+H10+H11+H12","Heat 12",$matchID);
    heatbyheat("SH13","CH13","BH13","PH13","H13","PH1+PH2+PH3+PH4+PH5+PH6+PH7+PH8+PH9+PH10+PH11+PH12+PH13","H1+H2+H3+H4+H5+H6+H7+H8+H9+H10+H11+H12+H13","Heat 13",$matchID);
    heatbyheat("SH14","CH14","BH14","PH14","H14","PH1+PH2+PH3+PH4+PH5+PH6+PH7+PH8+PH9+PH10+PH11+PH12+PH13+PH14","H1+H2+H3+H4+H5+H6+H7+H8+H9+H10+H11+H12+H13+H14","Heat 14",$matchID);
    heatbyheat("SH15","CH15","BH15","PH15","H15","PH1+PH2+PH3+PH4+PH5+PH6+PH7+PH8+PH9+PH10+PH11+PH12+PH13+PH14+PH15","H1+H2+H3+H4+H5+H6+H7+H8+H9+H10+H11+H12+H13+H14+H15","Heat 15",$matchID);
    heatbyheat("SH16","CH16","BH16","PH16","H16","PH1+PH2+PH3+PH4+PH5+PH6+PH7+PH8+PH9+PH10+PH11+PH12+PH13+PH14+PH15+PH16","H1+H2+H3+H4+H5+H6+H7+H8+H9+H10+H11+H12+H13+H14+H15+H16","Heat 16",$matchID);
    heatbyheat("SH17","CH17","BH17","PH17","H17","PH1+PH2+PH3+PH4+PH5+PH6+PH7+PH8+PH9+PH10+PH11+PH12+PH13+PH14+PH15+PH16+PH17","H1+H2+H3+H4+H5+H6+H7+H8+H9+H10+H11+H12+H13+H14+H15+H16+H17","Heat 17",$matchID);
    heatbyheat("SH18","CH18","BH18","PH18","H18","PH1+PH2+PH3+PH4+PH5+PH6+PH7+PH8+PH9+PH10+PH11+PH12+PH13+PH14+PH15+PH16+PH17+PH18","H1+H2+H3+H4+H5+H6+H7+H8+H9+H10+H11+H12+H13+H14+H15+H16+H17+H18","Heat 18",$matchID);
    heatbyheat("SH19","CH19","BH19","PH19","H19","PH1+PH2+PH3+PH4+PH5+PH6+PH7+PH8+PH9+PH10+PH11+PH12+PH13+PH14+PH15+PH16+PH17+PH18+PH19","H1+H2+H3+H4+H5+H6+H7+H8+H9+H10+H11+H12+H13+H14+H15+H16+H17+H18+H19","Heat 19",$matchID);
    heatbyheat("SH20","CH20","BH20","PH20","H20","PH1+PH2+PH3+PH4+PH5+PH6+PH7+PH8+PH9+PH10+PH11+PH12+PH13+PH14+PH15+PH16+PH17+PH18+PH19+PH20","H1+H2+H3+H4+H5+H6+H7+H8+H9+H10+H11+H12+H13+H14+H15+H16+H17+H18+H19+H20","Heat 20",$matchID);
    heatbyheat("SH21","CH21","BH21","PH21","H21","PH1+PH2+PH3+PH4+PH5+PH6+PH7+PH8+PH9+PH10+PH11+PH12+PH13+PH14+PH15+PH16+PH17+PH18+PH19+PH20+PH21","H1+H2+H3+H4+H5+H6+H7+H8+H9+H10+H11+H12+H13+H14+H15+H16+H17+H18+H19+H20+H21","Heat 21",$matchID);
    heatbyheat("SH22","CH22","BH22","PH22","H22","PH1+PH2+PH3+PH4+PH5+PH6+PH7+PH8+PH9+PH10+PH11+PH12+PH13+PH14+PH15+PH16+PH17+PH18+PH19+PH20+PH21+PH22","H1+H2+H3+H4+H5+H6+H7+H8+H9+H10+H11+H12+H13+H14+H15+H16+H17+H18+H19+H20+H21+H22","Heat 22",$matchID);
    heatbyheat("SH23","CH23","BH23","PH23","H23","PH1+PH2+PH3+PH4+PH5+PH6+PH7+PH8+PH9+PH10+PH11+PH12+PH13+PH14+PH15+PH16+PH17+PH18+PH19+PH20+PH21+PH22+PH23","H1+H2+H3+H4+H5+H6+H7+H8+H9+H10+H11+H12+H13+H14+H15+H16+H17+H18+H19+H20+H21+H22+H23","Heat 23",$matchID);
    heatbyheat("SH24","CH24","BH24","PH24","H24","PH1+PH2+PH3+PH4+PH5+PH6+PH7+PH8+PH9+PH10+PH11+PH12+PH13+PH14+PH15+PH16+PH17+PH18+PH19+PH20+PH21+PH22+PH23+PH24","H1+H2+H3+H4+H5+H6+H7+H8+H9+H10+H11+H12+H13+H14+H15+H16+H17+H18+H19+H20+H21+H22+H23+H24","Heat 24",$matchID);
    heatbyheat("SH25","CH25","BH25","PH25","H25","PH1+PH2+PH3+PH4+PH5+PH6+PH7+PH8+PH9+PH10+PH11+PH12+PH13+PH14+PH15+PH16+PH17+PH18+PH19+PH20+PH21+PH22+PH23+PH24+PH25","H1+H2+H3+H4+H5+H6+H7+H8+H9+H10+H11+H12+H13+H14+H15+H16+H17+H18+H19+H20+H21+H22+H23+H24+H25","Heat 25",$matchID);


$doc->save('live'.$match.'.html');
}

Detta anropas ju då sen av

    createlive($match1);
    createlive($match2);

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
.M

Nu skriver du inte ut funktions deklarationerna. Är det första kodblocket heatbyheat? I så fall skapar du där ett nytt html-dokument, varje gång du anropar funktionen och eftersom $doc är lokalt deklarerad i funktionen så kan du inte anropa $doc->save i en annan funktion.

 

Vill du att varje anrop till heatbyheat ska skapa en fil eller skall de alla anrop läggas till till en och samma fil? Om det är de senare så måste du ha en funktion som först skapar dokumentet $doc, lägger till css och enklare struktur som head, title, body osv. Sen får du i heatbyheat enbart lägga till de tabeller eller tabellrader till $doc som du läser från din databas. Sen kan du i createlive anropa $doc->save. Så kommer du få alla 25-anrop att spara till en och samma fil. Men du måste komma ihåg att deklarera $doc i global scope, annars kommer det inte att fungera.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Aktuellspeedway.se

Tack så mycket! Nu börjar det närma sig vad jag vill åstadkomma.

Dock skrivs fortfarande inte själva databas datan ut, så får pila lite med det.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
.M

Jag tror du glömt $doc->appendChild($table) eller liknande.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Aktuellspeedway.se

Nu satt den... Stort tack för hjälpen.

Precis det jag missat.

Redigerad av Aktuellspeedway.se

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...