Gå til innhold
🎄🎅❄️God Jul og Godt Nyttår fra alle oss i Diskusjon.no ×

PHP kode som andre kanskje kan bruke


Anbefalte innlegg

Må si mæ uenig i at selvlært ikke alltid er vellært.

Flere bedrifter ettertrakter personer som er selvlært framfor skole ;)

Sånn for å si det.

Samt at du også er en del selvlært fordi du har søkt, man kan ikke lære alt på skola, gir et bra utgangspunkt kanskje, men ikke alt

Endret av AlecTBM
Lenke til kommentar
Videoannonse
Annonse

Ikke overraskende er jeg uenig, men du har såklart et poeng. Programmering er helt klart en evig læringsprosess, og man går ikke på skole for å oppdatere seg i særlig grad. Sånn sett så blir man jo i økende grad selvlært. Det jeg derimot primært tenkte på er det grunnleggende og spesielt programmeringstankegangen. Med mindre man har litt disiplin kommer ikke programmeringstankegangen av seg selv, og igjennom en skole blir man gjerne tvunget til å holde på med elementære ting lenge nok til at man faktisk får det inn i fingrene og vel så det. Det selvlærte folk typisk gjør er å haste seg frem så de kan lage noe spennende og stort, dette være seg CMS, mafiaspill, script for nyhetspublisering e.l. Slikt leder ikke til at man kan programmere særlig godt. Det er en grunn til at enkelte folk stryker med glans på eksamen i programmering fordi de har trodd at de kan pugge programmering. At man kan ta med hva som helst av skriftlige ting til eksamen burde vel si sitt om hva som må til og hvordan eksamensoppgavene er utformet. Å lære programmering tar tid, og med mindre man har disiplin og tolmodighet nok til å faktisk gå sakte nok frem til at man får ting i fingrene, så er selvlært ikke vellært.

Endret av Ernie
Lenke til kommentar

Ja, det gjelder generelt, og som alt annet har det sine unntak. Har man disiplin og tolmodighet nok til å lære seg grunnleggende ting først og ikke haste avgårde så kan selvlært være vellært, men det kan virke som det er mer et unntak enn en regel. Det finnes plenty programmerere både her og andre steder som jeg tviler sterkt på hadde klart å gjennomføre eksamen i litt videregående programmeringsfag både innen objektorientering og algoritmiske metoder. Folk kjenner kanskje til rekursjon og litt objektorientering, men ting som lister, trær, algoritmer for sortering etc. er ting mange ikke engang har en ide hva er. Da er det vanskelig å kunne besvare spørsmål rundt traversering av et gitt tre, hva «red-black tree» er og hvordan man konstruerer det, hvilken sorteringsalgoritme som egner seg for en gitt situasjon osv. selv når man tillater PHP som språk i besvarelsen. Det er forsåvidt ting man ytterst sjeldent trenger å kjenne til i PHP-sammenheng, men i andre språk og sammenhenger kan det være nødvendig (men ikke nødvendigvis da heller). Med en bachelor fra en høgskole er dette ting man fort skal kunne eller i det minste ha en ide hva er.

Lenke til kommentar

Ja det er jeg enig i ;)

Man må ha en skikkelig kickoff, noe man (som oftest) bedre kan få på skole enn å være selvlært.

Det tar kanskje litt lenger tid å ta seg opp til det mer avanserte nivåene, men det er fint mulig, men igjen, det er jo da unntak.

 

Jeg kan nok ikke en brøkdel av hva man lærer seg innen programmering (PHP) på høyskolen.

Er nok derfor jeg vurderer det, får tid til å lære ;)

 

Ja, tid er en annen faktor her, VGS gir ikke allverdens tid til å lære seg nye ting ;)

Lenke til kommentar
  • 3 uker senere...

En passord-gennerator.

Som gennererer et passord som inneholder noen tall fra 0-9, og legger til tilfeldige store og små bokstaver.

 

<?php

function randPassword() {
  $password = '';

  for ($x = 1; $x <= 8; $x++) {
  switch ( rand(1, 3) ) {

  case 1:
  $password .= rand(0, 9);
  break;

  case 2:
  $password .= chr( rand(65, 90) );
  break;

  case 3:
  $password  .= chr( rand(97, 122) );
  break;
  }
  }

  return $password;
}

echo randPassword();

?>

Lenke til kommentar

En annen variant av en tilfeldig passord-generator

 

Funksjonen randpass() genererer et tilfeldig passord/kode ut fra tegn brukeren selv kan definere. Har ikke kommentert koden, ønsket bare å lage et kjapt eksempel til andre måter man kan løse problemet med en tilfeldig passord-generator på, med litt ekstra fleksibilitet i forhold til funksjonen til Rematusen i forrige innlegg. Koden er likevel veldig grunnleggende, så det meste bør være selvforklarende. Funksjonen er ikke benchmarket, men tviler på at den vil gi noen ytelsesproblemer for relativt korte passord iallefall. Merk at scriptet kan bruke marginalt ekstra tid hvis $unique er satt, siden do...while-løkken må kjøres på nytt dersom tegnet den finner i $allowed_chars allerede eksisterer i passordet. Dette kan være et problem for lange passord i forhold til mengden tegn funksjonen har til disposisjon (et eksempel kan være randpass(10, true, '1234567890');).

 

Funksjonen tar tre parametere:

int [ $len = 6 ]: Lengden på passordet.

bool [ $unique = true ]: Definerer om kun unike tegn skal være med i passordet.

string [ $allowed_chars = '...' ]: Definerer tegn som er tillatt i passordet. Standardverdien tillater alle alfanumeriske tegn, unntatt tegn som likner mye på hverandre (I/l/1, 0/O, etc.). Dette kan selvsagt endres til å inkludere andre tegn også.

 

Eksempler for bruk av funksjonen:

echo randpass();
echo randpass(10, true, '12345'); // Vil gi en feilmelding fordi man ikke kan lage et passord av 10 unike tegn ut fra 5 tegn
echo randpass(10, false, '!#"/%()=&');

 

Kildekode for funksjonen:

function randpass($len = 6, $unique = true, $allowed_chars = '23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz')
{
if ($unique && $len > ($allowed_len = strlen($allowed_chars)))
{
	trigger_error("Cannot create a $len-char password with unique characters from $allowed_len chars", E_USER_WARNING);

	return false;
}

$len	= ($len <= 0 ? 1 : $len);
$ret	= '';

do
{
	if (($char = $allowed_chars[mt_rand(0, strlen($allowed_chars) - 1)]) !== false && ($unique ? strpos($ret, $char) === false : true))
	{
		$ret .= $char;
	}
}
while (strlen($ret) < $len);

return $ret;
}

Lenke til kommentar
  • 2 uker senere...

Funksjon som oppdaterer tabbel

 

<?php
 function UpdateTable($table,$set,$set_value,$where,$where_value) {

	  $result = mysql_query("UPDATE `$table` SET `$set`='$set_value' WHERE `$where`='$where_value'");
		  if ($result) {
			  return 1;
		  } else {
			  return 0;
		  }
  }
 ?>

 

 

Brukes f.eks slik:

 

UpdateTable(brukere,penger,$peng,id,$id);

 

Det vil bli det samme som å skrive:

 

mysql_query("UPDATE brukere SET peng = '$peng' WHERE id = '$id'");

 

 

Kan være nyttig denne?

Endret av JohndoeMAKT
Lenke til kommentar

Hadde vært mer nyttig om den hadde tillatt array som input.

 

function updateTable( $table, $set=array(), $where="", $showError=0 )
{
$returnString = "";

// "Parse" the array
foreach( $set as $key => $value )
{
	$value = mysql_real_escape_string( $value );

	if ( is_numeric( $v ) and intval($v) == $v )
	{
		$returnString = $key . "={$value},";
	}
	else
	{
		$returnString = $key . "='{$value}',";
	}
}

// Remove trailing comma
$parsedSetValues = preg_replace( "/,$/" , "" , $returnString );

// Build the final query
$query = "UPDATE `{$table}` SET {$parsedSetValues}";

if ( $where )
{
	$query .= " WHERE ".$where;
}

// Execute
$res = mysql_query( $query );

if( $res === TRUE )
{
	return TRUE;
}
else
{
	if( $showError == 1 )
	{
		die( mysql_error() );
	}

	return FALSE;
}
}


