mysql query gaat fout

Pagina: 1
Acties:
  • 400 views

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
heya,

Ik heb een script gemaakt dat links in een database plaats. deze werkt perfect maar in het script dat de links weer op de webpagina moet krijgen gaat iets fout. Ik krijg de volgende error:

Error1064 : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's' AND dir ='1' ORDER BY naam' at line 1.

Ik heb al zitten kijken in de query maar ik kan niet zien wat ik fout doe 8)7
In de onderstaande code zit het probleem, ziet 1 van jullie misschien zo snel het probleem?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
$category=$groep["cat"];
// voor elk blok de links selecteren & html code schrijven
                $sql="SELECT * FROM joriso_sknil WHERE cat = '$category' AND dir ='$dir_id' ORDER BY naam ";
                if (!($result =  mysql_query($sql,$connection)))
                showerror();

                $count++;
                $counttotal++;                              

                //categorie kop
                $linkcode.="<div class=\"list1\"><h4>".$category."</h4></div><div class=\"list2\">";
                
                while ($row = mysql_fetch_array($result) )
                {
                $count++;
                $counttotal++;                              
                //link
                $linkcode.="<a target=\"_blank\" href=\"".$row["link"]."\">".$row["naam"]."</a><br>";


                if ($count >= $splitvalue)
                    {$makebreak=1;}

                }
                
                if ($makebreak==1)
                { 
                // einde?
                    if ($counttotal == $totalrows)
                        {$linkcode.= "</div><br>";}
                //nog een kolom     
                    else { 
                    $linkcode.= "</div></div><div class=\"linkcontainer\">";
                    $makebreak=0;
                    $count=0;
                    $breaksmade++;}
                }
                
                else
                {
                //einde categorie
                $linkcode.= "</div><br>";
                }

[ Voor 0% gewijzigd door moto-moi op 13-10-2010 12:12 . Reden: ff onze mooie php parser aangezet voor je stuk code ;) ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Druk je query eens volledig af en kijk eens waarom mysql vindt dat je velden ergens anders ophouden dan de bedoeling is. Ga daarna even googlen op SQL injections.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • ThinkPad
  • Registratie: Juni 2005
  • Laatst online: 19:41
Voer de query eens uit in PHPmyAdmin, dan is het waarschijnlijk iets duidelijker waarom het niet werkt.

Moet je voor 2 variabelen wel zelf even wat invullen.

en zoals hierboven wordt gezegd is je query echo'en ook wel handig

[ Voor 31% gewijzigd door ThinkPad op 13-10-2010 12:17 ]


Acties:
  • 0 Henk 'm!

  • Crayne
  • Registratie: Januari 2002
  • Laatst online: 17-03 13:41

Crayne

Have face, will travel

Is $dir_id wel een string?

Mijn Library Thing catalogus


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@crayne: Als het goed is wel. Dit is de complete code. als het ongewenst is verwijder ik hem wel weer?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
<?php

// met deze 2 variabelen kun je het aantal kolommen en de kolombreedte wijzigen:

$aantalkolommen=3;
$kolombreedte="180px";

//db connectie
require('admin/connectie.php');

// gekozen link-directory uit url halen 
if ($_GET['dir'])
{$dirnaam=$_GET['dir'];}

// alle link-directories selecteren en het menu bouwen
$q="SELECT d.did, d.naam, d.titel, s.uid FROM joriso_linkdirs d LEFT JOIN joriso_sknil s ON d.did = s.dir GROUP BY d.naam";

if (!($tmp =  mysql_query($q,$connection)))
showerror();

while ($xmenu = mysql_fetch_array($tmp))
{
//default directory - indien geen linkdirectory is aangegeven in de url -  de eerste met links kiezen
if (empty($dirnaam))
    {
    if ($xmenu['uid'] != NULL)
        {
        $dir_id=$xmenu['did'];
        $dirnaam=$xmenu['naam'];
        $kop = $xmenu['titel'];
        }
    }

// Linkdirectory menu-opbouw
if ($xmenu['naam'] == "$dirnaam")
    { 
    $dir_id = $xmenu['did'];
    $kop = $xmenu['titel'];
$xmenuitems.="<span class=\"menuactief\"><b>".$xmenu['naam']."</b></span>";
    }
else{
$xmenuitems.="<span class=\"menunonactief\"><a href=\"links.php?dir=".$xmenu['naam']."\"><b>".$xmenu['naam']."</b></a></span>";
    }
}
$xmenuitems ="<div align=\"right\" >".$xmenuitems."</div>";

//start de opbouw van de linkpagina

$linkcode="<h1>".$kop."</h1><div class=\"linktank\"><div class=\"linkcontainer\">";

//  link aantallen en afbreekwaarden bepalen
$breaksmade=0;
$makebreak=0;
$count=0;
$counttotal=0;

$sqllll="SELECT COUNT(uid) as total FROM joriso_sknil WHERE dir ='$dir_id'";
if (!($temp_2 =  mysql_query($sqllll,$connection)))
showerror();
$aantallen = mysql_fetch_array($temp_2);

