2013-04-20 4 views
-1

Я пытаюсь создать регистрационную форму пользователя, которая отправляет письмо с подтверждением пользователю после регистрации, а когда я размещаю сайт локально, все работает нормально. Однако, когда я разместить его в Интернете (Hostgator), я получаю следующее сообщение об ошибке:Стилизация страниц с PHP

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent

Я знаю, что часть была дан ответ много раз - и да, я удалил весь текст из области выше моего PHP кода, и ошибка исчезнет.

Однако, если я не могу положить что-либо выше этого, то как я могу использовать этот код на своем сайте и все еще стилизовать страницу? Я хочу использовать таблицу стилей CSS, но сейчас я не могу ничего использовать или даже объявлять свой doctype, не видя этой ошибки.

Я пробовал создавать стилизованный html-файл, а затем использовать функцию включения php для включения моего PHP-кода, но это не работает.

Что я могу сделать, чтобы стилизовать мои страницы и использовать этот PHP-код на одной странице без ошибок? Кроме того, почему код работает правильно на моем локальном сервере, но не тогда, когда я загружаю его в hostgator?

Ниже приведен код php, который используется для моей страницы, что вызывает ошибки. Есть идеи?

index.php

<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Untitled Document</title> 
</head> 

<body> 
<?php 
session_start(); 
if(isset($_SESSION['error'])) 
{ 
    echo '<p>'.$_SESSION['error']['username'].'</p>'; 
    echo '<p>'.$_SESSION['error']['email'].'</p>'; 
    echo '<p>'.$_SESSION['error']['password'].'</p>'; 
    echo '<p>'.$_SESSION['error']['gender'].'</p>'; 
    unset($_SESSION['error']); 
} 
?> 
<div class="signup_form"> 
<form action="register.php" method="post" > 
<p> 
    <label for="username">User Name:</label> 
    <input name="username" type="text" id="username" size="30"/> 
</p> 
<p> 
    <label for="email">E-mail:</label> 
    <input name="email" type="text" id="email" size="30"/> 
</p> 
<p> 
    <label for="password">Password:</label> 
    <input name="password" type="password" id="password" size="30 "/> 
</p> 
    <p> 
    <label for="gender">Gender: </label> 
    <select name="gender" id="gender"> 
     <option value="NULL" selected>Select...</option> 
     <option value="Male">Male</option> 
     <option value="Female">Female</option> 
    </select> 
    </p> 
    <p> 
    <label for="postalcode">Postal Code:</label> 
    <input name="postalcode" type="text" id="postalcode" size="15"/> 
</p> 
<p> 
    <input name="submit" type="submit" value="Submit"/> 
</p> 
</form> 
</div> 


</body> 
</html> 

register.php

<?php 
session_start(); 
include('configdb.php'); 
if(isset($_POST['submit'])) 
{ 
//whether the username is blank 
if($_POST['username'] == '') 
{ 
    $_SESSION['error']['username'] = "User Name is required."; 
} 
//whether the email is blank 
if($_POST['email'] == '') 
{ 
    $_SESSION['error']['email'] = "E-mail is required."; 
} 
else 
{ 
    //whether the email format is correct 
    if(preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9._-]+)+$/", $_POST['email'])) 
    { 
    //if it has the correct format whether the email has already exist 
    $email= $_POST['email']; 
    $sql1 = "SELECT * FROM user WHERE email = '$email'"; 
    $result1 = mysqli_query($mysqli,$sql1) or die(mysqli_error()); 
    if (mysqli_num_rows($result1) > 0) 
      { 
    $_SESSION['error']['email'] = "This Email is already used."; 
    } 
    } 
    else 
    { 
    //this error will set if the email format is not correct 
    $_SESSION['error']['email'] = "Your email is not valid."; 
    } 
} 
//whether the password is blank 
if($_POST['password'] == '') 
{ 
    $_SESSION['error']['password'] = "Password is required."; 
} 
    //if the error exist, we will go to registration form 
if(isset($_SESSION['error'])) 
{ 
    header("Location: index.php"); 
    exit; 
} 
else 
{ 
    $username = $_POST['username']; 
    $email = $_POST['email']; 
    $password = $_POST['password']; 
    $gender = $_POST['gender']; 
    $postalcode = $_POST['postalcode']; 
    $com_code = md5(uniqid(rand())); 

    $sql2 = "INSERT INTO user (username, email, password, com_code, gender, postalcode) VALUES ('$username', '$email', '$password', '$com_code', '$gender', '$postalcode')"; 
    $result2 = mysqli_query($mysqli,$sql2) or die(mysqli_error()); 

    if($result2) 
    { 
    $to = $email; 
    $subject = "Confirmation from TutsforWeb to $username"; 
    $header = "TutsforWeb: Confirmation from TutsforWeb"; 
    $message = "Please click the link below to verify and activate your account: "; 
    $message .= "http://www.emotionpool.com/SWIFT/confirm.php?passkey=$com_code"; 

    $sentmail = mail($to,$subject,$message,$header); 

    if($sentmail) 
      { 
    echo "Your Confirmation link Has Been Sent To Your Email Address."; 
    } 
    else 
     { 
    echo "Cannot send Confirmation link to your e-mail address"; 
    } 
    } 
} 
} 
?> 
+0

Его не ясно, что ур пытается достичь. Стилизованный html как в css? Где? В регистрационной форме? В index.php или register.php? –

+0

Отделите свою бизнес-логику от презентации. Сжатие их вместе ужасно для обслуживания и расширяемости для начала. Сначала бизнес-логика, * затем * презентация. Посмотрите на MVC. – deceze

ответ

0

session_start должен быть перед любым выходом.

<?php 
session_start();?> 
    <!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Untitled Document</title> 
</head> 

<body> 
<?php 
if(isset($_SESSION['error'])) 
{ 
    echo '<p>'.$_SESSION['error']['username'].'</p>'; 
    echo '<p>'.$_SESSION['error']['email'].'</p>'; 
    echo '<p>'.$_SESSION['error']['password'].'</p>'; 
    echo '<p>'.$_SESSION['error']['gender'].'</p>'; 
    unset($_SESSION['error']); 
} 
?> 
<div class="signup_form"> 
<form action="register.php" method="post" > 
<p> 
    <label for="username">User Name:</label> 
    <input name="username" type="text" id="username" size="30"/> 
</p> 
<p> 
    <label for="email">E-mail:</label> 
    <input name="email" type="text" id="email" size="30"/> 
</p> 
<p> 
    <label for="password">Password:</label> 
    <input name="password" type="password" id="password" size="30 "/> 
</p> 
    <p> 
    <label for="gender">Gender: </label> 
    <select name="gender" id="gender"> 
     <option value="NULL" selected>Select...</option> 
     <option value="Male">Male</option> 
     <option value="Female">Female</option> 
    </select> 
    </p> 
    <p> 
    <label for="postalcode">Postal Code:</label> 
    <input name="postalcode" type="text" id="postalcode" size="15"/> 
</p> 
<p> 
    <input name="submit" type="submit" value="Submit"/> 
</p> 
</form> 
</div> 


</body> 
</html> 
0

Вы можете объявить код PHP выше HTML декларации

<?php session_start(); ?> 
<!doctype html> 
<html><head> 
... your headers && some php codes 
</head> 
<body> 
... your body && some php codes 
</body> 
</html> 
Смежные вопросы