updateTable( 'users', array( 'userId' => 3, 'memberGroup' => 2, 'userName' => 'Ola Nordmann' ), 'userId=1', 1 );

Endret av m4rtin
Lenke til kommentar

En klasse jeg slang sammen i går da jeg skulle stoppe spam på en side ved å bruke reCaptcha (API: http://recaptcha.net/apidocs/captcha/). Den kan sikker forbedres noe men den funker :)

 

Man trenger både en public og en private key for å bruke den (https://admin.recaptcha.net/accounts/signup/).

 

class ReCaptcha
{
//------------------------------------------------
// Class variables
//------------------------------------------------

/**
* Url to the api server
*
* @var string
*/

const API_SERVER = "http://api.recaptcha.net";

/**
* Url to the secure api server
*
* @var string
*/

const API_SECURE_SERVER = "https://api-secure.recaptcha.net";

/**
* Url to the verification server
*
* @var string
*/

const API_VERIFICATION_SERVER = "http://api-verify.recaptcha.net/verify";

/**
* Public key
*
* @access protected
* @var string
*/

protected $publicKey;

/**
* Private key
*
* @access protected
* @var string
*/

protected $privateKey;

/**
* Remote address (IP)
*
* @access protected
* @var string
*/

protected $remoteAddress;

/**
* Answer from the reCaptcha server
*
* @access protected
* @var array
*/

protected $answer = array();

//------------------------------------------------
// Class constructor
//------------------------------------------------

/**
* Constructor.
*
* @access public
* @param string
* @param string
* @return ReCaptcha
*/

public function __construct($publicKey, $privateKey)
{
	$this->publicKey	 = $publicKey;
	$this->privateKey	= $privateKey;
	$this->remoteAddress = $_SERVER['REMOTE_ADDR'];
}

//------------------------------------------------
// Class methods
//------------------------------------------------

/**
* Returns reCaptcha JavaScript and HTML.
*
* @access public
* @param boolean
* @return string
*/

public function getHtml($ssl = false)
{
	$server = ($ssl === true) ? self::API_SECURE_SERVER : self::API_SERVER;

	$html  = "<script type=\"text/javascript\" src=\"".$server."/challenge?k=".$this->publicKey."\"></script>\n";
	$html .= "<noscript>\n<iframe src=\"".$server."/noscript?k=".$this->publicKey."\" height=\"250\" width=\"500\" frameborder=\"0\"></iframe><br />\n";
	$html .= "<textarea name=\"recaptcha_challenge_field\" rows=\"3\" cols=\"40\"></textarea>\n";
	$html .= "<input type=\"hidden\" name=\"recaptcha_response_field\" value=\"manual_challenge\" />\n</noscript>\n";

	return $html;
}

/**
* Validates the user input and returns an array containing
* a boolean value and a message from the server.
*
* @access public
* @return array
*/

public function getAnswer()
{
	if(empty($this->answer))
	{
		$challenge = !empty($_POST["recaptcha_challenge_field"]) ? $_POST["recaptcha_challenge_field"] : null;
		$response  = !empty($_POST["recaptcha_response_field"]) ? $_POST["recaptcha_response_field"] : null;

		if($challenge === null || $response === null)
		{
			// Automatically fail check if fields are empty
			//------------------------------------------------

			$this->answer['valid']   = false;
			$this->answer['message'] = "incorrect-captcha-sol";
		}
		else
		{
			// Send request to reCaptcha server
			//------------------------------------------------

			$data  = "privatekey=".urlencode($this->privateKey)."&";
			$data .= "remoteip=".urlencode($this->remoteAddress)."&";
			$data .= "challenge=".urlencode($challenge)."&";
			$data .= "response=".urlencode($response);

			$handle = curl_init();

			curl_setopt($handle, CURLOPT_URL, self::API_VERIFICATION_SERVER);
			curl_setopt($handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
			curl_setopt($handle, CURLOPT_USERAGENT, "reCAPTCHA/PHP");
			curl_setopt($handle, CURLOPT_PORT, 80);
			curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
			curl_setopt($handle, CURLOPT_POSTFIELDS, $data);

			$response = explode("\n", curl_exec($handle));

			curl_close($handle);

			$this->answer['valid']   = ($response[0] === "true") ? true : false;
			$this->answer['message'] = $response[1];
		}
	}

	return $this->answer;
}

/**
* Returns true if the check was successful and false if it failed.
*
* @access public
* @return boolean
*/

public function isValid()
{
	if(empty($this->answer))
	{
		$this->getAnswer();
	}

	return $this->answer['valid'];
}
}

 

Eksempel:

 

<html>
<body>
<form action="" method="post">

<?php

$captcha = new ReCaptcha("<PUBLIC KEY>", "<PRIVATE KEY>");

echo $captcha->getHtml();

if(!empty($_POST))
{
var_dump($captcha->getAnswer());
echo "<br />";
var_dump($captcha->isValid());
}

?>

<br />
<button type="submit" name="submit">Solve reCaptcha</button>
</form>
</body>
</html>

 

Edit: La til et eksempel

Endret av shaker
Lenke til kommentar
Det er ikke alle som er slik som du, ernie, jonas og lokaltoget.

Det er kun dere 4 som klager, vel ernie og lokaltog er ikke så ille - men dere 2 andre er fæle.

 

Det er kun dere 4 som reagerer på hva folk skriver, ingen andre sier at kodene er ubrukelige.

Jeg er en temmelig dårlig PHP-koder. Bedre en flesteparten av befolkningen, men dårligere enn de fleste som lever av dette, og jeg har reagert på all den elendige koden i denne tråden. En av de store fordelene, og også et av de største problemene med PHP er hvor lett det er å bruke. Dersom du har et problem kan du google det og få et svar, men du kan ikke garantere at løsningen du finner er god.

 

Derfor hadde det vært fint å ha ett sted der all koden var god og brukbar, sånn at jeg kan vite at løsningen på et problem faktisk vil løse problemet mitt, og ikke vært usikkert, ha problemer med tegnsett, eller være innefektivt.

 

Denne tråden kunne vært det stedet, men sånn er det ikke nå.

Lenke til kommentar
Gjest Slettet+6132
Det er ikke alle som er slik som du, ernie, jonas og lokaltoget.

Det er kun dere 4 som klager, vel ernie og lokaltog er ikke så ille - men dere 2 andre er fæle.

 

Det er kun dere 4 som reagerer på hva folk skriver, ingen andre sier at kodene er ubrukelige.

Koden din er dessverre ubrukelig. Den lille snutten du ga hører hjemme i en PHP-guide, som et eksempel på hvordan man kan gjøre noe. Som andre før meg har prøvd å forklare er dette en tråd hvor du poster en funksjon eller kodesnutt som andre kan bruke. Ja, det er flott at du kan noe PHP, men alle som kan PHP vet hvordan man gjør test.no?test, og om de ikke vet det trenger de en guide, ergo; koden din hører hjemme i en guide, ikke her.

Lenke til kommentar

Har et lite script som jeg lagde til å fikse æøå tegn feil i xmltv feed

function replace_bad_char($str) {
$str = str_replace('Ã¥', 'å', $str);
$str = str_replace('Þ', 'ø', $str);
$str = str_replace('Ê', 'æ', $str);
$str = str_replace('Æ', 'Æ', $str);
$str = str_replace('Ø', 'Ø', $str);
$str = str_replace('Ã…', 'Å', $str);
return $str;
}

 

Planen var å utvide det til andre tegn som også ble fucka opp

Men har ikke funnet noen andre enda :)

 

EDIT:

Ser at ÆØÅ tegnan blir vist annerledes her enn det gjør i gEdit

Endret av AlecTBM
Lenke til kommentar

Hastighet > oversiktlig.

 

Du trenger ikke endre tegnsettet på feeden, du trenger bare endre tegnsett på dataene du skal lese.

Noe ala:

$feed = uft8_decode( curl( FEED_URL ) );

 

Eller wget-e feeden til en lokal fil med et perl-/bashscript i en cron-job og kjøre iconv over den for å endre tegnsett til det du har lyst på.

Lenke til kommentar

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...