Проблема с if (mb_strlen ()! = #) - PullRequest
       2

Проблема с if (mb_strlen ()! = #)

0 голосов
/ 24 февраля 2012

Это, вероятно, действительно грязный и грязный код, поэтому любые входные данные также будут полезны, но моя главная проблема заключается в том, что я не могу обработать ввод "ISBN", если строка содержит правильное количество символов (10 или 13). Я не уверен, где это идет не так. Это на линии 64.

Пожалуйста, помогите! Спасибо.

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Link Generator</title>
</head>

<body>
    <?php

        function showForm() {

            if (empty($_POST['title'])) {
                $title = "Book Title";
            } else {
                $title = $_POST['title'];
            }
    ?>

    <form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">

        Search by ISBN<br />
        <input type="text" maxlength="13" name="ISBN" size="30" value="ISBN" onblur="if(this.value == '') { this.value='ISBN'}" onfocus="if (this.value == 'ISBN') {this.value=''}" /><br />

        <br />OR<br /><br />

        Search by Title <strong>and</strong> Author<br />
        <input type="text" maxlength="13" name="title" size="30" value="<?php echo $title; ?>" onblur="if(this.value == '') { this.value='Book Title'}" onfocus="if (this.value == 'Book Title') {this.value=''}" /><br />
        <input type="text" maxlength="13" name="aname" size="30" value="Author Name" onblur="if(this.value == '') { this.value='Author Name'}" onfocus="if (this.value == 'Author Name') {this.value=''}" /><br />

        <br /><input type="submit" name="submit" value="Generate Link" />

    </form>

    <?php

        }

        function generateLink_ISBN() {
            echo "Your link has been generated:<br />";
            echo "http://xxx.com/uhtbin/cgisirsi.exe/x/0/0/5?search_type=search&searchdata1=" . $_POST['ISBN'] . "&library=ALL&sort_by=PBYR";   
        }

        function generateLink_title() {
            echo "Your link has been generated:<br />";
            echo "http://xxx.com/uhtbin/cgisirsi.exe/x/0/0/5?search_type=search&searchdata1=" . $_POST['title'] . "+" . $_POST['aname'] . "&library=ALL&sort_by=PBYR";  
        }

        if(isset($_POST['submit'])) {

            if (isset($_POST['ISBN']) && isset($_POST['title']) && isset($_POST['aname']) && ($_POST['ISBN'] == 'ISBN') && ($_POST['aname'] == 'Author Name') && ($_POST['title'] == 'Book Title')) {

                echo "<h1>You did not input any information</h1>";
                showForm();

            } elseif (isset($_POST['ISBN']) && ($_POST['ISBN'] != 'ISBN')) {

                if (isset($_POST['ISBN']) && ($_POST['ISBN'] != 'ISBN') && (!is_numeric ($_POST['ISBN']))) {

                     echo "<h1>The ISBN you entered did not contain all numerics</h1>";
                     showForm();

                } elseif (isset($_POST['ISBN']) && ($_POST['ISBN'] != 'ISBN') && ((mb_strlen($_POST['ISBN'], 'utf-8') != 13) | (mb_strlen($_POST['ISBN'], 'utf-8') != 10))) {

                    echo "<h1>The ISBN you entered was too long or too short. ISBN's are 10 or 13 numbers in length.</h1>";
                    showForm();

                } else  {

                    generateLink_ISBN();

                }

            } elseif (isset($_POST['title']) && isset($_POST['aname']) && ($_POST['aname'] != 'Author Name') | ($_POST['title'] != 'Book Title')) {

                if (isset($_POST['title']) && isset($_POST['aname']) && ($_POST['title'] == 'Book Title') && ($_POST['aname'] != 'Author Name')) {

                    echo "<h1>To search by author's name, you must also include the book title.</h1>";
                    showForm();

                } elseif (isset($_POST['title']) && isset($_POST['aname']) && ($_POST['aname'] == 'Author Name') && ($_POST['title'] != 'Book Title')) {

                    echo "<h1>To search by book title, you must also include the author's name.</h1>";
                    showForm();

                } else {

                    generateLink_title();

                }

            } else {

                showForm(); 

            }

        } else {

            showForm(); 

        }

    ?>

</body>

1 Ответ

2 голосов
/ 24 февраля 2012

Это всегда имеет значение true:

((mb_strlen($_POST['ISBN'], 'utf-8') != 13) | (mb_strlen($_POST['ISBN'], 'utf-8') != 10))

Вы говорите: «Если ISBN не имеет длину 13 символов или ISBN не имеет длину 10 символов, то это правда». Но ни одна строка не может быть как 13 символов, так и 10 символов.

Попробуйте вместо этого:

!((mb_strlen($_POST['ISBN'], 'utf-8') == 13) | (mb_strlen($_POST['ISBN'], 'utf-8') == 10))

Что было бы "если дело не в том, что ISBN равен 13 символам или ISBN равен 10 символам, тогда true".

...