if ($aantallen['total'] == 0)
{echo "<strong>Directory is leeg</strong>.";
exit;
}


// categorien in de geselecteerde linkdir vinden
$sqll="SELECT DISTINCT cat FROM joriso_sknil WHERE dir ='$dir_id' GROUP BY cat ";
    if (!($temp =  mysql_query($sqll,$connection)))
        showerror();


$aantalcats=mysql_num_rows($temp);

//kolommen

$totalrows= $aantallen['total'] + $aantalcats;

$splitvalue= ceil($totalrows/$aantalkolommen);


// voor elke categorie een apart blok bouwen
    while ($groep = mysql_fetch_array($temp))
            {
            
                $category=$groep["cat"];
// voor elk blok de links selecteren & html code schrijven
                 $sql="SELECT * FROM joriso_sknil WHERE cat = '$category' AND dir ='$dir_id' ORDER BY naam ";
                if (!($result =  mysql_query($sql,$connection)))
                showerror();

                $count++;
                $counttotal++;                              

                //categorie kop
                $linkcode.="<div class=\"list1\"><h4>".$category."</h4></div><div class=\"list2\">";
                
                while ($row = mysql_fetch_array($result) )
                {
                $count++;
                $counttotal++;                              
                //link
                $linkcode.="<a target=\"_blank\" href=\"".$row["link"]."\">".$row["naam"]."</a><br>";


                if ($count >= $splitvalue)
                    {$makebreak=1;}

                }
                
                if ($makebreak==1)
                { 
                // einde?
                    if ($counttotal == $totalrows)
                        {$linkcode.= "</div><br>";}
                //nog een kolom     
                    else { 
                    $linkcode.= "</div></div><div class=\"linkcontainer\">";
                    $makebreak=0;
                    $count=0;
                    $breaksmade++;}
                }
                
                else
                {
                //einde categorie
                $linkcode.= "</div><br>";
                }


    }
    
    //niet genoeg kolommen maar wel genoeg  categorien correctie:
    if ($breaksmade < $aantalkolommen && $aantalcats >=$aantalkolommen)
    {   function str_replace_count($search,$replace,$subject,$times) {
        
           $subject_original=$subject;
          
           $len=strlen($search);   
           $pos=0;
           for ($i=1;$i<=$times;$i++) {
               $pos=strpos($subject,$search,$pos);
              
               if($pos!==false) {               
                   $subject=substr($subject_original,0,$pos);
                   $subject.=$replace;
                   $subject.=substr($subject_original,$pos+$len);
                   $subject_original=$subject;
               } else {
                   break;
               }
           }
          
           return($subject);
        
        }
    
    $extrabreaks =$aantalkolommen-$breaksmade;

    $linkcode = str_replace_count("</div><br>",  "</div></div><div class=\"linkcontainer\">",  $linkcode, ($extrabreaks-1));

}
// hieronder volgt de html en css code  voor de link-pagina. Aanpassen naar eigen voorkeur. 

?>

Acties:
  • 0 Henk 'm!

  • Brummetje
  • Registratie: December 2003
  • Niet online

Brummetje

Ginkeltjes

Kunt prima een int in een string doen hoor ;)

Zoals hierboven is gezegd kun je hem beter eerst even testen in PHPMyAdmin op te kijken of het daar wel werkt.

Acties:
  • 0 Henk 'm!

  • ajakkes
  • Registratie: Maart 2004
  • Laatst online: 16-05 22:32

ajakkes

👑

In plaats van:
if (!($result = mysql_query($sql,$connection)))
showerror();

print "Dit moet in phpmyadmin: -> ".$sql." <- Dit niet meer";

En dan het resultaat op je pagina tussen >< bekijken en in phpmyadmin testen.

[ Voor 9% gewijzigd door ajakkes op 13-10-2010 12:39 ]

👑


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Verwijderd schreef op woensdag 13 oktober 2010 @ 12:11:
Error1064 : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's' AND dir ='1' ORDER BY naam' at line 1.
PHP:
1
"WHERE cat = '$category' AND dir ='$dir_id' ORDER BY naam "
Heb je soms een categorie auto's? Of programma's?

Ga nou eens escapen, da's PHP- en SQL-tutorial 101.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

CodeCaster schreef op vrijdag 15 oktober 2010 @ 10:31:
[...]

Heb je soms een categorie auto's? Of programma's?

Ga nou eens escapen, da's PHP- en SQL-tutorial 101.
Inderdaad, hier is meer dan genoeg over te vinden op Google en GoT. Kom je daar met je eigen zoekwoorden niet uit, dan kun je deze proberen: sql injection.

Overigens werd je gevraagd om je query af te drukken, niet om dan maar je hele code te posten. Dat laatste is eigenlijk nooit echt nuttig of gewenst hier.

Aangezien dit probleem al vaak genoeg voorbij is gekomen en je er dus met de search ook wel uit komt gaat dit topic dicht.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1

Dit topic is gesloten.