Gå til innhold

trondes

Medlemmer
  • Innlegg

    460
  • Ble med

  • Besøkte siden sist

Innlegg skrevet av trondes

  1. ok... jeg skal ikke nevne at du ikke bør bruk md5() på passord, eller at du iallefall ikke må bruke mysql_ men heler mysqli ( http://php.net/manual/en/book.mysqli.php) eller PDO ( http://php.net/manual/en/book.pdo.php )

     

    Men når det ikke er sagt, så er sikkert feilen din at du sender noe til browseren din før du sender header() meldingen, dermed vil ikke den bli sendt. Derfor gir den heler ikke noe output. bortsett fra noen html tager.  Les mer om det her: http://php.net/manual/en/function.header.php

  2.  

    Jobber med å lage et kontaktskjema hvor besøkende kan velge hvilke avdeling de besøkende skal kontakte. 

     

    Skjemaet nedenfor fungerer, men process.php tar ikke hensyn til: option value

    Jeg ønsker at dersom noen velger f.eks <option value="sporsmal"> skal mail bli sendt til:[email protected], dersom noen velger reklamasjon skal mailen bli sendt til: [email protected]. Hvordan gjør man dette?

     

     

    En enkel if/else fikser dette, hvis det ikke er valgt "reklamasjon" vil de automatisk bli sendt til [email protected]

     

    feks slik:

    <?php
        $name = $_POST['name'];
        $email = $_POST['email'];
        $message = $_POST['message'];
        $from = 'Fra test'; 
        if( $_POST['avdeling'] == "reklamasjon" )
        {
             $to = "[email protected]";
        }
        else
        {
             $to = "[email protected]"; 
        }
    
        $body = "From: $name\n E-Mail: $email\n Message:\n $message";
    ?>
    
    <?php
    if ($_POST['submit']) {
        if (mail ($to, $subject, $body, $from)) { 
            header("Location:#");
        } else { 
            echo '<p>Woops! Det har skjedd en feil. Vennligst prøv igjen!</p>'; 
        }
    }
    ?>
    
  3. du kan kanskje gjøre noe slik som dette: 
     

    <input type="text" name="data[1][title]" value="">
    <input type="text" name="data[1][platform]" value="">
    <input type="text" name="data[2][title]" value="">
    <input type="text" name="data[2][platform]" value="">
    

    Når du skal sjekke så loop'er du bare gjennom, noe slik som dette
     

    $data = $_POST['data'];
    
    $checkNumber = 1;
    
    while( isset( $data[$checkNumber]  ) and is_array( $data[$checkNumber] ) )
    {
         if( $data[$checkNumber]['title'] == "" )
             $error[$checkNumber]['title'] = "Må fylles ut";
         // sjekk de andre feltene
      $checkNumber++;
    }
    
    if( isset( $error ) )
        // vi har en feil, DO SOMETHING!!
    
    
    • Liker 1
  4. function initialize()
    {
      var mapProp = {
        center: new google.maps.LatLng($latlon),
        zoom:7,
        mapTypeId: google.maps.MapTypeId.ROADMAP
      };
      var map = new google.maps.Map(document.getElementById("googleMap"),mapProp);
    }
    
    
    

    Du må bruke <?php ?> for å hente ut variabler 

    function initialize()
    {
      var mapProp = {
        center: new google.maps.LatLng(<?php echo $latlon; ?>),
        zoom:7,
        mapTypeId: google.maps.MapTypeId.ROADMAP
      };
      var map = new google.maps.Map(document.getElementById("googleMap"),mapProp);
    }
    
    

    Noen servere støtter også <?= $latlon;?>

  5. Det skal være nok med type casting. Men er en god vane å bruke prepared statments uansett. Du kan også ta en titt på filter_var() og filter_input()

     

    Joda, må velge det som gjør jobben. Men hvis jeg bare ønsker å ta et tall inn, og jeg ikke bryr meg om det er 0 ( vil ikke gjøre noe skadde ) så er (int) det enkleste. Ordnet til en run test bare for å se om det var noe forskjell. 

    $startTime = microtime_float();
    
    for( $i=0; $i < 2000000; $i++){
            $var = "kjhkh";
    //      $tall = (int)$var; //                                0.28ms
    //      $tall =  filter_var( $var, FILTER_VALIDATE_INT ); // 0.65ms
    //      $tall = ($var+0); //                                 0.19ms
            }
    
    print microtime_float()-$startTime."\n";
    
    function microtime_float()
    {
        list($usec, $sec) = explode(" ", microtime());
        return ((float)$usec + (float)$sec);
    }
    
    

    Fikk 0.28 på (int) og 0.65 på filter_var, den som kom best ut var ( $var+0). MEN dette var jo med 2 mill. ganger. Er vel sjelden det skal gjøres så mange ganger  :)

  6. Hmm.. hvis jeg får inn  en variabel via $_GET jeg vet at den skal være et tall, og jeg bruker det som den. Vil det da ikke være nok å kjøre (int)$_GET['tall']  på den eller ( $_GET['tall'] + 0 ). Er vel ikke noe "ond" kode som vil overleve det hvis jeg bruker den i feks en SQL query ?

    $test1 = "khkj";
    $test2 = "' OR 1 OR '";
    $test3 = ")(/&%¤#\"";
    $test4 = 34;
    
    print (int)$test1."<br>";  // output 0
    print (int)$test2."<br>";  // output 0
    print (int)$test3."<br>";  // output 0
    print (int)$test4."<br>";  // output 34
    
  7. Sliter med spesialkarakterer.

     

    Har en funksjon som henter ut ordrer for en vare slik:

    	function getAllOrdreVare($sVareNr)
    	{
    		
    		$sql = "SELECT	ordre.id,		
    		FROM arbeidsordret ordre,
    				arbeidsloggt logg,
    				varet vare
    		WHERE ordre.id = logg.arbeidsordreid AND 
    				logg.vareid = vare.id AND
    				vare.varenr = '$sVareNr'";
    

    hvor $sVareNr kan inneholde både nummer og bokstaver.

     

    Den fungerer helt fint utenom til enkelte varenr som f.eks:

     

    'AU097AA#AC3' tolkes som 'AU097AA'

    'ND218NO+40Y7734' tolkes som 'ND218NO 40Y7734'

     

    Følgelig returnerer databasen ingen ordrer i disse tilfellene.

     

    Noen som vet en løsning?

     

    med å bruke mysqli::escape_string( $value ) eller PDO::quote( $value ) så vil dette løse seg. Og som Matsemann skriver over er koden du nå har veldig utsatt for sql-injections.

     

    Tronds

  8. Mitt problem er: Når jeg lar linje 11 og 12 være aktive i barcode.php, så blir strekkoden helt rar ved output (se vedlagte bilde med.jpg). Når jeg innaktiverer disse linjene, så kommer strekkoden as usual (se bilde uten.jpg).

     

    Håper det finnes noen gode samaritaner som kan gi et lite hint eller dra meg i riktig retning, før jeg river ut alt håret jeg har på huet :p

     

     

    Jeg kan gi deg et lite hint :) Først, slik du har gjort det nå så skriver dette siden ut som et bilde ( header ('Content-type: image/png'); ) dvs at hvis du prøver å skrive ut en tekst samtidig vil jo bildefilen bli ødelagt. 

     

    Det finnes to måter å fikse dette på.

     

    1) Du skriver inn teksten med å bruke imagettftext() http://php.net/manual/en/function.imagettftext.php

     

    2) Du kan lage en fil til, denne spytter ut html kode med tekst der du referer til siden over som en bilde fil over teksten du skal ha inn. 

     

    noe slik som:

    <div>
          <img src="barcode.php?mrn1=<?php print $_GET['mrn1']; ?>"><br>
          Tekst: <?php print $_GET['imp1']; ?><br>
          Tall : <?php print $_GET['mrn1']; ?>
          </div> 
    

    tronds

  9. Hei.

     

    Jeg har laget en søkemotor til websiden min, og der brukeren får opp en boks hvor det står at søket etter "$get_value" var vellykket.

     

    Dette fungerer bra, men dersom søket returnerer flere treff i databasen, kommer denne boksen opp over hvert treff, og det ser ikke bra ut.

     

    Så mitt spørsmål er: Hvordan kan man få echo-statement'et til bare å vises én gang?

     

    echo'et er som følger:

     

    ...

     

     

    Setter veldig pris på om noen kunne hjulpet meg. :)

    På forhånd takk!

     

    Grunnen til at du får ut denne meldingen flere ganger er jo for at while() loopen kjøres flere ganger når du finner et svar. og siden denne linjen er plassert inni loopen, ja da skjer det bare ;)

    $output = "";
    	while($row_result=mysql_fetch_array($run_result)){
            $site_title=$row_result['site_title'];
            $site_link=$row_result['site_link'];
            $site_desc=$row_result['site_desc'];
            $site_sp=$row_result['site_sp'];
            $site_image=$row_result['site_image'];
     
    	$output .= "
    		<div class='col-xs-12 col-md-8'>
    			<div class='well well-lg'>    
    				<h3>$site_title</h3>
    				<p align='justify'>$site_desc</p>
    				<a href='$site_link'target='_self'>Lær mer om $site_sp ved å klikke her.</a><br>
    				<br>
    				<p><img src='/search-engine/images/$site_image' width='115' height='91' /></p>
    				</div>
    			</div>";  
    
            }
    		
    	if( !empty( $output ){
    		echo "	<div class='container'>
    					<div class='row'>
    						<div class='col-xs-12 col-md-8'>
    							<div class='alert alert-dismissable alert-success'>
    								<button type='button' class='close' data-dismiss='alert'>×</button>
    								<i class='fa fa-search fa-3x'></i><b>Søket var vellykket!</b><br>Ditt søk etter <em>$get_value</em> resulterte i følgende treff:
    								</div>
    							</div>";
    		echo $output;
    		echo "			</div>
    					</div>";
    		}
    
    

    Tror dette vil løse problemet ditt. Er litt usikker på hvordan css ser ut, men hvis jeg bare får utifra koden du har gitt over så er det er feil i den, da den aldri lukker ( </div> ) denne diven her: <div class='container'>. Så hver gang den skriver ut et nytt søk lager den en ny div inni den andre. Har prøvd å fikse dette også, men som sagt er ikke sikker på hvordan det vil bli sende ut når du skriver ut resultatene ;) men det skal være en grei ting å fikse.

     

    Jeg har også gjort det slik at alt blir plassert inni div'ene "container" og "row" ser ikke noen grunn for at den skal bli skrevet ut flere ganger. MEN dette kommer igjen ann på hvordan stilsettet ditt ser ut.

     

    Trond

  10. Hvis du har tilgang til .htaccess filen kan du bruke den.

    Redirect 301 / http://mt-example.com/

    Hvis du ikke har tilgang til den kan du alltid plassere denne her øverst i index.php filen

    header("location: http://nyttdomene.no");
    exit;
    
    

    Men denne vil jo bare virke hvis all trafikk går via index.php filen

    • Liker 1
  11. En reimplementasjon av register globals. Nydelig.

    Opps, helt rett. Min feil, får skylde på at jeg startet med programmering for tidlig på dagen ;)

     

    linjen

    ${$key} = utf8_decode( $_POST[$key] );
    

    Skal selvfølgelig være:

    ${$key} = utf8_decode( (isset( $_POST[$key] ) ? $_POST[$key]:"" ) );
    

    Takk for at du pekte ut feilen, men neste gang synes jeg du heler kan gi noen eksempler, i stede for bare å være ironisk :)

  12. [...]

    	${$key} = utf8_decode($value);
    
    

    Kjekk forutsatt at du kjenner POST navnene? :-)

     

    Kan være farlig også, for du vet aldri hva brukeren putter inn av nye felt i <form> før han sender tilbake til deg :) men det er jo en smart løsning..... hva om vi gjorde slik i stede for:

    <?php
    // Sett opp Array
    $data = array();
    $i = 0;
    // For hver $_POST ( eks. $_POST['email'] )
    
    $wanted = array( "firstname", "lastname", "email", "street", "company", "phone" );
    foreach ($wanted as $nr=> $key) {
    	// lag dynamisk variabel basert på $_POST['navn']
    	// og tildel dynamisk variabel informasjonen
    	${$key} = utf8_decode( $_POST[$key] );
    	$i++;
    }
    // Da kan informasjonen lett brukes slik.
    echo $firstname.'<br>';
    echo $lastname.'<br>';
    echo $email.'<br>';
    echo $street.'<br>';
    echo $company.'<br>';
    echo $phone.'<br><br>';
    echo '<b>Antall: '.$i.'</b>';
    ?>
    
    

    ( Uprøvd kode )

     

    For da har du bedre kontroll på hva som kommer inn.

  13. Hadde jeg skulle sjekket en dato som en bruker hadde skrevet inn tror jeg at jeg hadde gjort det noe slik som dette:

    	if( isset( $_POST['date'] ) )
    		$date = str_replace(".", "", trim( $_POST['date'] ) );
    	else
    		$date = "";
    	
    	if( strlen( $date ) == 8 AND checkdate( substr( $date, 2, 2 ), substr( $date, 0, 2 ), substr( $date, -4 ) ) )
    		echo "Dette er en ekte dato";
    	else
    		echo "FEIL dato";
    

    HEr bytter den ut hvis brukeren har brukt "." mellom tallen, feks 20.10.2002. Den sjekker om den har fått alle 8 tallene, også sjekkes det om denne datoen finnes.

  14.  

    En til. Denne regner ut hvor mange år du fyller i år ut i fra fødselsdagen din.

     

    [....]

    Viktig å leke seg litt :) Du gjorde enkelte valg jeg ikke ville ha gjort.

    Litt tilbake meldinger til koden din, jeg sier ikke at det jeg nevner her er rett. Men for å utvikle oss må vi høre hva andre synes ;)

     

    Du hardkodet inn årstallet i dag ( 2013 ) jeg ville ha brukt date("Y") så hadde den vært uptodate neste år også.

     

    Du bruker også while() der jeg ville ha brukt for( $i = 1; $i >=31; $i++ )

     

    Du gjentar også litt kode her, nesten identisk 3 plasser. Liker ikke gjøre det selv :)

     

    Denne her forstår jeg ikke helt hvorfor du gjør:

        $birthDate = $day.'/'.$month.'/'.$year;
        $birthDate = explode('/', $birthDate);
    

    Er det ikke like greit å bruke $day osv lenger ?

    Hvis du absolutt skal ha dem inn i en array() gjør det slik:

    $birthDate = array( $day, $month, $year );
    
    // da kan du bruke
    echo $birthDate[0]; // gir deg dagen
    
    Eller 
    
    $birthDate = array( 'day'=>$day, 'month'=>$month, 'year'=>$year );
    
    // der du kan bruke 
    echo $birthDate['day'];
    
    

    Jeg liker heler ikke funksjoner som skriver ut noe ( echo / print ) for neste gang du skal bruke en av disse funksjonene du har laget deg. Så er det ikke sikkert du ønsker at innholdet skal bli skrevet ut.

     

    Bruk heler "return" og velg å echo'e det etter på.

     

    Jeg har også laget min versjon av denne koden. kom gjerne med spørsmål eller tilbakemeldinger hvis det er noe du lurer på hvorfor jeg valgte å gjøre det slik :) Du finner også en "live" versjon her: http://tronds.net/example/fodt.php

     

    Jeg har valgt å plassere alt inni en fil.

    <?php
    
    // sjekker om alle $_POST feltene er satt
    if( isset( $_POST['day'], $_POST['month'], $_POST['year'] ) ){
    	$day = $_POST['day'];
    	$year = $_POST['year'];
    	$month = $_POST['month'];
    	// henter alderen
    	$age = how_old( $day, $month, $year ); 
    	}
    else{
    	$age = 0;
    	$day = 0;
    	$year = 0;
    	$month = 0;
    	}
    
    // lager <option> for oss. 
    function mk_option_value( $selected, $start, $stop){
    	$back = "";
    	// plusser på en ekstra her slik at den kan telle opp/ned til rett $stop tall
    	if( $start < $stop ) 
    		$stop += 1;
    	else
    		$stop -= 1;
    	for( $i = $start; $i != $stop; ( $start < $stop ?$i++:$i-- ) ){
    		$back .= '<option value="'.$i.'" ';
    		if( $i == $selected )
    			$back .= ' selected ';
    		$back .= '>'.$i.'</option>';	
    		}
    	return $back;
    	}
    
    // regner ut hvor gammel personen er
    function how_old( $day, $month, $year ){
    	$age = date("Y")-$year; // finner ut hvor mange år
    	if( time() < mktime( 0,0,0,$month, $day, date("Y"))) // hvis personen ikke har hatt bursdag enda, så fjerner vi et år.
    		$age--;
    	return $age;
    	}	
    
    ?>
    <html>
    <head>
    	<title></title>
    	<meta charset="UTF-8">
    </head>
    <body>
    	<h1>Hvor gammel er du hvis du var født i:</h1>
    	<form method="POST" action="">
    		<select name="day">
    			<?php echo mk_option_value( $day, 1, 31); ?>
    			</select>
    		<select name="month">
    			<?php echo mk_option_value( $month, 1, 12); ?>
    			</select>
    		<select name="year">
    			<?php echo mk_option_value( $year, 1970, date("Y")); ?>
    			</select>
    		<input type="submit" value="Kalkuler alder">
    	</form>
    	<?php 
    		if( $age >= 0 )
    			echo "<h1>Du er da ".$age."</h1>";
    			?>
    </body>
    </html>
    
    • Liker 1
  15. hmm.. godt spørsmål, jeg ville ha gjort det slik:

     

    $Q = mysql_query("SELECT * FROM ENJJPT_Questions WHERE QID=$QID ORDER BY QID ASC;");
    while($R=mysql_fetch_array($Q)){
    $a[ $R['QID'] ]= array(
    	0 => $R['QuestionTitle'],
    	1 => $R['Answer1'],
    	2 => $R['Answer2'],
    	3 => $R['Answer3'],
    	4 => $R['Answer4'],
    	6 => $R['CorrectAnswer']
    	)             
    
    }
    

     

    MEN den spørringen din lurer jeg litt på, den henter bare ut en rad ? der QID = $QID Nå har jeg ikke sett databasen din, og kan derfor ikke si hva QID er :)

     

    For å få ut igjen svarene må du kjøre noe slik som:

     

    foreach( $a AS $QID => $data){
    print "Spørsmål: ".$data[0]."<br>";
    print $data[1]."<br>";
    print $data[2]."<br>";
    print $data[3]."<br>";
    print $data[4]."<br><br>";
    }

  16. Har et lite problem.

    Jeg setter jquery til å reagere på klikk i en div.. slik:

     

    
    $(document).ready(function() {
    $("div").click(function() {
    	alert("klikk");
    		});
    
    });
    
    
    

     

     

    Så har jeg, et html dokument som sier noe slik som dette:

     

    <div style="width: 200px; height: 200px; border: 1px solid #000" id="forste">
    <div style="width: 200px; height: 200px; border: 1px solid #000" class="andre">
    	<div style="width: 200px; height: 200px; border: 1px solid #000" class="tredje">
    		</div>
    	</div>
    </div>
    

     

    Hvis jeg nå klikker på boksen som kommer opp får jeg 3 alert meldinger. pga. at det er 3 bokser inni hverandre.

     

    Første spørsmål: hvordan får jeg til å bare få en alert melding.

     

    Andre spørsmål: Hvordan kan jeg få bare en alert melding på øverste.

     

    tredje ( alle gode ting er tre ) spørsmål: hvordan klarer jeg å få tak i #forste .andre .tredje hvis det nå var den jeg trykte på?

     

    hmmm.. noe slikt ja.

  17. viste seg å være en enkel løsning på dette:

    <form method="post" action="index.php?id=gjest" action="gjestebok/read.php" >

     

    vet ikke helt om det er en god løsning å ha to 'action' elementer, men nå virker det iallefall, read.php inkluderes i main, i index.php, med siste post i gjesteboken øverst. :yes:

     

    Hmmm.. aldri hørt at det var mulig med to action i en form. Jeg tror nok at du kan fjerne den siste, det vil nok virker like greit da også.

     

    Regner med at "gjestebok/read.php" blir includet i index.php og den igjen sjekker om det blir sendt inn noen data også registrere den det i databasen hvis dette er tilfellet.

     

    Men så lenge det virker så er det ikke så farlig om hvordan den gjør det :)

  18. Vet ikke hvordan koden din ser ut, men den enkleste måten å fikse dette på er jo bare redirecte siden når read.php har lagt inn det den skal i databasen. Så skriver du bare:

     

    header("location: http://adressen-der-hele-gjesteboken-blir-includet-på-siden");

    exit;

     

    bakdelen med dette er jo hvis det blir prøvd registret noe feil.

     

    Eller så kan du vise oss index koden så kan vi sikkert hjelpe deg :)

  19. Hei :) Jeg har litt kode her som ikke fungerer.

    Jeg vil at når du trykker på knappen Bestill

    Skal informasjonen i Textboxene skrives til bestilliger.doc filen.

     

    Det kommer ingenting i .doc filen når jeg trykker på knappen.

    Har noen ide om hva som er feil, eller en annen litt enklere løsning?

    Viser ikke hele koden men bare utklipp.

     

    Her er koden min:

    'Føsrte del det er skriptet
    <?php
    if(isset($_POST['submit'])){
    
    $regkode = $_POST['Editbox1']
    $navn = $_POST['Editbox2']
    $telefon = $_POST['Editbox3']
    $epost = $_POST['Editbox4']
    
    $fp = fopen ("bestillinger.txt", "w"); //se tabell 
    fputs ($fp,"Regkode: " & $regkode & "     Navn: " & $navn & "\n"); 
    fputs ($fp, $regkode & "\n"); 
    fclose ($fp); 
    
    }
    ?>
    

     

     

    Hmm.. tja, vi kan nå begynne med å rette litt feil her. bakom disse linjene:

    $regkode = $_POST['Editbox1']
    $navn = $_POST['Editbox2']
    $telefon = $_POST['Editbox3']
    $epost = $_POST['Editbox4']
    

     

    Må du sette inn ";"

     

    Disse linjen her må du bytte ut "&" med "."

    fputs ($fp,"Regkode: " & $regkode & "     Navn: " & $navn & "\n"); 
    fputs ($fp, $regkode & "\n"); 
    
    

     

    Det var de enkle feilene.. Spørsmålet mitt da er, hva prøver du på? slik koden er over ( når du har rettet opp feilene ) så vil filen "bestillinger.txt" bli skrevet over for hver gang noen fyller inn skjemaet. Er det slik du ønsker det skal være?

     

    Hvorfor skriver du inn $regkode to ganger i filen ?

     

    Kan heller ikke se at du har noen <form> i html filen din, men den har du kanskje ikke tatt med når du limet inn koden hit ?

     

    Kode uten php feil vil bli slik:

     

    <?php
    if(isset($_POST['submit'])){
    
    $regkode = $_POST['Editbox1'];
    $navn = $_POST['Editbox2'];
    $telefon = $_POST['Editbox3'];
    $epost = $_POST['Editbox4'];
    
    $fp = fopen ("bestillinger.txt", "w"); //se tabell 
    fputs ($fp,"Regkode: " . $regkode . "     Navn: " . $navn . "\n"); 
    fputs ($fp, $regkode . "\n"); 
    fclose ($fp); 
    
    }
    ?>
    

×
×
  • Opprett ny...