Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL][Google Maps API] Błąd mysql przy aktualizwaniu
Forum PHP.pl > Forum > Przedszkole
koptus
Pisze skrypt na podstawie tutoriala gdzie mamy mapę, sa wczytywane 3 markery z bazy, użytkownik ustawia je jak chce, a potem zapisuje. Niestety 1 marker bez problemu się zapisuje, gdy zmienię miejsce kilku pojawia się taki błąd.
Kod
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 'UPDATE mapa SET nazwa = 'Koniec trasy', lat = 51.110420, lng = 17.050781 WHERE i' at line 1


Na moje oko to coś jest nie tak w zapisz.php, powinno być tam chyba inaczej to poukladane, tak więc proszę o pomoc smile.gif


Poniżej kod 3 plików: (nie potrzebny syf jak divy logo itd usunięty)
mapa.php
  1. <?php
  2. Przesuń znaczniki, aby zaznaczyć najważniejsze punkty twojej trasy.<br><br>
  3. <style type="text/css" media="all">@import "/style/Przyklad.css"; @import "/style/Przyklad.css";</style>
  4.        <!--skrypty-->
  5.        <script src='http://maps.google.com/maps?file=api&v=2.x&key=ABQIAAAAIsZYZaR4DWCdfqmlS6OCQBRYgIOWu4nSQX1k4hvOTkMM53XgTxRxqqc13C-7DIyPETB6KFwKNloRag' type='text/javascript'></script>
  6.        <style type="text/css">
  7.        #marker_edycja
  8.        {
  9.            margin: 0;
  10.            padding: 5px;
  11.            font-family: Tahoma;
  12.            font-size: 11px;
  13.        }
  14.        
  15.        #opis
  16.        {
  17.            width: 270px;
  18.            color: #656565;
  19.        }
  20.        
  21.        .wspolrzedna
  22.        {
  23.            width: 200px;
  24.            color: #656565;
  25.        }
  26.        </style>
  27.    </head>
  28.    
  29.    <body onload='mapaStart()' onunload='GUnload()'>
  30.    <table style="border: 0 collapse;">
  31.        <tr>
  32.            <td style="width: 490px;">
  33.                <div id='mapka' style='width: 480px; height: 480px; border: 1px solid black; background: gray;'></div>
  34.                <script type='text/javascript'>
  35.                <!--
  36.                    var mapa;
  37.                    var aktywny = null;
  38.                    var markery = [];
  39.                    
  40.                    // funkcja do auktualniania aktywnego markera
  41.                    function uaktualnijMarker()
  42.                    {
  43.                        if(!aktywny) // jeżeli żaden marker nie jest aktywny, to nie robimy nic
  44.                            return;
  45.                            
  46.                        // nowe parametry, pobrane z formularza:
  47.                        var nowaLat = parseFloat(document.getElementById('lat').value);
  48.                        var nowaLng = parseFloat(document.getElementById('lng').value);
  49.                        var nowyPunkt = new GLatLng(nowaLat,nowaLng);    
  50.                        var nowyOpis = document.getElementById('opis').value;
  51.                        
  52.                        // sprawdzamy, co się zmieniło
  53.                        if(!aktywny.getPoint().equals(nowyPunkt))
  54.                            aktywny.setPoint(nowyPunkt);
  55.                        if(aktywny.txt!=nowyOpis)
  56.                            aktywny.txt = nowyOpis;
  57.  
  58.                        // jeżeli było otwarte okno infoWindow, to otwieramy je ponownie, by uwzględnić wprowadzone zmiany
  59.                        if(!mapa.getInfoWindow().isHidden())
  60.                            aktywny.openInfoWindowHtml(aktywny.txt);
  61.                        
  62.                        aktywny.zmiana = true; // marker był zmieniany, zapamiętujemy ten fakt, by wykonać odpowiednie zapytanie uaktualniające bazę
  63.                    }
  64.                    
  65.                    // funkcja do wyboru aktywnego markera
  66.                    function ustawAktywnyMarker(marker)
  67.                    {
  68.                        if(marker) // jeżeli wybrano marker
  69.                        {
  70.                            aktywny = marker; // zapamiętujemy odwołanie
  71.                            
  72.                            // uaktualniamy pola w formularzu danymi markera
  73.                            document.getElementById('marker_edycja').style.display = 'block';
  74.                            document.getElementById('lat').value = marker.getPoint().lat();
  75.                            document.getElementById('lng').value = marker.getPoint().lng();
  76.                            document.getElementById('opis').value = marker.txt;
  77.                        }
  78.                        else
  79.                        {
  80.                            aktywny = null;
  81.                            document.getElementById('marker_edycja').style.display = 'none';
  82.                        }
  83.                    }
  84.                    
  85.                    function mapaStart()
  86.                    {
  87.                        if(GBrowserIsCompatible())
  88.                        {
  89.                            mapa = new GMap2(document.getElementById('mapka'),{mapTypes: [G_NORMAL_MAP]});
  90.                            mapa.addControl(new GLargeMapControl());
  91.                            mapa.addControl(new GOverviewMapControl());
  92.                            mapa.addControl(new GScaleControl());
  93.  
  94.                            mapa.setCenter(new GLatLng(52.281601868071434,18.91845703125),6);
  95.                            wczytajMarkery();
  96.                        }
  97.                    }
  98.                    
  99.                    function dodajMarker(lat,lon,ikona_url,nazwa,id)
  100.                    {
  101.                    
  102.                        var ikona = new GIcon();
  103.                        ikona.image = ikona_url;
  104.                        ikona.iconSize = new GSize(20, 34);
  105.                        ikona.iconAnchor = new GPoint(9, 33);
  106.                        ikona.shadow = "";
  107.                        ikona.infoWindowAnchor = new GPoint(15,12);
  108.                        
  109.                        var marker    =    new GMarker(new GLatLng(lat,lon),{icon: ikona,draggable:true});
  110.                        marker.txt    =    nazwa;
  111.                        marker.id    =    id;
  112.                        marker.zmiana = false;
  113.                        
  114.                        mapa.addOverlay(marker);
  115.                        GEvent.addListener(marker,"click",function()
  116.                        {
  117.                            marker.openInfoWindowHtml(marker.txt);
  118.                            ustawAktywnyMarker(marker);
  119.                        });
  120.                        
  121.                        GEvent.addListener(marker,'dragstart',function()
  122.                        {
  123.                            ustawAktywnyMarker(marker);
  124.                            marker.closeInfoWindow();
  125.                        });
  126.                        
  127.                        GEvent.addListener(marker,'drag',function()
  128.                        {
  129.                            document.getElementById('lat').value = marker.getPoint().lat();
  130.                            document.getElementById('lng').value = marker.getPoint().lng();
  131.                            
  132.                            marker.zmiana = true; // marker był zmieniany, zapamiętujemy ten fakt, by wykonać odpowiednie zapytanie uaktualniające bazę
  133.                        });
  134.                        
  135.                        markery.push(marker);
  136.                        
  137.                        return marker;
  138.                    }
  139.                    
  140.                    function wczytajMarkery()
  141.                    {
  142.                        GDownloadUrl('wczytaj.php', function(dane,kodOdpowiedzi)
  143.                        {
  144.                            if(kodOdpowiedzi==200)
  145.                            {
  146.                                var xml = GXml.parse(dane);
  147.                                var markery = xml.documentElement.getElementsByTagName("marker");
  148.                                for(var i=0; i<markery.length; i++)
  149.                                {
  150.                                    var id            =    parseInt(markery[i].getAttribute("id"));
  151.                                    var lat            =    parseFloat(markery[i].getAttribute("lat"));
  152.                                    var lon            =    parseFloat(markery[i].getAttribute("lon"));
  153.                                    var ikona_url    =    markery[i].getAttribute("ikona");
  154.                                    var nazwa        =    markery[i].getAttribute("nazwa");
  155.                                    var marker        =    dodajMarker(lat,lon,ikona_url,nazwa,id);
  156.                                }
  157.                            }
  158.                            else
  159.                            {
  160.                                alert('Nie mogłem otworzyć pliku dane.php');
  161.                            }
  162.                        });
  163.                    }
  164.                    
  165.                    function zapiszMarkery()
  166.                    {
  167.                        var t = '';
  168.                        for(var i=0; i<markery.length; i++)
  169.                        {
  170.                            if(markery[i].zmiana == true)
  171.                            {
  172.                                if(t.length!=0)
  173.                                    t+='@@'; // znak oddzielenia markerów
  174.                                    
  175.                                // zakładamy, że parametry markera oddzielone są separatorem |
  176.                                t+=markery[i].id+'|'+markery[i].txt.replace("|",' ')+'|'+markery[i].getPoint().lat()+'|'+markery[i].getPoint().lng();
  177.                            }
  178.                        }
  179.                        GDownloadUrl('zapisz.php?dane='+t,function(dane,kodOdpowiedzi)
  180.                        {
  181.                            GLog.writeHtml(dane);
  182.                        },true);
  183.                    }
  184.  
  185.                -->
  186.                </script>
  187.            </td>
  188.            <td style="width: 300px; border: 1px solid black; overflow: auto;">
  189.                <form id="marker_edycja" style="display: none;" onsubmit="alert('zapisano!'); return false;">
  190.                    <p><input onkeyup="uaktualnijMarker()" id="lat" type="text" class="wspolrzedna" value="" /><br />długość geograficzna</p>
  191.                    <p><input onkeyup="uaktualnijMarker()" id="lng" type="text" class="wspolrzedna" value="" /><br />szerokość geograficzna</p>
  192.                    <p><textarea onkeyup="uaktualnijMarker()" id="opis" rows="9"></textarea><br />opis markera</p>
  193.                </form>
  194.            </td>
  195.        </tr>
  196.    </table>
  197.    <a href="#" onclick="zapiszMarkery(); return false;">uaktualnij markery w bazie</a>
  198. ?>

wczytaj.php
  1. <?
  2. header('Content-Type: text/xml; charset=utf-8');
  3. echo '<?xml version="1.0" encoding="UTF-8"?>';
  4.  
  5. include "conn.php";
  6.  
  7.  
  8.    
  9. $zapytanie = "SELECT id,nazwa,lat,lng,flaga FROM mapa ORDER BY id";
  10. $pobierz = mysql_query($zapytanie);
  11.  
  12. print "\n<dane>\n";
  13. $i=0;
  14. while($dane = mysql_fetch_array($pobierz))
  15. {
  16.    $i++;
  17.    printf("\t<marker id=\"%d\" lat=\"%f\" lon=\"%f\" ikona=\"%s\" nazwa=\"%s\" />\n",$dane['id'],$dane['lat'],$dane['lng'],$dane['flaga'],$dane['nazwa']);
  18. }
  19. print "</dane>";
  20. ?>

zapisz.php
  1. <?
  2. header('Content-Type: text/html; charset=utf-8');
  3.  
  4. include "conn.php";
  5.  
  6.  
  7. $dane = $_GET['dane'];
  8. if(!$dane)
  9.    exit;
  10. $markery = split('@@',$dane);
  11.  
  12. $zapytanie = "UPDATE mapa SET nazwa = '%s', lat = %f, lng = %f WHERE id = %d; ";
  13. $query = '';
  14.  
  15. for($i=0; $i<count($markery); $i++)
  16. {
  17.    $dane_markera = split("|",$markery[$i]);
  18.    $id = (int) $dane_markera[0];
  19.    $opis = addslashes(strip_tags($dane_markera[1]));
  20.    $lat = (float) $dane_markera[2];
  21.    $lng = (float) $dane_markera[3];
  22.    $query.= sprintf($zapytanie,$opis,$lat,$lng,$id);
  23. }
  24.  
  25. $result = mysql_query($query)
  26.        or die(mysql_error());
  27.  
  28. ?>
