Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][JavaScript][PHP]wywoływanie skryptu php przy użyciu javascript
Forum PHP.pl > Forum > Przedszkole
owca
Witam
Robiąc cms'a napotkałam następną trudność którą nie mam pojęcia jak rozwiązać by nie wchodzić w zaawansowane sztuczki ponieważ jestem początkująca. A mianowicie:
Na stronie mam przeglądanie newsów, obok każdego button "usuń" po naciśnięciu którego chciałabym żeby pojawiało się okienko:
Kod
<script type="text/javascript">
function show_confirm()
{
var r=confirm("Czy na pewno chcesz usunąć newsa?");
if (r==true)
{
jeżeli nacisnął "tak" to uruchamia się skrypt php który usuwa newsa
}
else
{
nic się nie dzieje, użytkownik dalej ogląda newsy nie usunięto nic
}
}
</script>


Mam napisany skrypt w php który usuwa newsa ale jak mam go poprawnie włączyć do skryptu java?
Mefiuu
skrypt nie java a javascript smile.gif


może na ten sposób :

[JAVASCRIPT] pobierz, plaintext
  1. if (r==true)
  2. {
  3. window.location.href = "usun.php?id=2123";
  4. }
[JAVASCRIPT] pobierz, plaintext


nie testowałem, ale ja podobnie rozwiązałem usuwanie ściąg na stronie mojej klasy wink.gif
owca
tylko że zmienna id nie jest przekazywana do java i nie wiem jak to rozwiązać:
Kod
window.location.href="usun_newsa.php?id=$id";
thextraman
Kod
window.location.href="usun_newsa.php?id=<?php echo $id; ?>";


po prostu tak:)
jaslanin
google: js confirmation delete

http://psacake.com/web/iw.asp

Nie jest to do końca piękne rozwiązanie ze względu na stosowanie onclick. Jeżeli używasz jquery możesz to zrobić łądniej:

google: js confirmation delete jquery

Czyli po prostu robisz linka i do niego dodajesz potwierdzenie. Jeżeli klikniesz i nie potwierdzisz w okienku, link nie przeniesie na stronę z usuwaniem i nie usunie newsa.
owca
Wielkie dzięki bo działa i rozwiązanie jak najbardziej przejrzyste wink.gif
A tak jeszcze mam taki pomysł... bo za każdym razem co bym nie kliknęła czy usuń czy nie usuwaj to i tak pokazuje się okno z informacją że usunięto lub nie usunięto,
a jakby dodać (da się?) w tym pliku usun_newsa coś co by automatycznie po wykonaniu operacji delete przenosiło z powrotem na stronę przeglądania newsów?
Ma to sens?
jaslanin
możesz użyć w pliku usun, po poprawnym usunięciu:

google: php header location

żeby było automatycznie możesz użyć http referer, ale lepiej jest wpisać miejsce docelowego przekierowania ręcznie
mat-bi
Można także, zamiast przekierowania, walnąć AJAX-em i kiedy zostanie to usunięte, po porstu wyświetlić komunikat.
Gość
Witam
Niestety z tym skryptem js w php dalej jest problem...
W pętli w php wyświetlam kolejne newsy z bazy, koło każdego jest przycisk usuń po którego naciśnieciu wyświetla się okienko confirm i wykonuje się skrypt php usuwający newsa o danym id.
Javascript wyświetlający okienko jest zamieszczony pod całym kodem php gdzie przeglądane są newsy co powoduje że zmienna id w javascript to nie zmienna odpowiadająca każdemu kolejnemu newsowi
tylko największe id.... Toteż kliknięcie usuń przy dowolnym z newsów powoduje usunięcie tego newsa o największym id. Z tego co wydedukowałam to dlatego, że id pobierane są w pętli a javascript jest poza pętlą php.
Czy da się wstawić ten javascript do pętli php tak żeby usuwanie mogło działać poprawnie? A może chodzi o coś innego?
Gdzie powinien znaleźć się i jak skrypt js (ten na samym końcu) aby poprawnie działał? zaraz po "$id=$wiersz['id'];" ? Jeżeli tak no to jak go wstawić bo poprzez echo powoduje że w ogóle to nie działa...
Wstawiam wszystko dla lepszego zobrazowania problemu:

