[PHP] Vreemde output bij aanroepen functie *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb de volgende functie geschreven:

(linebreaks toegevoegd voor betere leesbaarheid)

PHP:
1
2
3
4
function print_delete_option($url, $message = 'Weet je zeker dat je dit item wilt verwijderen?', $value = 'x') {
  echo '<a href="javascript:DoConfirm(\'' . $message . '\',\'' . $url . '\');">
  <font color="#FF0000"><b>' . $value . '</b></a>';
}


Ik roep hem als volgt aan in mijn code:
PHP:
1
echo '<td>' . print_delete_option('delete.php?e=' . $row['e_id']) . '</td></tr>' . "\n";


In plaats van de gewenste output (dus een rood x-je tussen <td>-tags), komt er dit te staan:
code:
1
2
<a href="javascript:DoConfirm('Weet je zeker dat je dit item wilt verwijderen?','delete.php?e=5');">
<font color="#FF0000"><b>x</b></a><td></td></tr>


Buiten de <td>'s dus. Ziet iemand wat er fout kan zijn?

[ Voor 56% gewijzigd door Verwijderd op 15-11-2004 14:20 ]


Acties:
  • 0 Henk 'm!

  • Stamgastje
  • Registratie: April 2003
  • Laatst online: 02-02-2020
Gebruik je soms output buffering?

Nee, zie het al... je gebruikt een functie die iets echoot... dat klopt niet. geeft eens een string terug.

Dus maak er dit van:
PHP:
1
2
3
4
5
6
7
8
9
10
<?php
function print_delete_option($url, $message = 'Weet je zeker dat je dit item wilt verwijderen?', $value = 'x') { 
  echo '<a href="javascript:DoConfirm(\'' . $message . '\',\'' . $url . '\');"> 
  <font color="#FF0000"><b>' . $value . '</b></a>'; 
} 
?>

<?php
echo '<td>', print_delete_option('delete.php?e=' . $row['e_id']), '</td></tr>' . "\n"; 
?>

of:
PHP:
1
2
3
4
5
6
7
8
9
10
<?php
function print_delete_option($url, $message = 'Weet je zeker dat je dit item wilt verwijderen?', $value = 'x') { 
  return '<a href="javascript:DoConfirm(\'' . $message . '\',\'' . $url . '\');">' . 
             '<font color="#FF0000"><b>' . $value . '</b></a>'; 
} 
?>

<?php
echo '<td>' . print_delete_option('delete.php?e=' . $row['e_id']) . '</td></tr>' . "\n"; 
?>

[ Voor 255% gewijzigd door Stamgastje op 15-11-2004 14:25 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Je gebruikt een echo in je functie, maak daar eens een return van :).

Acties:
  • 0 Henk 'm!

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
moet de echo binnen de functie niet worden vervangen door een return :?

en kijk eens op http://w3schools.com voor wat basic html kennis, want de html die je uitspuugt is niet echt netjes

overigens vind ik de manier waarop je je functie opbouwt ook een beetje vreemd... waarom geef je de waarde van je argumenten al mee op het moment dat je de functie aanroept???

code:
1
2
3
4
function foo(url, message, value){
  if(message.length == 0){ message = 'blaat' }
  if(value.length ==0){  value = 'blaat' }
}


disclaimer: faabman is een php noob

edit: spuit 11 8)7

[ Voor 6% gewijzigd door faabman op 15-11-2004 14:20 ]

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Thanks! Het kwam inderdaad doordat ik echo deed ipv return. Maar wat ik niet snap is dat de code uit de functie voor de <td>'s komt te staan. En daarnaast gebruik ik andere functies die echoën, en die doen het wel goed.

@Faabman: wat is er fout aan mijn HTML-code?

[ Voor 14% gewijzigd door Verwijderd op 15-11-2004 14:25 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Het komt door de volgorde van evaluatie.

In de echo die je doet (echo "bla", functie(), "bla") zullen eerst alle expressies die er achter staan geëvalueerd worden, voordat er iets geprint wordt. Dat betekent dat functie() wordt uitgevoerd (en de echo/print statements die erin staat worden uitgevoerd), en daarna wordt "bla", het resultaat van functie() (leeg, in dit geval), en dan weer "bla" geprint.

Als je het zo doet klopt het wel:
PHP:
1
2
3
  echo "bla";
  functie();
  echo "bla";


Omdat het nu losstaande statements zijn die 1 voor 1 worden uitgevoerd.

Maar over het algemeen is het netter om een resultaat terug te geven vanuit je functie, dan kun je hem namelijk opnemen in complexe(re) expressies, en kun je er meer mee doen.

[ Voor 6% gewijzigd door Verwijderd op 15-11-2004 14:28 ]


Acties:
  • 0 Henk 'm!

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
je opent een <font> die je niet afsluit...
je gebruikt opmaak-definierende html-tags zoals <font /> en <b /> waar je eigenlijk een css-class aan je anchor zou moeten hangen

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


Acties:
  • 0 Henk 'm!

  • Stamgastje
  • Registratie: April 2003
  • Laatst online: 02-02-2020
Verwijderd schreef op maandag 15 november 2004 @ 14:24:
Maar wat ik niet snap is dat de code uit de functie voor de <td>'s komt te staan.
't Is simpel hoor. de functie echo wil iets echoën; voordat hij dat kan doen moet hij eerst de functie print_delete_option aanroepen omdat die deel uitmaakt van het 1e argument. Die functie echoot dan al wat anders (namelijk de code voor dat rode kruisje) en levert dan niets terug (geen return), waarop de 1e aanroep van de functie echo deze lege return value in zijn 1e argument plaatst en dat argument echoot.

Hopelijk is het een beetje duidelijk zo.

[ Voor 5% gewijzigd door Stamgastje op 15-11-2004 14:30 . Reden: spuit elf ]


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

En vanaf nu is ook aan de titel zichtbaar dat het PHP betreft en dat het om output gaat die uit een functie komt ;)

Professionele website nodig?


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Helemaal helder. Dank je wel voor alle uitleg.
En Faabman: _/-\o_

[ Voor 24% gewijzigd door Verwijderd op 15-11-2004 14:33 ]

Pagina: 1