erix
  1. <?php
  2. $query.= sprintf($zapytanie,$opis,$lat,$lng,$id);
  3. ?>

Z tego, co pamiętam, to przy mysql_query" title="Zobacz w manualu PHP" target="_manual można wykonywać tylko jedno zapytanie w wywołaniu:
Cytat
mysql_query() sends a unique query (multiple queries are not supported) to the currently active database on the server that's associated with the specified link_identifier .


Wywołuj zapytanie w pętli, zamiast
  1. <?php
  2. $query.= sprintf($zapytanie,$opis,$lat,$lng,$id);
  3. ?>
koptus
Wrzuciłem to do pętli:
  1. <?php
  2. for($i=0; $i<count($markery); $i++)
  3. {
  4.    $dane_markera = split("|",$markery[$i]);
  5.    $id = (int) $dane_markera[0];
  6.    $opis = addslashes(strip_tags($dane_markera[1]));
  7.    $lat = (float) $dane_markera[2];
  8.    $lng = (float) $dane_markera[3];
  9.    $query.= sprintf($zapytanie,$opis,$lat,$lng,$id);
  10.    $result = mysql_query($query)
  11.        or die(mysql_error());
  12. }
  13. ?>

ale tez nie działa, mam ten sam błąd.
erix
Bo Ci coś kaszani:
  1. <?php
  2. $query.= sprintf($zapytanie,$opis,$lat,$lng,$id);
  3. ?>


Kropka nie jest już potrzebna. winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.