2015-05-21 5 views
-1

im работает с некоторыми проблемами agian, и надеюсь, что ваши ребята могут мне помочь.PHP, код SQL не работает

У меня этот код, что я не могу работать.

см, странное дело, если я изменить

$query2 = mysqli_query($dblogin, 
    "SELECT * FROM devices 
     RIGHT JOIN repair ON devices.name = repair.modelid 
     WHERE repair.modelid=$check"); 

в

$query2 = mysqli_query($dblogin, 
    "SELECT * FROM devices 
     RIGHT JOIN repair ON devices.name = repair.modelid 
     WHERE repair.modelid LIKE %iPad%"); 

я буду работать, просто отлично: -/

им действительно потеряли, и я судимый, для эхо-проверки $ check, чтобы увидеть, была ли ошибка в переменной $ check. но это работает отлично.

<div id="slidingDiv<?=$row["id"] ?>" class="toggleDiv row-fluid single-project"> 
    <div class="span6"> 
     <img src="adm/images/<?=$row["image"] ?>" alt="project <?=$row["id"] ?>" /> 
    </div> 
    <div class="span6"> 
     <div class="project-description"> 
     <div class="project-title clearfix"> 
      <h3><?=$row["name"] ?></h3> 
      <span class="show_hide close"> 
      <i class="icon-cancel"></i> 
      </span> 
     </div> 
     <div class="project-info"> 
      <?php 
       $check = $row["name"]; 
       $query2 = mysqli_query($dblogin, 
       "SELECT * FROM devices 
        RIGHT JOIN repair ON devices.name = repair.modelid 
        WHERE repair.modelid=$check"); 
       while($row = mysqli_fetch_assoc($query2)) 
          { 
          ?> 
      <div> 
       <span><?=$row["price"] ?> ,-</span><?=$row["name"] ?> 
      </div> 
      <?php 
       } 
       ?> 
      <div> 
       <span>Client</span>Some Client Name 
      </div> 
      <div> 
       <span>Date</span>July 2013 
      </div> 
      <div> 
       <span>Skills</span>HTML5, CSS3, JavaScript 
      </div> 
      <div> 
       <span>Link</span>http://examplecomp.com 
      </div> 
     </div> 
     <p>Believe in yourself! Have faith in your abilities! Without a humble but reasonable confidence in your own powers you cannot be successful or happy.</p> 
     </div> 
    </div> 
</div> 

Если я изменяет его, это, он работает просто отлично

<? 
    $query = mysqli_query($dblogin, "select * from brands ORDER BY id"); 
    while($row = mysqli_fetch_assoc($query)) 
    { 
    ?> 
<li class="filter" data-filter="<?=$row["name"] ?>"> 
    <a href="#noAction"><img class="aimg" style="height:50px;" src="adm/images/<?=$row["image"] ?>" /></a> 
</li> 
<? 
    } 
    ?> 
</ul> 
<!-- Start details for portfolio project 1 --> 
<div id="single-project"> 
<? 
    $query = mysqli_query($dblogin, "select * from devices ORDER BY name DESC"); 
    while($row = mysqli_fetch_assoc($query)) 
       { 
       ?>   
<div id="slidingDiv<?=$row["id"] ?>" class="toggleDiv row-fluid single-project"> 
    <div class="span6"> 
     <img src="adm/images/<?=$row["image"] ?>" alt="project <?=$row["id"] ?>" /> 
    </div> 
    <div class="span6"> 
     <div class="project-description"> 
     <div class="project-title clearfix"> 
      <h3><?=$row["name"] ?></h3> 
      <span class="show_hide close"> 
      <i class="icon-cancel"></i> 
      </span> 
     </div> 
     <div class="project-info"> 
      <?php 
       $check = $row["name"]; 
       $query2 = mysqli_query($dblogin, "select * from devices right join repair on devices.name = repair.modelid WHERE repair.modelid LIKE '%iPhone 6%'"); 
       while($row = mysqli_fetch_assoc($query2)) 
          { 
          ?> 
      <div> 
       <span><?=$row["price"] ?> ,-</span><?=$row["name"] ?> 
      </div> 
      <?php 
       } 
       ?> 
     </div> 
     </div> 
    </div> 
</div> 
<? 
    } 
    ?> 

EDIT

SELECT * FROM devices 
    RIGHT JOIN repair ON devices.name = repair.modelid 
    WHERE repair.modelid LIKE '%iPhone 6%' 
    LIMIT 0 , 30 

дает этот результат

id name brand image model-id id name modelid price brand date 
7 iPhone 6 Apple iphone6_small.jpg  217 Front Glas Udskiftning iPhone 6 1300  1432215986 
7 iPhone 6 Apple iphone6_small.jpg  218 Bagside (komplet) iPhone 6 2500  1432216016 
7 iPhone 6 Apple iphone6_small.jpg  219 Tænd/sluk Udskiftning iPhone 6 500  1432216041 
7 iPhone 6 Apple iphone6_small.jpg  220 Homeknap iPhone 6 500  1432216064 
7 iPhone 6 Apple iphone6_small.jpg  221 Ørehøjtaler iPhone 6 500  1432216085 
7 iPhone 6 Apple iphone6_small.jpg  222 Ladestik iPhone 6 500  1432216107 
7 iPhone 6 Apple iphone6_small.jpg  223 Batteri iPhone 6 500  1432216124 
7 iPhone 6 Apple iphone6_small.jpg  224 Vibrator iPhone 6 500  1432216136 
7 iPhone 6 Apple iphone6_small.jpg  225 Mikrofon iPhone 6 500  1432216165 
7 iPhone 6 Apple iphone6_small.jpg  226 Kamera iPhone 6 500  1432216177 
7 iPhone 6 Apple iphone6_small.jpg  227 Højtaler (musik/lyd) iPhone 6 500  1432216191 
7 iPhone 6 Apple iphone6_small.jpg  228 WIFI Antenne iPhone 6 500  1432218537 
7 iPhone 6 Apple iphone6_small.jpg  229 Jackstik iPhone 6 500  1432218564 
7 iPhone 6 Apple iphone6_small.jpg  230 Jailbreak iPhone 6 500  1432218593 
7 iPhone 6 Apple iphone6_small.jpg  231 Bagside (komplet) iPhone 6 2500  1432218612 
+0

Что происходит, когда вы запускаете необработанный запрос в базу данных? Вы получаете результат? – bksi

+0

Да, если я изменяю where = '% ipad%', он отлично работает –

+0

Можете ли вы отредактировать свой вопрос и добавить необработанный запрос, который вы запускаете в базу данных – bksi

ответ

1

Опечатки:

... WHERE repair.modelid LIKE %iPad%" 

Вы не процитировать пункт LIKE:

... WHERE repair.modelid LIKE '%iPad%'" 
           ^------^-- 

без кавычек означает %iPad% будет рассматриваться как неизвестный/недопустимое имя поля, вызывая ошибку синтаксиса SQL. Поскольку у вас абсолютно нет обработки ошибок в вашем запросе, вы просто слепо предположите, что ничего не случилось. Никогда не принимайте успех. Всегда принимайте неудачу, проверяйте неудачу и относитесь к успеху как к приятному удивлению.

Даже некоторые убер-скелетные обработки ошибок, как это помогли бы:

$result = mysql_query(...) or die(mysql_error()); 
          ^^^^^^^^^^^^^^^^^^^^^^ 
+0

Я думаю, что вы неправильно понимаете, мне нужна переменная, там есть где = $ check Не в другую сторону аркада: -/ –

+1

такая же вещь. вам нужно создать действительный sql и 'where check = $, что бы превратить это значение в любое значение в то, что должно быть именем поля. например 'где check = foo' означает, что DB будет искать имя поля foo, тогда как' where check = 'foo'' сделает db сравнить поле foo с строкой 'foo'. –

0

Простите, если мой PHP немного ржавый, но не это должно быть:

$query2 = mysqli_query($dblogin, "select * from devices right join repair on devices.name = repair.modelid WHERE repair.modelid='" . $check . "'"); 

Таким образом, в примере проверки $ «bucket» это запустило бы SQL:

select * from devices right join repair on devices.name = repair.modelid WHERE repaid.modelid='bucket' 
+0

Я только что запустил его, но выход кажется пустым, и он будет запутан. вот изображение http://billedeupload.dk/images/r2Gkc.png текст whit является эхом проверки $, и если бы я ввел текстовое выражение в переменную, он будет работать, но мне это нужно быть динамичным:/ –

+0

Вы пишете инструкцию SQL вне PHP и запускаете ее непосредственно против базы данных и возвращаете результаты? Если да, разместите его здесь. В конце концов, вы просто хотите создать ту же самую строку SQL в PHP перед ее отправкой. Примечание. По чужим комментариям, ваш код открыт для SQL Injection. –

0

Если $ check будет содержать только имя продукта, например, "IPad", измените запрос, как это:

$query2 = mysqli_query($dblogin, "select * from devices right join repair on devices.name = repair.modelid WHERE repair.modelid='$check'"); 

UPDATE:

Или LIKE:

$query2 = mysqli_query($dblogin, "select * from devices right join repair on devices.name = repair.modelid WHERE repair.modelid LIKE '%$check%'"); 

Имейте в виду, что если $ проверка исходит от пользователь, этот статус уязвим для SQL-инъекции.

+0

Вы правы, я запутался, потому что не заметил, что два вопроса из его вопроса не совпадают, и я вспомнил заявление «LIKE». –

+0

Я попробовал это, но теперь я ничего не получил из БД по запросу2: -/ –

+0

Вы уверены, что есть что-то в базе данных, которое соответствует этому? –

0

Попробуйте это. Скобки вокруг с одинарными кавычками. Хотя вы называете это id, оно равно имени, поэтому я принимаю не числа.

$query2 = mysqli_query($dblogin, 
    "SELECT * FROM devices 
     RIGHT JOIN repair ON devices.name = repair.modelid 
     WHERE repair.modelid='{$check}'");