Kod
@mysql_query("SET NAMES 'utf8';");
$start = ($subpage - 1) * $perPage;
$zapytanie = 'SELECT * FROM `newsy` ORDER BY `DATA` DESC LIMIT '.$start.', '.$perPage.'';
$idzapytania = mysql_query($zapytanie);
$max_zapytanie = 'SELECT * FROM `newsy` WHERE id'; // żeby się pozbyć głupiego limitu [ustalamy max stron]
$max_idzapytania = mysql_query($max_zapytanie);
if(mysql_real_escape_string((!isset($_GET['id'])) or empty($_GET['id'])))
{
while ($wiersz = mysql_fetch_array($idzapytania))
{
$id=$wiersz['id'];
echo "<center>";
echo "<table border=\"0px\" width=\"770px\" background=\"nawigacja/b2.jpg\">";
echo "<img src=\"top.png\">";
echo "<tr><td width=\"700px\"  background=\"nawigacja/b1.jpg\"><p title=\"Nagłówek\"><u>".$wiersz['naglowek']."</u></p></td>
<td><form>
<input type=\"button\" onclick=\"show_confirm()\" value=\"Usuń\" />
</form>
</td>
<td><a href=\"edytuj_newsa.php?id=$id\"><img src=\"nawigacja/ed.png\" title=\"Edytuj\" align=\"middle\"></a></td></tr>";
echo "</table>";
echo "<table border=\"0px\" width=\"770px\" background=\"nawigacja/b2.jpg\">";
echo "<tr><td background=\"nawigacja/b1.jpg\"><p title=\"Treść - aby edytować kliknij przycisk w prawym górnym rogu ramki\"><i>".$wiersz['tresc']."</i><br /><br /></td></tr>";
echo "</table>";
echo "<table border=\"0px\" width=\"770px\" background=\"nawigacja/b2.jpg\">";
echo "<tr><td background=\"nawigacja/b1.jpg\"><p title=\"ID newsa\"><b>ID:</b> ".$wiersz['id']."</p></td><td align=\"right\" background=\"nawigacja/b1.jpg\">
<p title=\"data dodania\">".$wiersz['data']."</p></td></tr>";
echo "</table>";
echo "<img src=\"bottom.png\">";
echo "<br />";
echo "<br />";
echo "</center>";
}
}
//<td><a href=\"usun_newsa.php?id=$id\"><img src=\"nawigacja/del.png\" align=\"middle\" title=\"Usuń\"></a></td>
$prev = $subpage - 1;
$next = $subpage + 1;
$prevLink = 'przegladaj_newsy.php?page='.$prev;
$nextLink = 'przegladaj_newsy.php?page='.$next;
$ilosc_wierszy = mysql_num_rows($max_idzapytania);
if($subpage > 1)
echo'<center><a style="text-decoration: none;" href="'.$prevLink.'">Poprzednia strona</a></center> ';
$stron=round($ilosc_wierszy/$perPage);
echo "<div align=\"center\">";
for($i=1; $i<=$stron; ++$i)
{
if($i==$subpage)
echo $i;
else
echo '<a style="text-decoration: none;" href="przegladaj_newsy.php?page='.$i.'">'.$i.' </a>';
}
if($subpage < $stron)
echo ' <a style="text-decoration: none;" href="'.$nextLink.'">Następna strona</a>';

echo "<br /><a href=\"admin.php\"><img src=\"nawigacja/home.jpg\" title=\"PANEL ADMINA - menu główne\"></a>";

echo "</div>";
mysql_close();
?>
<script type="text/javascript">
function show_confirm()
{
var r=confirm("Czy na pewno chcesz usunąć newsa?");
if (r==true)
{
window.location.href="usun_newsa.php?id=<?php echo $id; ?>";
}
else
{
}
}
</script>
lukasz1985
Po pierwsze robisz jedną rzecz fatalnie źle:
używasz echo w PhP do wyrzucania składni HTML.
Osobiście uważam, że takie podejście z góry dyskwalifikuje każdego programistę.
Masz szanse się jednak poprawić:
Po pierwsze użyj coś w stylu
Kod
<?php while(costam):?>
   Tutaj treść instrukcji lub składnia HTML dla każdego wpisu
<?php endwhile; ?>


