Gå til innhold

PHP·pub - Programming With Attitude - and beer


Anbefalte innlegg

Mitt tips: Gi faen i Smarty. Brukt det selv til et par større prosjekter, og det gir virkelig bare masse begrensninger. Språket oversettes til PHP, noe som betyr at du vil aldri kunne gjøre noe mer enn du kan i PHP; heller mye mindre. Jeg mener også at 11.500 linjer med kode er way overkill for noe som jeg nå i bunn og grunn gjør med bare ni og rene PHP template-filer.

 

$functions = glob ( WORKING_DIRECTORY . '/includes/presenter/functions/*' );

foreach ( $functions as $function )
require_once ( $function );

foreach ( $this -> module -> getData () as $var => $val )
${$var} = $val;

require_once ( WORKING_DIRECTORY . '/tpl/default/templates/page.php' );

<?php if ( $error ) : ?>
<p class="error"><?= $error ?></p>
<?php elseif ( $success ) : ?>
<p class="success"><?= $success ?></p>
<?php elseif ( $notice ) : ?>
<p class="notice"><?= $notice ?></p>
<?php endif; ?>

<form method="get" action="index.php" class="frame_form">
<p class="input">
	<label for="check_ticket">BillettID</label>
	<input type="text" name="ticketId" id="check_ticket">
</p>
<p class="submit">
	<input type="submit" name="submit" class="submit" value="Sjekk inn" />
	<input type="submit" name="cancel" class="cancel" value="Avbryt" />
</p>
<input type="hidden" name="canvas" value="admin" />
<input type="hidden" name="event" value="check" />
<input type="hidden" name="session" value="<?= htmlentities ( $_GET['session'] ) ?>" />
</form>

<script type="text/javascript">
$(function(){
	$('#check_ticket').focus();
});
</script>

<table>
<tr>
	<th>Id</th>
	<th>Navn</th>
	<th>Brukernavn</th>
	<th>E-mail</th>
	<th>Innsjekk</th>
</tr>
<?php if ( is_array ( $participants ) && count ( $participants ) > 0 ) : ?>
	<?php foreach ( $participants as $participant ) : ?>
		<tr>
			<td><?= $participant['ticketId']; ?></td>
			<td><?= $participant['realname']; ?></td>
			<td><?= $participant['username']; ?></td>
			<td><?= $participant['email']; ?></td>
			<td>[ <a href="index.php?canvas=admin&event=check&ticketId=<?= $participant['ticketId']; ?>&session=<?= htmlentities ( $_GET['session'] ) ?>"><?= ( $ticketstatus[$participant['ticketId']] ? '<img src="/system/images/icons/tick.png" /> Sjekket inn' : '<img src="/system/images/icons/cross.png" /> <strong>Ikke</strong> sjekket inn' ) ?></a> ]</td>
		</tr>
	<?php endforeach; ?>
<?php else : ?>
	<tr>
		<td colspan="4" class="msg">Det finnes ingen deltakere til dette arrangementet.</td>
	</tr>
<?php endif; ?>
</table>

Endret av Jonas
Lenke til kommentar
  • 3 uker senere...
Videoannonse
Annonse

Tja, husker jeg outputtet en god del html i __destruct() selv. Fungerte fjell det! :-)

 

... helt til en dag jeg skulle gjøre litt større utvidelser; den klassen jeg arbeidet med ble nå kalt opp av en annen klasse som hadde en god del output den óg. Html'n fra den gamle koden skulle fortsatt brukes, men nå ble rekkefølgen feil. Så dermed måtte jeg flytte en god del utskrift fra __desctruct() ut i en funksjon, og benytte den ifra den nye klassen. På bakgrunn av det, pleier jeg ikke å gjøre så mye utskrifter i __destruct() lengre. Ei heller så mye logikk blir utført der.

 

Men utover det, ser jeg ikke store problemer. Det hele grunner vel ned til hva som er mest hensiktsmessig for deg, og hvor store problemer det eventuelt måtte medføre for ettertiden.

Lenke til kommentar
  • 1 måned senere...
  • 3 måneder senere...
Noen som kan forklare meg logikken?

 

"string" == false // false

"string" == true // true

Uannsett hva man sammenligner med en bool blir uttrykket evaluert som boolsk. "string" blir dermed true (hadde blitt false hvis den var tom eller "0"), og resultatet bør ikke overraske noen da (true == false gir false / true == true gir true).

 

"string" == 0 // true

Denne er sær, men greia er at dette evauleres som heltall. Det vil altså si at man egentlig får 0 == 0 siden "string" blir konvertert til et tall. Verdt å merke seg at "234foo" == 234 utrolig nok gir true pga. konverteringen.

 

0 == false // true

0 == true // false

Igjen, evalueres som boolsk. 0 er eneste tallverdi som gir false, og man får dermed false == false.

 

