0

PHPでホームページを作ろうとしています。問題は、サーバー エラーが発生することもあれば、まったく見返りが得られないこともあります。ある時点で、サーバーはファイル タイプ自体を変更しました。何が問題なのかわかりません。

そして、実際には何が問題なのかわからないので、ファイル全体をここに貼り付けますが、最初の数行が問題であると予想しています(ここに置きます:http://www.iandapp.com/smic/ subscription.php ) :

<?php header('Content-Type: text/html; charset=ISO-8859-1');

echo("<div id='subscribe'>");

$mail = $_POST['email1'];

//Set the locale format, etc. of date and time
date_default_timezone_set('Europe/Stockholm');
setlocale(LC_TIME, "sv_SV");

//Create the db-connection
$mysqli = mysqli_connect("mydb", "myuser", "mupsw", "myschema", "3306");

//If verifying the subscription, makse sure the db is updated accordingly
if($_GET['newid'] != ""){
    //Make the subscriber a verified subscriber
    $result = mysqli_query($mysqli,"UPDATE users SET subscriber = 1 WHERE id = " . $_GET['newid']);
    if($result){
        echo("<p>Welcome to our newsletter! We will send you information about any new application or update. This will not happen too often, but once it does we hope you will have the opportunity to look into our site again.<p/>");
        echo("<p><br/>If you wish to unsubscribe from this mail-list, please visit out subscription page: <a href="http://" . $_SERVER['HTTP_HOST'] . "/subscription.php"> http://" . $_SERVER['HTTP_HOST'] . "/subscription.php </a> <p/>");
    }else{
        echo("<p>Somthing went wrong, please click the link again!<p/>");
    }

}elseif($_POST['email1'] != ""){ //Only do things if there is an e-mail posted

    //Make sure the ID is unique
    do{
        $rand_int = rand(100000000, 999999999);
        $result = mysqli_query($mysqli, "SELECT id FROM users WHERE id = " . $rand_int);

        $no_of_rows = mysqli_num_rows($result);

        }while($no_of_rows != 0);
    echo("RAND :".$rand_int);

    //Create query for saving the new user e-mail
    $query = "INSERT INTO users(id, email, first_name, surname) VALUES ('" . $rand_int . "', '".$_POST['email1']."', '". $_POST['first_name']."','".$_POST['surname']."')";
    $re = mysqli_query($mysqli, $query);
    echo("Result: ".$re);

    //Check if mail already exist (Error code 1062 = dublicate entries for unique fields)
    $existing = 0;
    if(mysqli_errno($mysqli)==1062){
        echo("It seems like your e-mail already is registered. Perhaps you have been a subscriber earlier? By clicking the link that you will receive in your mail box you subscribe to the newsletter again. ");
        $existing = 1;
        $result = mysqli_query($mysqli,"SELECT id FROM users WHERE email = '" . $_POST['email1'] . "'");
        $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
        $rand_int = $row['id'];
        mysqli_query($mysqli,"UPDATE users SET waiting_for_unsubscribe = 0 WHERE email = '" . $_POST['email1'] . "'");
        if(mysqli_errno($mysqli)){
        echo("Error code " . mysqli_errno($mysqli) . "<br/>");
        echo("Error text " . mysqli_errno($mysqli) . "<br/>");
    }
        //echo("ID------ " . $row['id'] . " ri---- " . $rand_int);
    }



    //Create the link for the user to verify the subscription
    $url = "http://" . $_SERVER['HTTP_HOST'] . "/smic/subscription.php?newid=" . $rand_int;     


    $mymail = $_POST['email1'];
    $esubject = "Please verify your subscription to iAndApp's newsletter ";
    $body = "Click the link in order to verify your subscription (If you cannot click the link, just copy it and paste it into the adress field of your browser): " . $url;
    $eemail = "NoReply@iandapp.com";
    $sent = mail($mymail,$esubject,$body,"From: $eemailn");
    if($sent){
        if($existing != 1){
            echo "<br/>An e-mail with a link has been sent to ". $mymail . ". Please click the link in order to verify your subscription";
        }
    }else{
        echo "Something went wrong. Please try again and make sure you enter a correct e-mail adress.";
    }
    $existing = 0;

mysqli_free_result($result);

//If unsubscribing
}elseif($_POST['unsubscribedmail'] != ""){
    //echo("Unsubscribe........");
    //echo($_POST['unsubscribedmail']);
    $result = mysqli_query($mysqli,"UPDATE users SET waiting_for_unsubscribe = 1 WHERE email = '" . $_POST['unsubscribedmail'] . "'");

    //echo("Err code " . mysqli_errno($mysqli));
    //echo("Err text " . mysqli_error($mysqli));
    if(mysqli_errno($mysqli)){
        echo("Error code " . mysqli_errno($mysqli) . "<br/>");
        echo("Error text " . mysqli_errno($mysqli) . "<br/>");
    }

    $result = mysqli_query($mysqli,"SELECT id FROM users WHERE email = '" . $_POST['unsubscribedmail'] . "'");
    $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
    //echo("ID------ " . $row['id']);
    //Create the link for the user to verify that he/she  unsubscribes
    $url = "http://" . $_SERVER['HTTP_HOST'] . "/smic/subscription.php?unsubscribeid=" . $row['id'];

    $mymail = $_POST['unsubscribedmail'];
    $esubject = "Please verify that you want to unsubscribe from iAndApp's newsletter ";
    $body = "Click the link in order to verify that you want to unsubscribe from iAndApp's newsletter (If you cannot click the link, just copy it and paste it into the adress field of your browser): " . $url;
    $eemail = "NoReply@iandapp.com";
    $sent = mail($mymail,$esubject,$body,"From: $eemailn");
    if ($sent) echo "<br/>A mail with a link has been sent to ". $mymail . ". Please click the link in order to verify that you will unsubscribe from the newsletters.";
    else echo "Something went wrong. Please try again and make sure you enter a correct e-mail adress.";

mysqli_free_result($result);    
}elseif($_GET['unsubscribeid'] != ""){
    $result = mysqli_query($mysqli,"UPDATE users SET subscriber = 0, waiting_for_unsubscribe = 0 WHERE id = " . $_GET['unsubscribeid']);
    if($result){
        echo("<p>You have now unsubscribed to the newsletter. Thank you for this time and we hope to see you again in the future. /iAndApp.<p/>");
    }else{
        echo("<p>Somthing went wrong, please click the link again!<p/> ".$result);
    }

}else{

echo("<div class="subscribe">
<h4>Subscribe</h4>
<p>Subscribe to iAndApp's newsletter in order to get information about new and updated iPhone games and iPhone applications, that has been released by iAndApp. </p>
<form action="subscription.php" name="subscribe" method="post"  onsubmit="return isValidEmailAndEqual()">
<p class="formlabel">Förnamn</p> <input type="text" name="first_name"/><br/>
    <p class="formlabel">Efternamn</p> <input type="text" name="surname"/> <br/>
<p class="formlabel">E-mail</p> <input type="text" name="email1"/>
<br/>
<p class="formlabel">Repeat e-mail</p> <input type="text" name="email2"/> <br/>
<input class="inputsubmit" type="submit" value="Subscribe"/>
</form>
</div>");

echo("<div class="footer"></div>");


echo("<div class="subscribe">
<h4>Unsubscribe</h4>
<p>Fill in your e-mail address and submit in order to unsubscribe from iAndApp's newsletter. </p>
<form action="subscription.php" name="unsubscribe" method="post"  onsubmit="return isValidEmail()">
<p class="formlabel">E-mail</p> <input type="text" name="unsubscribedmail"/><br/>
<input class="inputsubmit" name="submitbutton" type="submit" value="Unsubscribe"/>
</form>
</div>");

}

mysqli_close($mysqli);

echo("</div>");

?>

もちろん、アプリケーション全体を調べてデバッグすることは期待していませんが、おそらく経験豊富な人々にとっては、どこを見ればよいかがわかります。

このところストレスがたまり始めて…

何が問題なのか、どうすれば解決できるのかアドバイスをお願いします。

前もって感謝します!

4

3 に答える 3

5

コードのエラー:

echo("<div class="subscribe">
<h4>Subscribe</h4>
<p>Subscribe to i

最初の行では、2 番目の引用符で文字列を閉じるだけです。コードを修正するだけです。

于 2011-07-15T08:49:43.203 に答える
2

HTML タグ内の二重引用符をエスケープするか、単一引用符を使用する必要があります。現在、echo は の後に閉じられたと考えてい"<div class="ます。次のいずれかを使用します。

echo "<div class=\"class\">";

また

echo '<div class="class">';

また

echo "<div class='class'>";
于 2011-07-15T08:51:59.540 に答える
1

サーバーから応答が得られない (ドキュメントがクリアである) か、サーバー エラーが発生しているが、これが常に発生するわけではなく、スクリプトが正常に動作する場合は、メモリ制限の問題である可能性があります。

do{
    $rand_int = rand(100000000, 999999999);
    $result = mysqli_query($mysqli, "SELECT id FROM users WHERE id = " . $rand_int);

    $no_of_rows = mysqli_num_rows($result);

    }while($no_of_rows != 0);

コードのこの部分は私にはよく見えません。db の id フィールドで auto_increment を使用することをお勧めします (したがって、id は常に一意になります)。

于 2011-07-15T08:52:30.943 に答える