Gå til innhold

Nytt problem - unexpected T_ELSE


Anbefalte innlegg

Sliter litt med en mysql spørring. Har ikke helt kontroll på hvordan man skal gjøre det når man har litt vel mange single og dobbelquotes, men trodde dette burde fungere, det gjør det derimot ikke. Hva skal det stå for at php skal forstå det?

 

$result = mysql_query("select * from user where username='"$_POST['username']"'");

 

Jeg får "unexpected T_VARIABLE" feilmelding. Bruker jeg fx 'Hello' funker det, men ikke når jeg bruker en variabel...

 

PS: Håper quotene kommer tydelig fram...

Endret av Pangaea
Lenke til kommentar
Videoannonse
Annonse

Takker, det fungerte :)

"select * from user where username='".$_POST['username'].""

Men jeg forstår ikke helt hvorfor, kan du forklare litt please? Hvorfor ikke singlequote rett etter 2. punktum? Er litt dårlig på dette her... :blush:

Lenke til kommentar
Aldri stol på data sendt via et skjema:

"select * from user where username='".mysql_escape_string($_POST)['username']."'

 

Du burde ta med ' etter uttrykket. Fungerer det uten?

Det fungerte uten ', men har nå "'" på slutten av uttrykket...

 

Ang. sikkerhet fra skjema. Jeg har nå fx

$username = htmlspecialchars(addslashes(strip_tags(trim($_POST['username']))))

 

Er det en god måte å gjøre det på, eller bør det være med mysql_escape_string i tillegg, eller bytte for noe?

Lenke til kommentar
Aldri stol på data sendt via et skjema:

"select * from user where username='".mysql_escape_string($_POST)['username']."'

 

Du burde ta med ' etter uttrykket. Fungerer det uten?

Hva kan skje når man skjemaet brukes kun til SELECT funksjonen?

Eller, hva kan skje når man bruker den i en INSERT funksjonen?

 

Lurer litt på det egentlig, skjønner dette med strip_tags da :)

Endret av LoS
Lenke til kommentar

Såvidt jeg har forstått kan en hacker gjøre stor skade uansett hva slags type SQL-kommando man holder på med.

strip_tags() kan bli kluss med om taggene ikke er "skikkelige", fx "<b>blahbal</b;jfkld"

 

Tror dette er en grei måte å gjøre det på...

htmlspecialchars(mysql_escape_string(trim($string)));

 

 

Men så til mitt nye problem...

Har nå et ganske så langt script på nesten 200 linjer. Alt har funket bra mens jeg har utviklet det, men nå får jeg plutselig en "unexpected T_ELSE" error på linje 125. Jeg har ikke forandret noe der, men lagt til litt mer stasj lenger oppe.

 

Jeg klarer ikke å se hva feilen er, men håper noen kan hjelpe meg litt :)

 

  if(validateEmail($_POST['email1']) && validateEmail($_POST['email2'])

   && ($_POST['email1'] == $_POST['email2']));

 

  {

   $email = $_POST['email1'];

 

   /* MASSE PHP KODE */

   

  }

  else   <---- linje 125

  {

   $_SESSION['err_email1'] = $err_email1;

   $_SESSION['err_email2'] = $err_email2;

   $_SESSION['email1'] = "";

   $_SESSION['email2'] = "";

   $_SESSION['err_country'] = $err_country;

  }

 }

Håper koden ser noenlunde forståelig ut, kan poste alt om nødvendig, men blir ganske langt...

Endret av Pangaea
Lenke til kommentar
Aldri stol på data sendt via et skjema:

"select * from user where username='".mysql_escape_string($_POST)['username']."'

 

Du burde ta med ' etter uttrykket. Fungerer det uten?

Hva kan skje når man skjemaet brukes kun til SELECT funksjonen?

Eller, hva kan skje når man bruker den i en INSERT funksjonen?

 

Lurer litt på det egentlig, skjønner dette med strip_tags da :)

Problemet er hvis noen avslutter feltet med ' og så setter inn ;

Da har de muligheten til å kjøre en ny spørring, som f.eks. legge til en ny bruker! Det gjelder uansett hva slags spørring du kjører.

 

Pangaea - feilen ligger nok i den koden du har tatt bort. Let etter feil bruk/mangel på ; ) }

Endret av ????????
Lenke til kommentar

Bare et lite tips som kan være kjekt:

"select * from user where username={$_POST['username']}"

Bruk av ."."." kan føre til noen feil i lukking av fnutter osv.

Ved å legge variabelen inne i {} klammer blir det hele litt lettere å lese og holde styr på.

Og selvfølgelig mindre kode.

Lenke til kommentar

