Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP i MySQL - jak zamienic ze sobą dwie zmienne?
Forum PHP.pl > Forum > PHP
hardy
Jeśli trafiłem do źłego pokoju to przepraszam, ale potrzebuje pomocy z php i MySQL.
Robie baze danych tematów dyplomowych. Tabela temat ma atrybuty [TematID, NazwaTematu]. Jest tez tabela archiwum_tematu [TematID, StaryTytul]. Z załozenia jest mozliwa zmiana tytyłu tematu, czyli w archiwum wstawia sie rekord z TematID oraz StaryTytul(który jest dotychczasową NazwaTematu w tabeli temat), a w tabeli temat zmienia sie krotka NazwaTamatu na NowyTytul. Moj problem jest w tym ze nie umiem wstawic tego nowego tytuły oraz ze stary tytuł nie wstawia sie do archiwum. Do archiwum trafia tylko TamatID. Prosze o wskazówki co jest źle.

Oto kod pliku nowe_archiwum.php:


[php:1:09edc3ee23]<?php
<html>
<head>
<title>Wstawianie archimum tematu</title>
</head>
<body>
<h1>Wstawianie archimum tematu</h1>

<form action="wstaw_archiwum.php" method="post">
<table border="0">

<tr>
<?php
require_once('laczenie.php');
polacz_mysql();

mysql_select_db('pracedyplomowe');

$zapytanie = "select * from temat order by NazwaTematu";
$wynik = mysql_query($zapytanie);
$ile_znalezionych = mysql_num_rows($wynik);
?>
<br /><tr>Temat &nbsp &nbsp </tr>
<select name="TematID">
<?
for ($i=0; $i <$ile_znalezionych; $i++)
{
$wiersz = mysql_fetch_array($wynik);
echo '<option value="'.$wiersz['TematID'].'">'.$wiersz['NazwaTematu'].'</option>';
echo '<br />';
}
?>
</select>
</td></tr>
<tr><td>Nowa nazwa tematu</td><td><input type="text" name="NowyTytul" maxlength="120" size="120"><br /></td></tr>
<tr><td colspan="2"><input type="submit" value="Zapisz"></td></tr>
</table>
</form>
</body>
</html>
?>[/php:1:09edc3ee23]


A tytaj plik: wstaw_archiwum.php

[php:1:09edc3ee23]<?php
<html>
<head>
<title>Rezultat wstawiania nowego archimum tematu</title>
</head>
<body>
<h1>Rezultat wstawiania nowego archimum tematu</h1>
<?php
$TematID=$HTTP_POST_VARS['TematID'];
$NazwaTematu=$HTTP_POST_VARS['NazwaTematu'];
$NowyTytul=$HTTP_POST_VARS['NowyTytul'];

if (!$NowyTytul)
{
echo 'Nie podano wszystkich potrzebnych danych.<br />'
.'Wróć do poprzedniej strony i spróbuj ponownie.';
exit;
}

$TematID = addslashes($TematID);
$NowyTytul = addslashes($NowyTytul);
$NazwaTematu = addslashes($NazwaTematu);


require_once('laczenie.php');
polacz_mysql();

mysql_select_db('pracedyplomowe');
$zapytanie = "insert into archiwum_tematu values ('".$TematID."', '".$NazwaTematu."', '2004-04-15')";
$wynik = mysql_query($zapytanie);
$zapytanie2 = "update temat set NazwaTematu=$NowyTytul where TematID=$TematID";
$wynik2 = mysql_query($zapytanie2);
if ($wynik)
echo mysql_affected_rows().' temat zapisany do bazy.';
?>
</body>
</html>
?>[/php:1:09edc3ee23]
lukaswoj
Tutaj wydajesz się wiedzieć o co chodzi:
[php:1:e533acf33c]
<?php
$zapytanie = "insert into archiwum_tematu values ('".$TematID."','".$NazwaTematu."', '2004-04-15')";
?>
[/php:1:e533acf33c]

A tutaj już wydaje się, że nie wiesz o co chodzi:
[php:1:e533acf33c]
<?php
$zapytanie2 = "update temat set NazwaTematu=$NowyTytul where TematID=$TematID";
?>
[/php:1:e533acf33c]
O ile $TematID jest liczbą to wszystko jest w porządku, ale $NowyTytul liczbą raczej nie jest więc w zapytaniu musisz go wstawić w "ciapki" '

