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
15 svar · 1 808 visningar · startad av Mycodez
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.
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
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;)
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>
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?
Dem jag skrev in var bara några exempel, :) var lite latt när jag skrev scriptet ;)
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.
Det är lugnt alla gör vi missar:)
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.
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().
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å?
I detta script så kollar jag ju om det e en elev eller lärare :)
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
)
Det där såg nästan lite bättre ju ;) men fattar inte vad $match gör direkt(A)
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.
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:)