Kolejna kwestia.
Jeśli już chcesz wyrzucać te confirmy w JS. "window.location" jest ok

Natomiast używając składni przedstawionej powyżej możesz zrobić usuwanie poszczególnych postów w następujący sposób:


Kod
<?php while ($row = mysql_fetch_assoc($result)): ?>
    <div class="divzwpisem"></div>
    <div class='divzbuttonem' onclick="usunWpis(<?php echo $row['id'] ?>)">
    </div>
<?php endwhile; ?>
<script>
    function usunWpis(id) {
        window.location = '/sciezka_do_skryptu_usuwającegeo?id=' + id;
    }
</script>


W pętli zapewne masz dostęp do ID więc problem się rozwiązuje.
Musisz postępować według tego wzorca.
Ja osobiście mam inne rozwiązanie. Posługuję się do tego celu JQuery i rozszerzam nazwy klas buttonów o id wpisu do bazy np "usunwpis_tujestID".
Potem w JS używam funkcji split.
Dzięki temu mam tablice składającą się z dwóch elementów
"usunwpis" i "tujestID"
Pozdro
Gość
Dobra pokombinowałam trochę, kierując się tym co napisałeś i działa.
A tak z ciekawości i jako rada i przestroga dla zielonych na przyszłość: czemu to wstawianie html'a do php poprzez echo jest takim strasznym błędem? poza tym że źle wygląda stwarza to jakieś problemy? ograniczenia?
lukasz1985
Jest bardzo wiele poważnych argumentów.
Po pierwsz nie masz formatowania. Nie widać struktury, nie ma wcięć.
Przy tworzeniu HTMLa należy zadbać o to aby był widoczny, jego struktura była przejrzysta.
Jeśli div zawiera diva to powinno, a nawet musi to wyglądać tak:
Kod
<div>
Treść zewnętrznego diva
  <div>
  Treść zagnieżdżonego diva
  </div>
</div>


Zauważ, że pisząc cały kod w PHP to jest niemożliwe. Potem jak ktoś będzie czytał Twój kod, za cholere nie będzie się potrafił odnaleźć w bazgrołach.
Jeszcze gorzej, jak używa jakiegoś IDE jak NetBeans albo Eclipse, które samo formatuje HTML.

Tak stwarza problemy. I to duże
- brak widoku na strukturę HTMLa
- nieczytelność dla kogoś, kto będzie kontynuował Twój projekt
- brak pewności, że HTML jest zgodny ze standardami (żadne znane mi IDE nie parsuje stringów w PHP jako HTML), natomiast cały HTML wpisywany bezpośrednio do pliku jest parsowany (sprawdzany i przetwarzany przez IDE). IDE sprawdza go pod kątem poprawności z zadeklarowanym DTD. Więc jeśli używasz XHTMLa i zapomniałaś zrobić slasha na końcu <br /> to Ci wyskoczy błąd. W HTMLu 4.01 nie wyskoczy bo ta wersja nie wymaga tego.

Ale żeby moja krytyka była konstrukywna smile.gif, pisz kod w taki sposób:
Kod
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
    <head>
        <title></title>
    </head>

    <body>


        <!--Pętla foreach-->
        <?php foreach ($wpisy as $wpis): ?>
            <div>
                <?php echo $wpis['tresc']; ?>
                <div>
                    <?php echo $wpis['autor']; ?>
                </div>
            </div>
        <?php endforeach; ?>
        <!-- KONIEC Pętla foreach-->


        <!-- Instrukcja warunkowa if-->
        <?php if ($userLoggedIn): ?>
            <a href="wyloguj">Wyloguj</a>

        <?php else: ?>
            <?php echo boxLogowania(); ?>
        <?php endif; ?>
        <!-- KONIEC Instrukcja warunkowa if-->

    </body>

</html>



Zwróć uwagę na to, jak to zostało napisane. Nie ma tutaj haczyków , kod jest logiczny i przejrzysty.

Tyle mogę Ci powiedzieć na wstępie, jeśli będziesz starać się naśladować dobre standardy kodowania, to zrozumiesz jak ważne są niektóre podejścia
(zauważ też na przykład, że nazywam swoje zmienne w standardzie szczególnie biorąc pod uwagę wielkość liter



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.