2016-05-30 3 views
0

Я хочу получить содержимое из переменных mysql для использования в php-коде, на самом деле это имя (из игры), url (игры) и alt (игры). URL-адрес изображения и поиск базы данных работают. Я ценю любую помощь в кодировании. Я не знаю, как написать указатель на имя, url и alt.mysql php получение переменных

search_site.php

<link rel="shortcut icon" href="catchamouse3.png"> 

<link rel="stylesheet" type="text/css" href="homestyles2.css"> 

<link rel="stylesheet" type="text/css" href="submit.css"> 

<link rel="stylesheet" type="text/css" href="allflashgames(3).css"> 

<link rel="stylesheet" type="text/css" href="searchbar.css"> 

<link rel="stylesheet" type="text/css" href="styles2.css"> 

<?php 
include('func.php'); 

if(isset($_POST['keywords'])){ 
    $suffix = ""; 
    $keywords = mysql_real_escape_string(htmlentities(trim($_POST['keywords']))); 
    $errors = array(); 
    if(search_results($keywords) === false){ 
     $errors[] ='<h1>We didn\'t find anything for &quot;'.$keywords.'&quot;</h1>'; 
    } 
    if(empty($errors)){ 
     $results = search_results($keywords); 
     $results_num = count($results); 
     $suffix = ($results_num!=1)?'s':''; 
     echo '<h1>',$results_num,' item',$suffix,' For &quot;',$keywords,'&quot;</h1>'; 
     foreach($results as $result){ 
      echo ' 

<span class="overimage"> 

<a href="$game_url" target="_blank"> 

<span class="hoverimage"> 
<span class="hovertext1line-home">',$result['name'],'</span><img class="onlinegameimage-home" src="', 

$result['image_url'],'" alt=',$result['alt'],'> 
</span> 

</a> 

</span> 

'; 
     } 
    } 
    else{ 
     foreach($errors as $error){ 
      echo $error,'<br>'; 
     } 
    } 
} 
?> 

func.php

<?php 
    $con = mysql_connect('localhost','root',''); 
    mysql_select_db("my_search_test",$con); 

    function search_results($keywords){ 
     $returned_results = array(); 
     $where =""; 

     $keywords = preg_split('/[\s]+/',$keywords); 
     $total_keywords = count($keywords); 

     foreach($keywords as $key=>$keyword){ 
      $where .= "`keywords` LIKE '%$keyword%'"; 
      if($key != ($total_keywords -1)){ 
       $where .=" AND "; 
      } 
     } 
     $results = "SELECT name, image_url, game_url, alt FROM search_games WHERE $where"; 
     $results_num = ($results =mysql_query($results))? mysql_num_rows($results):0; 
     if($results_num === 0){ 
      return false; 
     } 
     else{ 
      while($results_row = mysql_fetch_assoc($results)){ 
       $returned_results[] = array(
        'image_url' => $results_row['image_url'] 

      ); 
     } 
     return $returned_results; 
    } 
} 
?> 
+0

Вы запускаете 'search_results ($ keywords)' здесь дважды. Сначала проверяйте флажок '=== false' и второй в блоке' if (empty ($ errors)). Это избыточно. Сделайте вызов 'search_results ($ keywords)' один раз, сохраните результат и используйте результат там, где это необходимо. – Marcus

+2

** ПРЕДУПРЕЖДЕНИЕ **: Если вы просто изучаете PHP, не изучайте устаревший интерфейс ['mysql_query'] (http://php.net/manual/en/function.mysql-query.php). Это ужасно и было удалено в PHP 7. Замена, такая как [PDO, не трудно учиться] (http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo- for-database-access /) и руководство, подобное [PHP The Right Way] (http://www.phptherightway.com/), помогает объяснить лучшие практики. Использование 'htmlspecialchars' приведет к повреждению пользовательских данных и ** ** не будет использоваться при вставке в базу данных. Вместо этого используйте это, когда вы показываете значения в HTML. – tadman

ответ

0

Добавьте их в returned_results[] массив так же, как вы делали image_url

while ($results_row = mysql_fetch_assoc($results)) { 
    $returned_results[] = array(
     'name' => $results_row['name'], 
     'image_url' => $results_row['image_url'], 
     'game_url' => $results_row['game_url'], 
     'alt' => $results_row['alt'] 
    ); 
} 

ДОБАВЛЕНО

За мой комментарий, здесь чище, менее многословны способ, чтобы написать свою логику:

if (isset($_POST['keywords'])) { 
    // ... code 
    $results = search_results($keywords); 
    if ($results === false) { 
     echo '<h1>We didn\'t find anything for &quot;'.$keywords.'&quot;</h1>'; 
    } 
    else { 
     // we have results.. add rest of your code, ie. foreach(), etc. 
    } 
} 
-2
<?php 
$con = mysql_connect('localhost','root',''); 
mysql_select_db("my_search_test",$con); 

function search_results($keywords){ 
    $returned_results = array(); 
    $where =""; 

    $keywords = preg_split('/[\s]+/',$keywords); 
    $total_keywords = count($keywords); 

    foreach($keywords as $key=>$keyword){ 
     $where .= "`keywords` LIKE '%$keyword%'"; 
     if($key != ($total_keywords -1)){ 
      $where .=" AND "; 
     } 
    } 
    $results = "SELECT name, image_url, game_url, alt FROM search_games WHERE $where"; 
    $results_num = ($results =mysql_query($results))? mysql_num_rows($results):0; 
    if($results_num === 0){ 
     return false; 
    } 
    else{ 
     while($results_row = mysql_fetch_assoc($results)){ 
      $returned_results[] = array(
       'image_url' => $results_row['image_url'] 

      ); 
     } 
     return $returned_results; 
    } 
} 
?> 

Вы обжиг search_results ($ ключевые слова) дважды здесь. Сначала проверяйте значение === false и second в блоке if (empty ($ errors)). Это избыточно. Сделайте вызов search_results ($ keywords) один раз, сохраните результат и используйте результат там, где это необходимо.

+2

Похоже, вы скопировали исходный пост и комментарий с ответом, но забыл удалить посторонний шум. Вы делали что-то другое, кроме копирования и вставки других работ? – Teepeemm

Смежные вопросы