Vinnaren i pepparkakshustävlingen!
2014-05-15, 17:52
  #1
Medlem
Hej!

När man inte hittar något resultat i databasen för angiven söksträng så vill jag returnera variabel error_msg med värdet 'No rows returned.'. Jag har försökt på en mängd olika sätt som ni ser nedan. Både name och location fungerar utmärkt att returnera om jag får en träff i databasen. Vad gör jag för fel? Jag har en känsla av att jag inte skapar ett äkta json objekt.

Kod:
$output = [];
    
$name $_POST['name'];

    
$results $connect->prepare('SELECT name, location FROM names WHERE name = :name');
    
$results->bindParam(':name'$namePDO::PARAM_INT);
    
$results->execute();

    while(
$row $results->fetch(PDO::FETCH_OBJ)) {
            
            
$output[] = $row;
    }

        
// Om inga rader hittas så vill jag returnera en json med objekt error_msg och värde No rows returned
    
if ( $results->rowCount() ) {
        
//echo json_encode($output);
    
} else {

        
//$output['error_msg'] = 'No rows returned.';
        //echo json_encode(array('error_msg' => 'No rows returned.'));
        //$output = array('error_msg' => 'No rows returned.');
        //echo json_encode(array('error_msg' => 'No rows returned'), JSON_FORCE_OBJECT);
    
}

    echo 
json_encode($output); 
Citera
2014-05-15, 21:39
  #2
Medlem
Hej igen. Jag tänkte att jag borde förtydliga min vad det är jag vill få ut.

Ett exempel är att jag får ut följande Objekt när den hittar data: http://cl.ly/image/0n2T1r202Q2w

Medan jag med exempelvis följande kod får
Kod:
echo json_encode(array('error_msg' => 'No rows returned'), JSON_FORCE_OBJECT); 

detta som svar: http://cl.ly/image/0y2i1q0o153v

Jag förstår inte riktigt vad jag gör för fel och skulle uppskatta all hjälp som jag kan få
Citera
2014-05-16, 09:12
  #3
Medlem
Citat:
Ursprungligen postat av mojitoboy
Medan jag med exempelvis följande kod får
Kod:
echo json_encode(array('error_msg' => 'No rows returned'), JSON_FORCE_OBJECT); 

detta som svar: http://cl.ly/image/0y2i1q0o153v

Jag förstår inte riktigt vad jag gör för fel och skulle uppskatta all hjälp som jag kan få
Hur menar du att det där svaret är fel? Hur vill du att svaret ska se ut? Spontant ser ju det där rätt
Citera
2014-05-16, 09:26
  #4
Medlem
Citat:
Ursprungligen postat av AVGASBARN
Hur menar du att det där svaret är fel? Hur vill du att svaret ska se ut? Spontant ser ju det där rätt

Aha, jag tänkte att det skulle se ut som i bilden ovan, där man kunde klicka på objektet och öppna det. Speciellt eftersom att även den json innehåller ett resultat. Anledningen till att jag trodde att det var fel beror på jag skickar in resultat (json) till handlebars.js http://handlebarsjs.com i koden ned

Kod:
var template2 Handlebars.compile( $('#template2').html() );
                $(
'ul#location-temp').append(template2(result)); 

där result är svaret som jag får tillbaka från php koden som jag skrev i mitt första inlägg.

På själva sidan skriver jag sedan ut resultatet med följande kod:
Kod:
<script id="template2" type="text/x-handlebars-template">
        {{
#each this}}
            
<li>{{location}} med namn {{name}} eller fel {{error_msg}}</li>
        {{/
each}}
        
</script> 

Eftersom att jag kan skriva ut både {{location}} och {{name}} utan problem så antar jag att jag skapar mitt felmeddelande på fel sätt. Det var även därför som jag bifogade skillnaden i svar.
Citera
2014-05-16, 21:22
  #5
Medlem
Det är nog snarare din handlebar-template som är lite fel. error_msg ligger inte i en array (därför du inte kan expandera objektet), och kommer därför inte finnas i din each-context. Du vill nog mer ha i stil med:

Kod:
<script id="template2" type="text/x-handlebars-template"
{{
#if error_msg}}
      
<li>Fel: {{error_msg}}</li>
{{else}}
        {{
#each this}} 
            
<li>{{location}} med namn {{name}} eller fel {{error_msg}}</li
        {{/
each}} 
{{/if}}
</script> 

Nu har jag aldrig använt handlebars, så jag reserverar mig för eventuella tokigheter.
Citera
2014-05-17, 09:57
  #6
Medlem
Citat:
Ursprungligen postat av AVGASBARN
Det är nog snarare din handlebar-template som är lite fel. error_msg ligger inte i en array (därför du inte kan expandera objektet), och kommer därför inte finnas i din each-context. Du vill nog mer ha i stil med:

Kod:
<script id="template2" type="text/x-handlebars-template"
{{
#if error_msg}}
      
<li>Fel: {{error_msg}}</li>
{{else}}
        {{
#each this}} 
            
<li>{{location}} med namn {{name}} eller fel {{error_msg}}</li
        {{/
each}} 
{{/if}}
</script> 

Nu har jag aldrig använt handlebars, så jag reserverar mig för eventuella tokigheter.

Tusen tack, det löste mina problem!
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback