Alekplay Skrevet 23. november 2012 Del Skrevet 23. november 2012 (endret) Hei! Jeg driver å lager en nettside, og alt gikk flott og feilfritt. Men så bestemte jeg meg for å bytte fra Windows til Mac, og fikk ganske kjapt et problem når jeg skulle teste ut siden min (lokalt). Jeg programmerer i PHP/HTML, og bruker XAMPP til lokal testing. Greia er at jeg har en login funksjon, men når jeg prøver å logge inn får jeg opp denne feilmeldingen: Warning: Cannot modify header information - headers already sent by (output started at /Applications/XAMPP/xamppfiles/htdocs/feedlobby/includes/overall/overallheader.php:3) in /Applications/XAMPP/xamppfiles/htdocs/feedlobby/login.php on line 27 Koden min ved linje 27 er slik: <?php if (empty($_POST) === false) { $username = $_POST['username']; $password = $_POST['password']; if (empty($username) === true || empty($password) === true) { $errors[] = 'You must enter a username and password!'; } else if (user_exists($username) === false) { $errors[] = 'We can\'t find that username. Please try again or register.'; } else if (user_active($username) === false) { $errors[] = 'You must activate your account before logging in!'; } else { $login = login($username, $password); if ($login === false) { $errors[] = 'That username and password combination is incorrect'; } else { $_SESSION['user_id'] = $login; header('Location: index.php'); exit(); } } } else { $errors[] = 'No data received'; } if (empty($errors) === false) { ?> Linje 27 er den 9 fra bunnen, altså den som sier "header('Location: index.php')". Selve koden fungerer, for når jeg trykker manuelt på logoen for å komme tilbake til index, så er jeg logget inn. Og dersom jeg prøver å logge inn fra den "nye" siden (med feilmeldingen) så fungerer det. Har noen tips eller kan hjelpe meg? Endret 23. november 2012 av Alekplay Lenke til kommentar
Crowly Skrevet 23. november 2012 Del Skrevet 23. november 2012 Du får en slik feilmelding når noe output har blitt sendt før header(), f.eks. en echo. Står at output starter i denne fila: overallheader.php, så ta en titt der. Lenke til kommentar
Alekplay Skrevet 23. november 2012 Forfatter Del Skrevet 23. november 2012 (endret) Jeg har sett, men kan ikke finne noe. Jeg slenger inn noe mer kode hvis du vil se igjennom overallheader.php: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <?php include 'includes/head.php'; ?> <body> <?php include 'includes/header.php'; ?> Head er ikke interessant, der er det bare generell head informasjon. Header ser slik ut: <header> <table border='0' width="100%"> <td width="18%" align="left" id="logo_td"><a href="index.php">logo</td> <td width="52%" align ="center" id="search_td"> <?php if (logged_in() === true) { include 'includes/widgets/searchbar.php'; } else { } ?> </td> <td width="30%" align="right" id="login_td"> <?php if (logged_in() === true) { include 'includes/widgets/loggedin.php'; } else { include 'includes/widgets/login.php'; } ?> </td> </table> </header> Her har vi tre includes, men ettersom vi ikke er logget inn er det bare login.php som gjelder: <div id="login"> <table border="0"> <tr> <td></td> <td align="center"><a href="recover.php?mode=username"><img src="images/username.png" width="76" height="21" alt="username" /></a></td> <td align="center"><a href="recover.php?mode=password"><img src="images/password.png" width="71" height="20" alt="password" /></a></td> <td></td> </tr> <tr> <form method="post" name="login" id="login" action="login.php"> <td><input type="image" src="images/log_in.gif"/></td> <td><input name="username" type="text" /></td> <td><input name="password" type="password" /></td> <td><input name="rememberme" type="checkbox" value="" checked="" /></td> </form> </tr> </table> </div> Som dere ser er dette bare en simpel table... Jeg kan ikke finne det, kan dere? EDIT: Jeg prøvde å fytte overallheader til slutt i koden (slik at den ikke ble lastet inn før vi ble redirecta), og da får jeg denne feilmeldingen isteden: Warning: Cannot modify header information - headers already sent by (output started at /Applications/XAMPP/xamppfiles/htdocs/feedlobby/login.php:8) in /Applications/XAMPP/xamppfiles/htdocs/feedlobby/login.php on line 26 Noen som ser noe da? Endret 23. november 2012 av Alekplay Lenke til kommentar
Crowly Skrevet 23. november 2012 Del Skrevet 23. november 2012 Alt utenfor <?php ?> er output i tillegg til echo (og tilsvarende). Du må rett og slett se om det er noe som helst output før header(). Hvis dette skjer når du prøver å logge inn fra form'en, så er det noe i login.php du må se på Litt små pirk: if (logged_in() === true) kan forkortes til if (logged_in()). Alle funksjoner som returnerer true/false kan man gjøre dette på. Og if (empty($_POST) === false) { kan forkortes til if (!empty($_POST)) {. ! = Not, slik at man tester mot det motsatte. Hvorfor har du en tom else? Det er ikke nødvendig if (logged_in() === true) { include 'includes/widgets/searchbar.php'; } else { } // endres til if (logged_in()) { include 'includes/widgets/searchbar.php'; } Lenke til kommentar
Alekplay Skrevet 23. november 2012 Forfatter Del Skrevet 23. november 2012 (endret) Som du sikkert skjønner så er jeg ingen ekspert på PHP, og jeg prøver å lære mens jeg utvikler siden, så alle tilbakemeldinger er velkomne! Så det du sier er at all HTML kode jeg har i login.php, regnes som output og at jeg må flytte dette etter PHP koden? Det blir et mulig problem, da jeg prøver å få alle errors til å komme i en spesiell div. Her kan du se hele koden til login.php: <?php include 'core/init.php'; logged_in_redirect(); include 'includes/overall/overallheader.php'; ?> <div id="info"> <?php if (empty($_POST) === false) { $username = $_POST['username']; $password = $_POST['password']; if (empty($username) === true || empty($password) === true) { $errors[] = 'You must enter a username and password!'; } else if (user_exists($username) === false) { $errors[] = 'We can\'t find that username. Please try again or register.'; } else if (user_active($username) === false) { $errors[] = 'You must activate your account before logging in!'; } else { $login = login($username, $password); if ($login === false) { $errors[] = 'That username and password combination is incorrect'; } else { $_SESSION['user_id'] = $login; // redirect user to home header('Location: index.php'); exit(); } } } else { $errors[] = 'No data received'; } if (empty($errors) === false) { ?> <h3>We tried to log you in, but...</h3> <?php echo output_errors($errors); } ?> </div> <?php include 'includes/sitefeatures.php'; include 'includes/widgets/registerform.php'; include 'includes/overall/overallfooter.php'; ?> Det jeg ikke skjønner er hvorfor dette fungerte veldig fint på Windows (med WAMP), og hvorfor det ikke fungerer nå på OS X (med XAMPP)...? Men uansett, klarer du å tyde noe fra den koden? EDIT: Kanskje du vet om en kode jeg kan plassere noe sted for å sjekke hvor feilen faktisk ligger? Endret 23. november 2012 av Alekplay Lenke til kommentar
Crowly Skrevet 23. november 2012 Del Skrevet 23. november 2012 (endret) Du må bare gjøre om litt på koden include 'includes/overall/overallheader.php'; ?> <div id="info"> // synderen, om det ikke er noe output i includen(e) over <?php Dette bør funke <?php include 'core/init.php'; logged_in_redirect(); include 'includes/overall/overallheader.php'; $errors=array(); if (isset($_POST['username'],$_POST['password'])) { $username = $_POST['username']; $password = $_POST['password']; if (empty($username) === true || empty($password) === true) { $errors[] = 'You must enter a username and password!'; } else if (user_exists($username) === false) { $errors[] = 'We can\'t find that username. Please try again or register.'; } else if (user_active($username) === false) { $errors[] = 'You must activate your account before logging in!'; } else { if ($login = login($username, $password)) { $_SESSION['user_id'] = $login; // redirect user to home header('Location: index.php'); exit(); } else $errors[] = 'That username and password combination is incorrect'; } } else $errors[] = 'No data received'; if (!empty($errors)) { echo '<div id="info">'. '<h3>We tried to log you in, but...</h3>'. output_errors($errors). '</div>'; } include 'includes/sitefeatures.php'; include 'includes/widgets/registerform.php'; include 'includes/overall/overallfooter.php'; ?> Endret 23. november 2012 av Crowly Lenke til kommentar
Alekplay Skrevet 23. november 2012 Forfatter Del Skrevet 23. november 2012 Jeg må bare si at jeg er veldig takknemmelig for at du hjelper meg! Men koden fungerte ikke helt... På den positive siden får jeg ingen feilmelding, men når jeg trykker log in så blir jeg på siden "login.php". Den er helt hvit, utenom headeren. Dette regner jeg er fordi når innloggingen blir vellyket så bruker vi jo exit(); , og derfor får vi ikke med verken footer eller noe annet (som kommer sist). Men det eneste problemet som jeg ser det nå er at vi ikke blir redirecta tilbake til index.php. Men jeg skjønner ikke hvorfor, ettersom vi har jo med header('Location: index.php'); Lenke til kommentar
Crowly Skrevet 23. november 2012 Del Skrevet 23. november 2012 (endret) Jeg har gjort en feil, prøv å endre if ($login = login($username, $password)) til if (false !== ($login = login($username, $password))), jeg trodde login() returnerte true/false, men en returerer string/false (vil jeg tro). Siden du bruker $_SESSION så kan du omstrukturere litt. I stedet for å lagre evt. feilmeldinger i $errors, så kan du legge de i $_SESSION['errors'], og alltid kjøre header('Location: index.php');. Slik at login.php kun sjekker gyldig login, og sparker deg tilbake til index.php uansett, så skriver man ut evt. feilmeldinger der. Flytt <div id="info"> delen til index.php og legg den i en slik if if (isset($_SESSION['errors']) and !empty($_SESSION['errors'])) { echo '<div id="info">'. '<h3>We tried to log you in, but...</h3>'. output_errors($_SESSION['errors']). '</div>'; unset($_SESSION['errors']); } Endret 23. november 2012 av Crowly Lenke til kommentar
Alekplay Skrevet 23. november 2012 Forfatter Del Skrevet 23. november 2012 (endret) Nå vet jeg ikke om jeg har gjort riktig eller ei, men slik det går nå, så får jeg opp . ' We tried to log you in, but... '. output_errors($_SESSION['errors']). ' på hovedsiden (index.php) både hvis jeg er logget inn og ikke... Og når jeg prøver å logge inn får jeg akkurat det samme problemet, nemlig at jeg ikke kommer meg så langt som til index.php, men blir stuck på login.php Eller, jeg kan forsåvidt se problemet Jeg sier ingensteds at jeg uansett skal til index.php, men jeg vet ikke hvor eller hvordan jeg skal plassere dette... Jeg vet heller ikke hvordan jeg skal kunne "overføre" feilmeldingene fra login.php til index.php... Jeg limer inn den "nye" koden til login.php samt koden til index.php: <?php include 'core/init.php'; logged_in_redirect(); include 'includes/overall/overallheader.php'; $erros=array(); if (isset($_POST['username'],$_POST['password'])) { $username = $_POST['username']; $password = $_POST['password']; if (empty($username) === true || empty($password) === true) { $errors[] = 'You must enter a username and password!'; } else if (user_exists($username) === false) { $errors[] = 'We can\'t find that username. Please try again or register.'; } else if (user_active($username) === false) { $errors[] = 'You must activate your account before logging in!'; } else { if (false !== ($login = login($username, $password))) { $_SESSION['user_id'] = $login; // redirect user to home header('Location: index.php'); exit(); } else $errors[] = 'That username and password combination is incorrect'; } } else $errors[] = 'No data received'; if (!empty($errors)) { echo '<div id="info">'. '<h3>We tried to log you in, but...</h3>'. output_errors($errors). '</div>'; } include 'includes/sitefeatures.php'; include 'includes/widgets/registerform.php'; include 'includes/overall/overallfooter.php'; ?> index.php: <?php include 'core/init.php'; ?> <?php include 'includes/overall/overallheader.php'; ?> <?php include'includes/widgets/registerform.php'; ?> if (isset($_SESSION['errors']) and !empty($_SESSION['errors'])) { echo '<div id="info">'. '<h3>We tried to log you in, but...</h3>'. output_errors($_SESSION['errors']). '</div>'; unset($_SESSION['errors']); } <?php include 'includes/overall/overallfooter.php'; ?> Vet jeg ber om mye nå, men jeg hadde endelig fått til denne innloggingsfunksjonen før jeg bestemte meg for å flytte det over til macen (skolepcen var alt for treig), også blir alt bare tull Litt irriterendes, spesielt når jeg har brukt såpass lang tid på å skrive all koden til innloggingsfunksjonen ved hjelp av uttallige youtube videoer Men på den positive siden så er det jo veldig lærerikt! NB! Jeg hadde tenkt til å lage en if else funksjon på registerform, da den ikke skal komme opp når noen er logget inn. Så langt er jeg ikke kommet ennå Endret 23. november 2012 av Alekplay Lenke til kommentar
Crowly Skrevet 23. november 2012 Del Skrevet 23. november 2012 Ikke bruke noe særlig med tid på å overføre feilmeldingene til index.php via sessions før du har fått det andre til å fungere. Bedre å få det til å fungere som man ønsker først, så kan man gjøre forbedringer. Men du har lagt if'en utenfor <?php, da blir det regnet/tolket som ren tekst og ikke php kode. <?php include 'core/init.php'; include 'includes/overall/overallheader.php'; include'includes/widgets/registerform.php'; if (isset($_SESSION['errors']) and !empty($_SESSION['errors'])) { echo '<div id="info">'. '<h3>We tried to log you in, but...</h3>'. output_errors($_SESSION['errors']). '</div>'; unset($_SESSION['errors']); } include 'includes/overall/overallfooter.php'; ?> Med session <?php include 'core/init.php'; logged_in_redirect(); include 'includes/overall/overallheader.php'; // usikker på hva som er nødvendig over, men session_start(); må være med, og login() funksjonen if (isset($_POST['username'],$_POST['password'])) { $username = $_POST['username']; $password = $_POST['password']; if (empty($username) === true || empty($password) === true) { $_SESSION['errors'][] = 'You must enter a username and password!'; } else if (user_exists($username) === false) { $_SESSION['errors'][] = 'We can\'t find that username. Please try again or register.'; } else if (user_active($username) === false) { $_SESSION['errors'][] = 'You must activate your account before logging in!'; } else { if (false !== ($login = login($username, $password))) $_SESSION['user_id'] = $login; else $_SESSION['errors'][] = 'That username and password combination is incorrect'; } else $_SESSION['errors'][] = 'That username and password combination is incorrect'; } else $_SESSION['errors'][] = 'No data received'; // redirect user to home header('Location: index.php'); // ikke mer kode, du skal nå tilbake til index.php uansett ?> original løsning <?php include 'core/init.php'; logged_in_redirect(); include 'includes/overall/overallheader.php'; $errors=array(); if (isset($_POST['username'],$_POST['password'])) { $username = $_POST['username']; $password = $_POST['password']; if (empty($username) === true || empty($password) === true) { $errors[] = 'You must enter a username and password!'; } else if (user_exists($username) === false) { $errors[] = 'We can\'t find that username. Please try again or register.'; } else if (user_active($username) === false) { $errors[] = 'You must activate your account before logging in!'; } else { if (false !== ($login = login($username, $password))) { $_SESSION['user_id'] = $login; // redirect user to home header('Location: index.php'); exit(); } else $errors[] = 'That username and password combination is incorrect'; } } else $errors[] = 'No data received'; if (!empty($errors)) { echo '<div id="info">'. '<h3>We tried to log you in, but...</h3>'. output_errors($errors). '</div>'; } include 'includes/sitefeatures.php'; include 'includes/widgets/registerform.php'; include 'includes/overall/overallfooter.php'; ?> For å ikke vise innlogging skjemaet trenger du kun if (isset($_SESSION['user_id']) and !empty($_SESSION['user_id'])) { // bruker er logget inn } else { // vis innlogging skjema } Lenke til kommentar
Alekplay Skrevet 23. november 2012 Forfatter Del Skrevet 23. november 2012 Jeg får beskjed at Parse error: syntax error, unexpected T_ELSE in /Applications/XAMPP/xamppfiles/htdocs/feedlobby/login.php on line 25 Det mine utrente () øyne kan se er at du ikke bruker { etter else -> Altså istedenfor } else { bruker du } else Jeg vet ikke om det er nødvendig med den siste "parentesen", men du er vel eksperten. Ser at du ikke har brukt den andre steder også, så det er vel greit... Kan du finne noe? (linje 25 er linja over $_SESSION['errors'][] = 'That username and password combination is incorrect' Lenke til kommentar
Crowly Skrevet 24. november 2012 Del Skrevet 24. november 2012 Gikk visst litt fort i svingen, jeg har lagt på en else for mye. else { if (false !== ($login = login($username, $password))) $_SESSION['user_id'] = $login; else $_SESSION['errors'][] = 'That username and password combination is incorrect'; } // else'en under skal vekk else $_SESSION['errors'][] = 'That username and password combination is incorrect'; Det er kun nødvendig med krøll parentes når du skal utføre to eller flere kommandoer. Dette gjelder for det meste, if, while, for, foreach osv // gyldig, kan stå på en eller flere linjer if (ett eller annet) kommando1(); if (ett eller annet) { kommando1(); } if (ett eller annet) kommando1(); if (ett eller annet) { kommando1(); } if (ett eller annet) { kommando1(); kommando2(); } // ikke helt gyldig, kommando2() blir ikke en del av if'en if (ett eller annet) kommando1(); kommando2(); // denne utføres uansett Lenke til kommentar
Alekplay Skrevet 24. november 2012 Forfatter Del Skrevet 24. november 2012 (endret) Nå får jeg noe av det samme: Parse error: syntax error, unexpected T_ELSE in /Applications/XAMPP/xamppfiles/htdocs/feedlobby/login.php on line 22 Jeg har sett igjennom koden, men kan ikke finne at den else'n på linje 22 er uventet. For min del så ser den helt "ventet" ut Jeg prøvde å "rydde" litt opp med noen ekstra parenteser (jeg føler jeg får mer oversikt da), men uansett får jeg samme feilmelding: <?php include 'core/init.php'; logged_in_redirect(); include 'includes/overall/overallheader.php'; if (isset($_POST['username'],$_POST['password'])) { $username = $_POST['username']; $password = $_POST['password']; if (empty($username) === true || empty($password) === true) { $_SESSION['errors'][] = 'You must enter a username and password!'; } else if (user_exists($username) === false) { $_SESSION['errors'][] = 'We can\'t find that username. Please try again or register.'; } else if (user_active($username) === false) { $_SESSION['errors'][] = 'You must activate your account before logging in!'; } else { if (false !== ($login = login($username, $password))) { $_SESSION['user_id'] = $login; } else { $_SESSION['errors'][] = 'That username and password combination is incorrect'; } } else { $_SESSION['errors'][] = 'No data received'; } header('Location: index.php'); ?> Mellomromma mellom kodelinjene blir jo fjerna når jeg kopierer koden inn hit, men linje 22 er den 5 fra bunnen. Den som sier } else { Jeg fikk forsåvidt den samme feilmeldinga når jeg hadde koden slik du hadde den, så jeg tror ikke at det er noe jeg har gjort... Endret 24. november 2012 av Alekplay Lenke til kommentar
Crowly Skrevet 24. november 2012 Del Skrevet 24. november 2012 (endret) Du mangler en krøll parentes. <?php include 'core/init.php'; logged_in_redirect(); include 'includes/overall/overallheader.php'; if (isset($_POST['username'],$_POST['password'])) { $username = $_POST['username']; $password = $_POST['password']; if (empty($username) === true || empty($password) === true) { $_SESSION['errors'][] = 'You must enter a username and password!'; } else if (user_exists($username) === false) { $_SESSION['errors'][] = 'We can\'t find that username. Please try again or register.'; } else if (user_active($username) === false) { $_SESSION['errors'][] = 'You must activate your account before logging in!'; } else { if (false !== ($login = login($username, $password))) { $_SESSION['user_id'] = $login; } else { $_SESSION['errors'][] = 'That username and password combination is incorrect'; } } // denne manglet } else { $_SESSION['errors'][] = 'No data received'; } header('Location: index.php'); ?> Vet ikke hvilken editor du bruker, men f.eks. notepad++ og notepad2 (i tillegg til mange andre) vil markere hvilke parenteser som hører sammen, og da er det enklere å se om man har noen for mye eller for lite. I tillegg til ryddig kode innrykk. Men bruker man tab, som jeg normalt gjør, så er det ikke alltid det fungerer så greit når man kopierer koden over til ett forum. Da er det bedre å erstatte en tab med 3-4 mellomrom. For å beholde mellomrommene i koden kan du prøve å trykke på "Toggle editing mode" knappen øverst til venstre i nytt innlegg boksen, slik at man går ut av wysiwyg modus (tror jeg det er). Endret 24. november 2012 av Crowly Lenke til kommentar
Alekplay Skrevet 24. november 2012 Forfatter Del Skrevet 24. november 2012 (endret) Nå får jeg ikke feilmeldingen lenger, men jeg blir fortsatt "stuck" på login.php (jeg blir ikke redirecta til index.php), og feilmeldingene kommer ikke frem når jeg skriver f.eks. feil passord... På Windows brukte jeg notepad++ (først dreamweaver, men siden jeg ikke brukte noen av funksjonene bestemte jeg meg for å bytte til et "lettere" program som ikke var så treigt), men siden det programet ikke eksisterer på Mac bruker jeg det beste alternativet: textwrangler. Det markerer hvilke parenteser som hører sammen, men det sier ikke ifra hvis det mangler noen.. Jeg bruker også tab for å "rydde opp", men la merke til at dette ikke blir overført til forumet. Men kan du se noe? Dette er jo et veldig rart problem Men til tross for den originale feilmeldingen, hadde dette fungert "in real life", altså om jeg tok siden opp på webserveren? For i så fall er det jo en feilmelding jeg kan prøve å overse når jeg tester lokalt... EDIT: Jeg har pleid å bruke Chrome på mac'en, men for noen dager siden oppgraderte jeg til Mountain Lion, og fikk samtidig nyeste versjon av safari som viste seg å være mye bedre... Så etter det har jeg bare testa i Safari, men bestemte meg nå for å bare prøve Chrome. Det viser seg at det fungerer i Chrome (den "originale løsningen" din som du kom med for noen poster siden) Men uansett, jeg har fortsatt problem med Safari, og når jeg "lancher" siden om noen måneder så må jeg jo sørge for at det fungerer i Safari også... Har du en løsning? EDIT 2: Jeg bare sletta hele koden og skrev den på nytt (login.php), basert på det du gav meg i din post og nå fungerer det i Safari også! :D:D:D Så jeg vil bare takke deg kjempemye for alt du har hjulpet meg med, og at du har brukt tid på det! Det vil nok være mer jeg lurer på fremover, så bare følg med Jeg vil gjerne ha mer hjelp av deg xD Anyways, tusen takk! Jeg har ikke fått testa at alt fungerer med denne løsningen, siden jeg "egentlig" øver til mattetentamen og må gjøre det. Men jeg kommer nok til å teste litt ytterligere i kveld når jeg er ferdig med det for dagen, og vil gi deg en update da. Hvis det ikke fungerer vil jeg naturligvis skrive det her, og hvis det fungerer vil jeg sette posten til "løst" øverst! Endret 24. november 2012 av Alekplay Lenke til kommentar
Alekplay Skrevet 24. november 2012 Forfatter Del Skrevet 24. november 2012 (endret) Nå ser det ut som at problemet ved login.php er løst Men jeg har jo bygd opp register.php på akkurat samme måte... Jeg har prøvd å fikse det, på bakgrunn av de endringene du har gjort med login.php (jeg har prøvd å lete etter endringer, og så gjøre de samme på register.php), men det fungerer fortsatt ikke. Jeg får feilmeldingen: Warning: Cannot modify header information - headers already sent by (output started at /Applications/XAMPP/xamppfiles/htdocs/feedlobby/register.php:43) in /Applications/XAMPP/xamppfiles/htdocs/feedlobby/register.php on line 55 Her er koden til register.php (Ikke original, men med endringer som jeg har gjort, som ikke funka ): *FJERNET* Kan du se hva jeg har gjort galt/ ikke gjort? EDIT: Jeg tok meg en tenkepause, og nå fungerer det som bare det. Fjerna koden for å beholde sikkerheten dersom dette blir min endelige innloggingsløsning Endret 24. november 2012 av Alekplay Lenke til kommentar
TheClown Skrevet 24. november 2012 Del Skrevet 24. november 2012 Jeg ser dere har en lengre samtale her. Trådstarter, dette ser ut som et relativt kompleks system, og blanding mellom PHP og HTML blir fort et problem da. Jeg ville anbefale deg å titte på Template-systemer for PHP. Jeg har brukt Smarty i flere år, og det gjør slike ting mye enklere. Enkelt forklart gjør template-systemer slik at du separerer PHP og HTML fra hverandre. Du gjør all logikken i PHP-fila, også "lagrer" du variabler som templaten kan få tak i. På denne måten blir det ryddigere og enklere å se hva du gjør fordi alt er på sin respektive plass. I template-fila kan du også inkludere andre deler av templaten (f.eks header.tpl og footer.tpl) slik at designet blir opprettholdt gjennom hele prosjektet. Så fort kan knekker koden med slike systemer vil det være mye enklere å utvikle større funksjoner som krever mye funksjonalitet spredd over designet på siden. Mine 2 cents. Kontakt meg gjerne eller opprett ny tråd her om du har spørsmål eller problemer Lenke til kommentar
Alekplay Skrevet 24. november 2012 Forfatter Del Skrevet 24. november 2012 Jeg ser dere har en lengre samtale her. Trådstarter, dette ser ut som et relativt kompleks system, og blanding mellom PHP og HTML blir fort et problem da. Jeg ville anbefale deg å titte på Template-systemer for PHP. Jeg har brukt Smarty i flere år, og det gjør slike ting mye enklere. Enkelt forklart gjør template-systemer slik at du separerer PHP og HTML fra hverandre. Du gjør all logikken i PHP-fila, også "lagrer" du variabler som templaten kan få tak i. På denne måten blir det ryddigere og enklere å se hva du gjør fordi alt er på sin respektive plass. I template-fila kan du også inkludere andre deler av templaten (f.eks header.tpl og footer.tpl) slik at designet blir opprettholdt gjennom hele prosjektet. Så fort kan knekker koden med slike systemer vil det være mye enklere å utvikle større funksjoner som krever mye funksjonalitet spredd over designet på siden. Mine 2 cents. Kontakt meg gjerne eller opprett ny tråd her om du har spørsmål eller problemer Høres bra ut! Du kunne ikke sendt meg en link til en god tutorial eller noe liknende? Lenke til kommentar
Crowly Skrevet 25. november 2012 Del Skrevet 25. november 2012 Er ikke meningen at du skal gå igjennom alt under på en gang, kun en samling med ressurser og videoer som kan være nyttig etter hvert som man utvikler kunnskapen sin. Er nyttig å lære seg objekt orientert programmering (oop), jeg syntes denne guiden er god: Object-Oriented PHP for Absolute Beginners, med flere artikler i samme serie her: http://www.elated.co...at/php-objects/ Denne online boka er også god: Practical PHP Programming (ikke kun oop) jQuery + jQuery UI gir mye gratis og forenkler javascript. Bl.a. veldig kjekt når man begynner å ta i bruk ajax. Jream har mange gode youtube videoer, det meste er oop: Bl.a. . Jeg trengte å se denne en del ganger før jeg begynte å bli trygg på den rød tråden, så dette er nok noe man bør vente med til php forståelsen når ett vist nivå (uten at jeg vet helt hvor det er ... ).MVC står for Model - View - Controller, som er en måte å organisere koden sin på. Fra wikipedia: The model consists of application data and business rules, and the controller mediates input, converting it to commands for the model or view.[3] A view can be any output representation of data, such as a chart or a diagram. Skal man ta i bruk MVC, så kan CodeIgniter være ett greit rammebruk å ta i bruk. Basert på så ser RedBeanPHP ut som ett (ORM) bibliotek som kan spare mye arbeid. Også sett at noen anbefaler HTML5 Boilerplate for ett template system (og muligens andre ting, har ikke erfaring med det selv). Lenke til kommentar
TheClown Skrevet 25. november 2012 Del Skrevet 25. november 2012 Høres bra ut! Du kunne ikke sendt meg en link til en god tutorial eller noe liknende? Du har hele dokumentasjonen tilgjengelig her: http://www.smarty.net/docs/en/ Les igjennom og se på eksemplene, så burde du få en grei innføring. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå