webForumDet fria alternativet

Hjälp med att "ta lös"/"explode" vissa delar av ett Email

PHP

15 svar · 1 808 visningar · startad av Mycodez

Medlem sedan feb. 2010445 inlägg
Frågan#1

Hej,

Jag sitter här och gör ett litet projekt jag har fått för mig att göra, men jag vet inte inte hur jag ska göra en grej.

Men en angiven email innan för min skola jag går på just nu. I denna funktion eller vad man nu ska säga så vill jag ta bort vissa, delar av en angiven email,

Nu e det så här att jag vet inte hur jag ska göra detta. Hur man ska använda explode funktion i PHP.

TE08Roka, BF09RoKa, MPA11RoKa, SPA07Roka, Detta är bara Exempel av massa olika, Men det jag vill göra nu är då att bara ta bort de 4 sisa bokstäverna som är "namn", det första är då det jag vill använda, för att sortera upp dem "klassvis".

Detta kommer då från Emails som varje elev får.

<TE08RoKa@.....se>

Det jag vill ha ut är då TE08, BF09, MPA11, SPA07, och så vidare.

Det jag vet jag kan ha det är en Array, med dem tillåtna klasserna. och så, som kan se ut t.ex.

$allowed_classes = array('TE08', 'BF09', 'MPA11', 'SPA07');

En grej till användaren ska kunna skriva in all med små bokstäver men jag vet nu inte längre hur jag ska gå till väga med att få ut bara dem tillåtna delarna.

Hoppas ni förstår hur jag menar.

/Robin K.

Medlem sedan juni 20006 031 inlägg
#2

Andvänd substr() http://php.net/manual/en/function.substr.php

substr($mailaddress, 0, 4);

Ska det alltid vara stora bokstäver när du sparar värdena så kan du använda strtoupper() http://se2.php.net/manual/en/function.strtoupper.php

Medlem sedan feb. 2010445 inlägg
#3

Okej,
Så denna lösning för funka då?

<html>
<form action="" method="POST">
<input type="text" name="korta" /><input type="submit" value="korta"/>
</form>

<?php
if(isset($_POST['korta'])){
$korta = $_POST['korta'];
$email = $korta;
$kam = explode('@',$korta);
print_r($kam);
$k = $kam[0];

$class = strtolower(substr($k, 0, -4));
echo "<br/>".$class."<br/>";
$allowed_classes = array('te08','te09');

if(in_array($class, $allowed_classes)===true){
	echo "allowed<br/>";
} else{
 echo "Not Allowed<br/>";
}
echo $email."<br/>";
}
?>
</html>

Går den här koden göra bättre då? Men classes ska vara srtoupper(), men har inte fixat det än;)

Medlem sedan juni 20006 031 inlägg
#4

Inte riktigt. Du har bl.a satt -4 i din substr().
Har du -4 så plockar du ut dom sista 4 tecknen i strängen, inte dom första 4.
Har ändrat en del annat också, bl.a tagit bort din explode som var onödig.

<html>
<form action="" method="POST">
<input type="text" name="korta" /><input type="submit" value="korta"/>
</form>

<?php
if(isset($_POST['korta'])) {
	
	$email = trim($_POST['korta']);
	
	if(empty($email)) {
		echo 'Du måste fylla i din e-post adress.';
		exit;
	}
	
	$class = strtolower(substr($email, 0, 4));
	echo "<br />$class<br />";
	
	$allowed_classes = array('te08','te09');
	
	if(in_array($class, $allowed_classes)){
		echo "allowed<br />";
	} else{
		echo "Not Allowed<br />";
	}
	echo $email."<br />";
}
?>
</html>
Medlem sedan feb. 2010445 inlägg
#5

