0

我正在为个人开发人员开发一个应用程序,但遇到了一些麻烦。对 php 和 javascript 来说相当新,因此非常感谢您的帮助。

这是一个带有输入提交按钮的简单表单。一旦用户输入 ISBN 号并点击搜索,下面应该会出现一个 div,显示包含标题、作者和描述的 Google 图书结果。

我解决这个问题的方法是使用var $isbn我的javascript中的内容。这可能是完全错误的方法,这就是我在这里的原因。基本上我想使用输入的 ISBN 号并将其“附加”到 Google 图书搜索的末尾(见下文);

var url='https://www.googleapis.com/books/v1/volumes?q='[USER ISBN INPUT HERE];

如果我手动将 var $isbn 设置为 '0276427343' - 我确实收到了图书结果并成功查看了 div 内容。只是不是当它们通过表单发布到 var $isbn 时。

我将按原样显示我的代码;

HTML 表单

<form name="form" method="post" action="">               
<input name="isbn_search" id="isbn_search" type="text">                
<button id="submit" name="submit">search</button>      
</form>

PHP

if(isset($_POST['isbn_search'])){ 
$isbn = $_POST['isbn_search'];
}

JaveScript

$(document).ready(function() {
var isbn = <?php echo $isbn; ?>;
var url='https://www.googleapis.com/books/v1/volumes?q='+isbn;
$('#submit').click(function() {
    $.getJSON(url,function(data){
        $('.result').empty();
        $.each(data.items, function(entryIndex, entry){
            var html = '<div class="results well">';                    
            //html += '<h3>' + entry.id + '</h3>';
            html += '<h3>' + entry.volumeInfo.title + '</h3>';                  
            html += '<div class="author">' + entry.volumeInfo.authors + '</div>'; 
            html += '<div class="description">' + entry.volumeInfo.description + '</div>';  
            $('.result').append(html);
        });                        
    });
    return false;
    });
});

欢迎任何帮助和/或建议。

4

5 回答 5

2

您的问题是因为表单从不提交(您使用 javascript 将其停止)。

然而 php 是不必要的,你可以用 js 提取值:

$(document).ready(function() {

    $('#submit').click(function(ev) {
        ev.preventDefault();
        var isbn = $('#isbn_search').val(); //get isbn direct from input, no need for php
        var url='https://www.googleapis.com/books/v1/volumes?q='+isbn;
        $.getJSON(url,function(data){
            $('.result').empty();
            $.each(data.items, function(entryIndex, entry){
                var html = '<div class="results well">';                    
                //html += '<h3>' + entry.id + '</h3>';
                html += '<h3>' + entry.volumeInfo.title + '</h3>';                  
                html += '<div class="author">' + entry.volumeInfo.authors + '</div>'; 
                html += '<div class="description">' + entry.volumeInfo.description + '</div>';  
                $('.result').append(html);
            });                        
        });
    });
});
于 2014-11-11T12:14:25.107 回答
1

在像这样实现它们之前,您应该尝试了解 javascript 和 php 的基本概念。

看起来您想要实现的是将客户端提供的 ISBN 发送到服务器。

客户端运行 Javascript(由浏览器解释) - 服务器运行 php(在请求时由服务器解释)

一个基本的经典概念:将您的 HTML CSS JAVASCRIPT (HTML5) 拆分到您的客户端,让它完成所有客户端的工作,让您的 PHP 完成所有的服务器工作。

您现在可以通过不同的方式将信息发送到您的 PHP 服务器脚本 - 通过 ajax 或使用已定义的操作属性提交表单

我希望这会有所帮助——你首先不需要代码方面的帮助——花一些(2-3)小时来理解这些概念——然后回来尝试让你的代码正确:)

我希望这有帮助

于 2014-11-11T12:16:56.183 回答
1

我认为在这种情况下你不需要使用 PHP。

但只需试试这个:

<div>               
   <input id="isbn_search" type="text">                
   <button onclick="do_search();" id="submit" name="submit">search</button>      
</div>
<div class="result"></div>


<script>
function dosearch(){

var isbn = document.getElementById('isbn_search').value; //$('#isbn_search').val(); : if you like jquery :D
var url='https://www.googleapis.com/books/v1/volumes?q='+isbn;

$.getJSON(url,function(data){
        $('.result').empty();
        $.each(data.items, function(entryIndex, entry){
            var html = '<div class="results well">';                    
            //html += '<h3>' + entry.id + '</h3>';
            html += '<h3>' + entry.volumeInfo.title + '</h3>';                  
            html += '<div class="author">' + entry.volumeInfo.authors + '</div>'; 
            html += '<div class="description">' + entry.volumeInfo.description + '</div>';  
            $('.result').append(html);
        });  

        //here we send this query to database (thanks to AJAX):
        //=====================================================
        $.ajax({
             type: 'POST',
             url: './db_insert.php',
             data: {'isbn' : isbn },
        });                      
    });

}
</script>

如果要将搜索保存在数据库中,

我们创建一个 php 文件:db_insert.php

<?php

// first : init access to data base :
//====================================
$user="root";   //user of database
$pass="";       //password of database
$db="test";     //name of database
$host = "localhost";   //host name

$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host='.$host.';dbname='.$db, $user, $pass, $pdo_options);
$bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$bdd->query("SET NAMES 'utf8'");



//second : insert in a table named "all_search" in this case :
===============================================================
    $req = $bdd->prepare('INSERT INTO all_search(isbn, date_in) VALUES(:isbn, :date_in)');
    $req->execute(array(
        'isbn'      => $_POST['isbn'],
        'date_in'   => date('Y-m-d H:i:s')
    ));


//emm... I think thats all, Enjoy :D

?>
于 2014-11-11T12:20:15.467 回答
0

这是因为您试图将用户输入的 ISBN 输入 $_POST。您的 JS 基于按钮单击的位置。所以无法通过这种方式获取 isbn 字段值。

将您的JS更改为以下。

var isbn = $('#isbn_search').val();

不需要 PHP 代码。

if($_POST....
于 2014-11-11T12:14:42.717 回答
-1

我不确定我的理解是否正确,但您可以从 PHP 中返回 ISBN 编号json,然后在您的 JavaScript 中使用它。

<?php
$isbn = $_POST['isbn'];
json_encode($isbn);

?>
于 2014-11-11T12:16:55.513 回答