Takk for info ????????, fikser opp i noen scripts nå :)

Findus: bruker selv det du skriver der, men problemet med en slik form for spørring vil bli at du bare kan bruke ett ord.

Hvis brukernavnet som blir søkt på f.eks er "Hei på deg" så vil den bruke "Hei" og prøve å kjøre "på" som en kommando i spørringen.

Bruk det heller slik:

"select * from user where username='{$_POST['username']}'"

Bare for å pirke litt :)

Lenke til kommentar
Takk for info ????????, fikser opp i noen scripts nå :)

Bra, det er faktisk en veldig vanlig måte å hacke scripts på.

Skal du ha et lite tips til for å spare litt tid, se på denne:

 

foreach($_POST as $var => $verdi){

$Skjema[$var] = mysql_escape_string($verdi);

}

 

Setter du inn den på siden slipper du å skrive mysql_escape_string hele tiden å heller bytte ut $_POST['variabel'] med $Skjema['variabel']

Endret av ????????
Lenke til kommentar

Virker bra, kan jeg legge dette i en funksjon, eller må jeg skrive:

foreach($_POST as $var => $verdi){
$Skjema[$var] = mysql_escape_string($verdi);

her kommer hele scriptet;

}

?

Hvis du forstår hva jeg mener?

Lenke til kommentar
Pangaea - feilen ligger nok i den koden du har tatt bort. Let etter feil bruk/mangel på ; ) }

Har leitet som f i koden men finner ingenting galt. Tok også å kommenterte ut den else'n og da fungerte det uten feilmelding. Syns det er veldig rart for å være helt ærlig...

Er en veldig enkel else, og jeg har mange av akkurat samme form både lenger oppe og lenger nede i scriptet (mange nested if's).

 

else
 	{
   $_SESSION['err_email1'] = $err_email1;
   $_SESSION['err_email2'] = $err_email2;
   $_SESSION['email1'] = "";
   $_SESSION['email2'] = "";
   $_SESSION['err_country'] = $err_country;
 	}

Kan vertfall ikke se noen feil der. Hadde det vært feil lenger oppe, burde feilen skjøvet seg lenger ned når jeg kommenterte ut ovennevnte kode, men det skjer ikke. Noen som har den minste anelse om hva som kan være feil?

Lenke til kommentar

Det du har postet av kode gjør det ca. umulig å finne feilen, for den siste } du har med avslutter ikke noen av de påbegynte delene - så enten har du glem å avslutte noe eller så har du med en else for mye.

 

Post hele koden her så er det mulg å hjelpe deg.

Lenke til kommentar
Det du har postet av kode gjør det ca. umulig å finne feilen, for den siste } du har med avslutter ikke noen av de påbegynte delene - så enten har du glem å avslutte noe eller så har du med en else for mye.

 

Post hele koden her så er det mulg å hjelpe deg.

Okay, poster hele greia, det er ganske langt da...

 

<?php
include("./include/session_vars.inc.php");
include("./include/db_conn.inc.php");
include("./include/function.inc.php");

$err_username1 = "Enter a username";
$err_username2 = "Username already taken. Try a different username.";
$err_password1 = "Enter a password";
$err_password2 = "Retype the password";
$err_email1 = "Enter a valid email adress";
$err_email2 = "Retype the email adress";
$err_country = "Select a country";

//echo "Email1: ".$_POST['email1'];