Varför jag gjorde explode() var ju för att skrev jag in tex <te08roka@....se> så delade den nu upp så te08roka var sig, den där tog jag ju bort dem fyra sista bokstäverna som e namnet. och jag skulle få ut TE08 ser jag ville ha. skulle jag tex skriva in <MPA08RoKa@....se> så skulle jag också få ut, ju MPA08 osm jag ville också ha ut, tar jag ditt sätt så tar den ut rätt på första, men om tex, MPA08roka skulle skrivas in så blir det väll bara MPA0 som blir kvar, eller? har jag fattat det fel?

Medlem sedan feb. 2010445 inlägg
#6

Dem jag skrev in var bara några exempel, :) var lite latt när jag skrev scriptet ;)

Medlem sedan juni 20006 031 inlägg
#7

Ok, det var nog jag som kollade dåligt.
Trodde att det alltid var dom första fyra tecknen du skulle ha ut, missade att det kunde vara fler ibland.

Medlem sedan feb. 2010445 inlägg
#8

Det är lugnt alla gör vi missar:)

Medlem sedan feb. 2010445 inlägg
#9

Jag har kommit på en grej,
Jag har då kommit på at elver och lärare inte har samma upplägg på emailadresserna.
en lärases kan se ut tex <robin.kardell@.....se> och en elevs ser ut <TE08roka@......se>

men hur kan man enkelt se om det e en lärare eller en elev.

Medlem sedan juni 20006 031 inlägg
#10

Vet inte hur viktigt det är med säkerheten i skriptet du håller på med.

T.ex kan du kolla om $kam[0] innehåller en punkt.
Finns olika funktioner du kan kolla på, t.ex strpos() och preg_match().

Medlem sedan feb. 2010445 inlägg
#11

typ såhär? byggt om det

<html>
<form action="" method="POST">
<input type="text" name="email" /><input type="submit" />
</form>
<?php
if(isset($_POST['email'])){
$name = $_POST['email'];

$user = explode('@',$name);

print_r($user);
echo '<br />';

$t = explode('.',$user[0]);
$c = count($t);
print_r($c);
echo '<br/>';

if($c==2){

$fn_t = substr($t[0],0,3);
echo $fn_t.'<br/>';
$ln_t = substr($t[1],0,3);
echo $ln_t.'<br/>';
$user =  $fn_t.''.$ln_t;
echo $user.'<br/>';

}else{

//elev användarnamn och tar fram klassen man få i.
$user = $t[0];
$class = strtolower(substr($user, 0, -4));

echo "Student  = Username is <u>".$user."</u> and the class is <u>".$class."</u>";

}

}
?>
</html>

Hur ska man få det säkrare då?

Medlem sedan feb. 2010445 inlägg
#12

I detta script så kollar jag ju om det e en elev eller lärare :)

Medlem sedan juni 200813 inlägg
#13

Gör det med regex, mycket mer stabilt

$testmails = array(
	"TE08Roka@exempel.se",
	"BF09RoKa@exempel.se",
	"MPA11RoKa@exempel.se",
	"SPA07Roka@exempel.se"
	);

$students = array();

foreach($testmails as $mail) {
	preg_match("/^([a-zA-Z]{2,3}[0-9]{2})/", $mail, $match);
	$students[] = $match[1];
}

en print_r på students blir då

Array
(
    [0] => TE08
    [1] => BF09
    [2] => MPA11
    [3] => SPA07
)
Medlem sedan feb. 2010445 inlägg
#14

Det där såg nästan lite bättre ju ;) men fattar inte vad $match gör direkt(A)

Medlem sedan nov. 2006188 inlägg
#15

prova med

$allowed_classes[0]
$allowed_classes[1]
$allowed_classes[2]
$allowed_classes[3]

Du kan också göra en force för loopa den och göra typ så här

$allowed_classes[$i]

typ något åt det hållet.

Medlem sedan feb. 2010445 inlägg
#16

okej, hur gör man det det, är itne detn duktigaste php programmerarn här, men som jag har det nu så funkar det som jag har tänkt mig i allafall:)

258 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)