Generalnie przy tego typu problemach proponuję wyświetlić sobie na ekranie wygenerowane zapytanie, wtedy widać czy jest dobrze skonstruowane.

Dobrze jest też poznać działanie funkcji mysql_error(), która może by Ci w tym przypadku podpowiedziała co jest nie tak.
hardy
Dzięki. Już zastosowałem krzaczki. smile.gif
Ale czemu umieszczając w pliku wstaw_archiwum.php
[php:1:bdb7e63717]<?php

echo 'TematID: ',$TematID,'<br />';
echo 'Nowy tytul: ',$NowyTytul,'<br />';
echo 'Nazwa tematu: ',$NazwaTematu,'<br />';
?>[/php:1:bdb7e63717]

wyświetlone zostają dane tylko z dwóch pierwszych poleceń?

Czy poniższy kod nie przekazuje danych NazwaTematu?

[php:1:bdb7e63717]<?php
$zapytanie = "select * from temat where Status<>'zakonczony' and Status<>'udostepniony' order by NazwaTematu";
$wynik = mysql_query($zapytanie);
$ile_znalezionych = mysql_num_rows($wynik);

?>
<br /><tr><td>Temat</td><td>
<select name="TematID">
<?
for ($i=0; $i <$ile_znalezionych; $i++)
{
$wiersz = mysql_fetch_array($wynik);
echo '<option value="'.$wiersz['TematID'].'">'.$wiersz['NazwaTematu'].'</option>';
echo '<br />';
}
?>
</select>
</td>
</tr>
<?
?>[/php:1:bdb7e63717]

a moze ma byc cos podobnego do tego??

[php:1:bdb7e63717]<?php
$zapytanie = "select * from temat where Status<>'zakonczony' and Status<>'udostepniony' order by NazwaTematu";
$wynik = mysql_query($zapytanie);
$ile_znalezionych = mysql_num_rows($wynik);

?>
<br /><tr><td>Temat</td><td>
<select name="TematID","NazwaTematu">
<?
for ($i=0; $i <$ile_znalezionych; $i++)
{
$wiersz = mysql_fetch_array($wynik);
echo '<option value="'.$wiersz['TematID'].'","'.$wiersz['NazwaTematu'].'">'.$wiersz['NazwaTematu'].'</option>';
echo '<br />';
}

?>
</select>
</td>
</tr>
<?
?>[/php:1:bdb7e63717]
lukaswoj
Cytat
Ale czemu umieszczając w pliku wstaw_archiwum.php  
[php:1:e2a94133d5]
<?php  

echo 'TematID: ',$TematID,'<br />';  
echo 'Nowy tytul: ',$NowyTytul,'<br />';  
echo 'Nazwa tematu: ',$NazwaTematu,'<br />';  
?>
[/php:1:e2a94133d5]
wyświetlone zostają dane tylko z dwóch pierwszych poleceń?


Pewnie dlatego, że zmienna $NazwaTematu jest pusta smile.gif
hardy
Wiec co zrobic żeby $NazwaTematu nie była pusta?
lukaswoj
Pobrać je właściwie z bazy danych i upewnić się wcześniej, że w bazie danych rekordy mają coś wpisane w pole "NazwaTematu".

Krok po kroczku, najpierw obczaj czy rekordy nie są puste w polu "NazwaTematu", potem zbuduj zapytanie i sprawdź je np. w phpMyAdminie, jeśli zwróci to co trzeba to przechodzisz do skryptu i jeśli dotarłes do tego momentu i nadal jest źle to szukaj literówek w swoim kodzie.
hardy
Dzięki za odpowiedzi, bardzo sie przydały.
Mam teraz problem bardziej z html'em, ale może będziecie mogli pomóc.
Jak zrobic maske do wpisywania roku szkolnego (__/__), np. wpisując 0304 odebrane to zostanie jako 03/04.
dag
Cytat
Dzięki za odpowiedzi, bardzo sie przydały.  
Mam teraz problem bardziej z html'em, ale może będziecie mogli pomóc.
Jak zrobic maske do wpisywania roku szkolnego (__/__), np. wpisując 0304 odebrane to zostanie jako 03/04.


Nie wiem czy o to Ci chodzi, ale zrób 2 pola input, np:

[pole1 input typu text] / [pole2 input typu text]
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.