if(isset($_POST['submit']))
{
$_SESSION['username'] = $_POST['username'];
$_SESSION['password1'] = $_POST['password1'];
$_SESSION['password2'] = $_POST['password2'];
$_SESSION['email1'] = $_POST['email1'];
$_SESSION['email2'] = $_POST['email2'];
$_SESSION['firstname'] = $_POST['firstname'];
$_SESSION['lastname'] = $_POST['lastname'];
$_SESSION['day'] = $_POST['day'];
$_SESSION['month'] = $_POST['month'];
$_SESSION['year'] = $_POST['year'];
$_SESSION['country_id'] = $_POST['country_id'];
$_SESSION['location'] = $_POST['location'];
$_SESSION['url'] = $_POST['irl'];
$_SESSION['icq'] = $_POST['icq'];
$_SESSION['msn'] = $_POST['msn'];
$_SESSION['notes'] = $_POST['notes'];

$tmp_username = htmlspecialchars(mysql_escape_string(trim($_POST['username'])));
$result = mysql_query("select * from acdc_user where username='$tmp_username'");

//$result = mysql_query("select * from acdc_user where username='".$_POST['username']."'");

if(!empty($tmp_username) && (mysql_num_rows($result)<1))
{
 $username = $tmp_username; //trim+++ checks

 if(!empty($_POST['password1']) && !empty($_POST['password2'])
 	&& ($_POST['password1'] == $_POST['password2']))
 {
 	$password = md5($_POST['password1']);

 	/*if(validateEmail($_POST['email1']) && validateEmail($_POST['email2'])
   && ($_POST['email1'] == $_POST['email2']));*/

 	if(!empty($_POST['email1']) && !empty($_POST['email2'])
   && ($_POST['email1'] == $_POST['email2']));
 	{
   $email = $_POST['email1'];

   if(is_numeric($_POST['country_id']))
   {
   	$country_id = $_POST['country_id'];

   	$firstname = $_POST['firstname'];
   	$lastname = $_POST['lastname'];

   	if(!is_numeric($_POST['day']))
   	{
     $day = NULL;
   	}
   	else
   	{
     $day = $_POST['day'];
   	}

   	if(!is_numeric($_POST['month']))
   	{
     $month = NULL;
   	}
   	else
   	{
     $month = $_POST['month'];
   	}

   	if(!is_numeric($_POST['year']))
   	{
     $year = NULL;
   	}
   	else
   	{
     $year = $_POST['year'];
   	}

   	$location = $_POST['location'];
   	$url = $_POST['url'];
   	$icq = $_POST['icq'];
   	$msn = $_POST['msn'];
   	$notes = $_POST['notes'];
   	$user_active = 0;
   	$user_level = 1;

   	$query = "INSERT INTO acdc_user (username, pass, email, firstname, lastname, bday_day, bday_month,
        bday_year, country_id, location, url, icq, msn, notes, user_active, user_level, joined)
        VALUES ('$username', '$password', '$email', '$firstname', '$lastname', '$day', '$month',
        '$year', '$country_id', '$location', '$url', '$icq', '$msn', '$notes', '$user_active',
        '$user_level', now())";

   	echo $query;

   	$result = mysql_query($query) or die ("Could not execute query.".mysql_error());

   	if (!empty($result))
   	{
     // succesfully registered user
     //header("location: index.php");
     exit;
   	}
   	else
   	{
     header("location: index.php?page=register");
     exit();
   	}
   }
   else
   {
   	$_SESSION['err_country'] = $err_country;
   }
 	}
 	else    // <---- HER FÅR JEG FEIL
 	{
   $_SESSION['err_email1'] = $err_email1;
   $_SESSION['err_email2'] = $err_email2;
   $_SESSION['email1'] = "";
   $_SESSION['email2'] = "";
   $_SESSION['err_country'] = $err_country;
 	}
 }
 else
 {
 	$_SESSION['err_password1'] = $err_password1;
 	$_SESSION['err_password2'] = $err_password2;
 	$_SESSION['password1'] = "";
 	$_SESSION['password2'] = "";

 	if(empty($_POST['email1']) || empty($_POST['email2'])
 	|| ($_POST['email1'] != $_POST['email2']))
 	{
   $_SESSION['err_email1'] = $err_email1;
   $_SESSION['err_email2'] = $err_email2;
   $_SESSION['email1'] = "";
   $_SESSION['email2'] = "";
 	}
 	$_SESSION['err_country'] = $err_country;
 }
}
else
{
 if(empty($_POST['username']))
 {
 	$_SESSION['err_username'] = $err_username1;
 }
 else
 {
 	$_SESSION['err_username'] = $err_username2;
 }

 if(empty($_POST['password1']) || empty($_POST['password2'])
 	|| ($_POST['password1'] != $_POST['password2']))
 {
 	$_SESSION['err_password1'] = $err_password1;
 	$_SESSION['err_password2'] = $err_password2;
 	$_SESSION['password1'] = "";
 	$_SESSION['password2'] = "";
 }

 if(empty($_POST['email1']) || empty($_POST['email2'])
 	|| ($_POST['email1'] != $_POST['email2']))
 {
 	$_SESSION['err_email1'] = $err_email1;
 	$_SESSION['err_email2'] = $err_email2;
 	$_SESSION['email1'] = "";
 	$_SESSION['email2'] = "";
 }

 if(!is_numeric($_POST['country_id']))
 {
 	$_SESSION['err_country'] = $err_country;
 }
}
}
else
{
echo "Form was not properly submitted.";
}

header("location: index.php?page=register");

?>

 

Det er ikke helt ferdig og har litt midlertidige løsninger her og der, men er for det meste ferdig.

 

Sånn ser validateEmail funksjonen ut btw...

function validateEmail($email)
{
return eregi("^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$", $email);
}

 

Håper noen orker å se gjennom, og klarer å finne noe feil :)

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