Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql][php] dodawanie rekordów przez www
Forum PHP.pl > Forum > Przedszkole
jar
Witam
Znalazłem stronę www na podstawie której staram się zrozumieć działanie dodawania rekordów w bazie mysql poprzez stronę www. Jest tam przykład o nazwie hotele. Zaciągnąłem przykładowe pliki i nie potrafię zrozumieć dlaczego skrypt o nazwie 'hotele-dodawanie-rekordów.php' nie działa. Konkretnie - nie działa ten fragment kodu:
Kod
    $query = "INSERT INTO thotele(nazwa, kod, miejscowosc, ulica, numerdomu, telefon, www)".
             " VALUES ('$linia[0]', '$linia[1]', '$linia[2]', '$linia[3]',
             '$linia[4]', '$linia[5]', '$linia[6]')";
    $result = mysql_query($query)
        or die("Query failed");

Na stronie pojawia się tabelka z nazwami poszczególnych pól bazy ale łącznie z komunikatem błędnego zapytania 'Query failed'.
Tu cały skrypt:
Kod
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
          "http://www.w3.org/TR/html4/strict.dtd">
<HTML>
  <HEAD>
    <TITLE>HOTELE: dodawanie rekordów</TITLE>
    <META http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
  </HEAD>

<BODY>

<H1>HOTELE - dodawanie rekordów</H1>

<H2>Dołączanie rekordów do bazy danych:</H2>

<TABLE border="1">
<TR>
  <TD>
    <STRONG>Nazwa</STRONG>
  </TD>
  <TD>
    <STRONG>Kod</STRONG>
  </TD>
  <TD>
    <STRONG>miejscowość</STRONG>
  </TD>
  <TD>
    <STRONG>Ulica</STRONG>
  </TD>
  <TD>
    <STRONG>Numer domu</STRONG>
  </TD>
  <TD>
    <STRONG>telefon</STRONG>
  </TD>
  <TD>
    <STRONG>www</STRONG>
  </TD>

</TR>


<?php
$nazwabazydanych = "dbhotele";

$link = mysql_connect("localhost", "root", "krasnal")
    or die("BŁĄD: nie można się połączyć z serverem mySQL");

mysql_select_db($nazwabazydanych)
    or die("BŁĄD: wybór bazy danych");

$plik  = file('hotele.txt');
$plikc = count($plik);
for ($i = 0; $i < $plikc; $i++) {
    $linia    = explode('|', trim($plik[$i]));
    $linia[0] = strtoupper($linia[0]);


    $query = "INSERT INTO thotele(nazwa, kod, miejscowosc, ulica, numerdomu, telefon, www)".
             " VALUES ('$linia[0]', '$linia[1]', '$linia[2]', '$linia[3]',
             '$linia[4]', '$linia[5]', '$linia[6]')";
    $result = mysql_query($query)
        or die("Query failed");


    $liniac   = count($linia);
    for ($j = 0; $j < $liniac; $j++) {
        if ($linia[$j] == '') {
            $linia[$j] = ' ';
        }
    }

?>
<TR>
<TD><?php echo $linia[0]; ?></TD>
<TD><?php echo $linia[1]; ?></TD>
<TD><?php echo $linia[2]; ?></TD>
<TD><?php echo $linia[3]; ?></TD>
<TD><?php echo $linia[4]; ?></TD>
<TD><?php echo $linia[5]; ?></TD>
<TD><?php echo $linia[6]; ?></TD>

</TR>
<?php
}//for ($i = ...

mysql_close($link);
?>

</TABLE>

</BODY>
</HTML>

Czy może mi ktoś napisać dlaczego tak się dzieje? Skrypty pod wskazanym wyżej adresem - można je ściągnąć w kilka sekund.
Pozdrawiam
Glarden
Możesz do zmiennej $result dodać:
  1. <?php
  2. $result ($query, $link);
  3. ?>

Chociaż, szczerze mówiąc, nie przypuszczam, żeby to było powodem błędu. Ale innego nie zobaczyłem.
Void
Zamiast
  1. <?php
  2. $result = mysql_query($query)
  3. or die("Query failed");
  4. ?>
daj
  1. <?php
  2. $result = mysql_query($query)
  3. or die(mysql_error());
  4. ?>

i napisz co wyświetla
Lee
  1. <?php
  2. $query = "INSERT INTO `thotele`(`nazwa`, `kod`, `miejscowosc`, `ulica`, `numerdomu`, `telefon`, `www`) VALUES ('$linia[0]', '$linia[1]', '$linia[2]', '$linia[3]', '$linia[4]', '$linia[5]', '$linia[6]')";
  3. ?>

powinno zadziałac, jak nie zadziała to zamiast
  1. <?php
  2. $result = mysql_query($query) or die("Query failed");
  3. ?>

daj
  1. <?php
  2. $result = mysql_query($query) or die(mysql_error());
  3. ?>
i skopiuj treść błędu
jar
Dzięki wielkie za Wasze odpowiedzi. Po wstawieniu
  1. <?php
  2. $result = mysql_query($query) or die(mysql_error());
  3. ?>
dostałem komunikat o duplikowaniu rekordu.
Okazało się (a raczej ja to dopiero zobaczyłem) że funkcja sprawdza plik txt z którego ma zaciągnąć dane do przesłania dla bazy. Jeśli jest tam (w tekstowym pliku) wpis o nazwie np. xxxxx i w mysql-u rekord o tej samej nazwie czyli xxxxx to wyświetla błąd.
Zatem jeśli chciałbym uzupełniać tylko plik tekstowy o nowe wpisy to skrypt nie zadziała. Jeśli natomiast utworzę nowy (tak aby nie zawierał powtarzających się wpisów) to wtedy jest ok.
Jeszcze raz dziękuję, a może znacie jakieś strony gdzie łopatologicznie wytłumaczono jak dodawać i modyfikować rekordy w bazie poprzez www?
Pozdrawiam
Lee
Cytat(jar @ 12.06.2007, 17:07:20 ) *
Dzięki wielkie za Wasze odpowiedzi. Po wstawieniu
  1. <?php
  2. $result = mysql_query($query) or die(mysql_error());
  3. ?>
dostałem komunikat o duplikowaniu rekordu.
Okazało się (a raczej ja to dopiero zobaczyłem) że funkcja sprawdza plik txt z którego ma zaciągnąć dane do przesłania dla bazy. Jeśli jest tam (w tekstowym pliku) wpis o nazwie np. xxxxx i w mysql-u rekord o tej samej nazwie czyli xxxxx to wyświetla błąd.
Zatem jeśli chciałbym uzupełniać tylko plik tekstowy o nowe wpisy to skrypt nie zadziała. Jeśli natomiast utworzę nowy (tak aby nie zawierał powtarzających się wpisów) to wtedy jest ok.
Jeszcze raz dziękuję, a może znacie jakieś strony gdzie łopatologicznie wytłumaczono jak dodawać i modyfikować rekordy w bazie poprzez www?
Pozdrawiam

Poczytaj o zapytaniach
  1. INSERT INTO `tabela` (`nazwa1`, `nazwa2,...,`nazwa`) VALUES ('wartosc1', 'wartosc2',...,'wartosc')

i
  1. UPDATE `tabela` SET `nazwa1`='wartosc1' WHERE `costam(np. id)`='costam')

dzięki nim dodajesz i edytujesz rekordy w MySQL
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.