true == false // false
Denne er vel den eneste man ser direkte uten forkunnskaper.

 

Moralen? Bruk === hvis det skal være helt likt det du sammenligner mot.

 

Ellers står det litt om sammenligninger her og her.

Endret av Ernie
Lenke til kommentar

Hvis en string, ved sammenlikning med en integer, ikke starter selv med et tall, så castes verdier til integer blir automatisk lik 0.

 

Ellers er det verdt å nevne at å sammenlikne forskjellige datatyper kan gi ganske rare resultater og det er egentlig mye bedre om man finner en annen måte å gjøre det på.

 

Edit: Hurtigsvar var ikke så hurtig likevel.

Endret av Jonas
Lenke til kommentar
  • 1 måned senere...

Du kan jo begynne med å utvikle lokalt. Hater å anbefale følgende til noen, fordi det duger omtrent ikke til en dritt, men ta en titt på xampp. Hvis du vil ha et skikkelig utviklingsmiljø, så vil jeg påstå at du må over til linux. Og helst vike vekk fra PHP. Selv har jeg forelsket meg i Rails med autospec og cucumbertesting. :love:

Lenke til kommentar
  • 2 måneder senere...

Tenkte å dele min erfaring med opplasting til database(Mysql og php) ved bruk av <form enctype="multipart/form-data">.

 

Jeg slet utrolig lenge med å få skjema til å fungere (jeg bruker OS X og Safari), de fleste gangene man prøvde å laste opp noe, startet safari å jobbe (loade), men kom seg ingen vei, derfor gikk det heller ikke kun å kjøre en sjekk på serversiden for å sjekke om filen ble lastet opp eller ikke.

 

Man måtte reloade siden, eller gå tilbake får i det hele tatt å komme seg noen vei i browseren. Det denne fiksen gjør er å fikse dette, slik at Safari alltid laster opp til serveren, og der bør selvfølgelig en ekstra sjekk gjøres for å sjekke om det ble lastet opp en fil eller ikke.

 

Løsningen på problemet var et lite javascript:

 

<html>
<head>
<script type="text/javascript">
//<![CDATA[
function safariCheck(f){
if (/AppleWebKit|MSIE/.test(navigator.userAgent)) {
   	            new Ajax.Request("/js/close", { asynchronous:false });

          }	
        return true;
}	
// ]]>
</script>
</head

<body>

<form action="..." method="post" enctype="multipart/form-data" onsubmit="return safariCheck(this);">
...
..
</form>

</body>
</html>

 

Håper dette kan hjelpe noen å slippe mange timers frustrasjon!

 

EDIT 1: Lagt litt mer utfyllende info om hvorfor denne bug-fiksen trengs i Safari.

Endret av danweb.cjb.net
Lenke til kommentar

Hva med å sjekke om filen faktisk blir lastet opp på serversiden?

 

Jeg gjør selvfølgelig en sjekk der også.

Problemet var at Safari hengte seg opp, og bare sto å loada. Man kom seg ingen vei, hvis man ikke reloadet siden, eller gikk tilbake.

Det er det den lille kodesnutten ordner opp i, i tillegg til at fila alltid går til serveren.

Skulle vært litt klarer i posten, ser den.

Lenke til kommentar

Hvilke programmer bruker dere til utvikling? Til nå har jeg brukt Notepad++ og lastet opp filer manuelt med et FTP-program, men det er litt tullete i lengden. Er det noen som har noen bedre tips til å øke produktiviteten?

Ja, det er litt tullete. Som andre nevner bør du iallefall ha en apache/php server kjørende lokalt slik at det blir enklere å teste endringene før du laster opp til serveren.

 

Neste steg er å finne en bra IDE, og aller helst en debugger også.

 

Mange profesjonelle bruker Zend Studio og Zend sin debugger, alternativt kan man bruke gratisalternativet Eclipse PDT.

 

Personlig foretrekker jeg NetBeans IDE og Xdebug debugger som er gratis og som fungerer like bra som Zend Studio. Og ja, Linux er som regel greiest for PHP-utvikling siden server og utviklingsmiljøet ligner mer på hverandre.

 

Men det er mange kombinasjoner av verktøy og plattformer å velge mellom for å skrive PHP-kode. Man kommer langt med ett godt tekstprogram og XAMPP (windows) / MAMP (mac).

 

Edit:

Og ja, ett versjonkontrollsystem er vinn vinn når du kommer så langt. Alle er ivrige for å foreslå GIT i disse dager, men er du ikke på det nivået at det gjør så stor forskjell enda kan du f.eks. bruke Dropbox som ett ikke-plag-meg-med-dumme-detaljer-la-meg-jobbe-ifred alternativ. Dropbox lagrer flere versjoner av filene og du kan dele arbeidet ditt med andre. :)

Endret av tickinghd
Lenke til kommentar
  • 2 uker senere...
  • 4 måneder senere...

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...