Autor Zpráva
Martin998
Profil *
Čau,
prosím o radu... v PHP se vyznám jen tak letmo.

Nicméně potřebuji vytvořit toto: administrátor se přihlásí na určitou stránku (to bych zvládl), kde bude několik checkboxů. Pokud zatrhne checkbox č.1, tak se na stránce (kterou vidí návštěvník) tabulka č.1 podbarví červeně.

----
Jde o situaci:
Stránky s ubytováním http://roznov-ubytovani.cz/obsazenost.html , na nich jsou datumy. Potřebuji, aby si správce mohl sám naklikat, která pole budou podbarvena červeně.



Počítám, že stránky se převedou na PHP
Děkuji vám za nápady a řešení
stepanka
Profil *
Martin998:
Tak udělej v administraci obyčejný formulář, kde budou checkboxy pro všechny pole (datumy). Když administrátor x checkboxů zaškrtne a uloží, uloží se do databáze ke každému x. datu nějaký příznak. Na stránkách pak budeš kontrolovat, jestli má datum příznak nastaven, nebo nenastaven. Podle toho nastavíš podbarvení na červenou nebo bílou.
Martin998
Profil *
No zníto pěkně ale vůbec nevím jak to udělat :( . Neumím si sestavit kód. Kdyby byl na netu nějaký funkční příklad, tak bych se nejspíš dokázal odpíchnout.
stepanka
Profil *
Martin998:
Nejlepší pro Tebe je, pokud se s tak primitivním zadáním popereš sám, jinak se nic nenaučíš. Ale nějaký nástřel je zde: (nezkoušela jsem to...)

Administrace:

<?php

if (isset($_POST['odeslat'])) { // pokud je odeslán formulář
	mysql_query("UDPATE tabulka SET cervena = 0"); // nejdříve vymažeme všechny příznaky, abychom mohli vložit pouze červené
	foreach ($_POST['datum'] as $datum) { // pro každý zaškrtnutý checkbox
		mysql_query("UPDATE tabulka SET cervena = 1 WHERE datum = '".$datum."'"); // vložíme červenou do databáze
	}
}


$sql = mysql_query("SELECT datum FROM tabulka"); // výběr dat pro formulář v administraci
echo '<form action="" method="post">'; // formulář
while ($row = mysql_fetch_object($sql)) {
	echo '<input type="checkbox" name="datum[]" value="'.$row->datum.'">'; // vytvoříme pole checkboxů
}
echo '<input type="submit" name="odeslat" value="Uložit">';
echo '</form>'; // ukončíme formulář

?>


Vnější web:

<?php 

$sql = mysql_query("SELECT * FROM tabulka"); // vybereme data z tabulky
while ($row = mysql_fetch_object($sql)) {
	if ($row->cervena == 1) echo '<div style="background-color: red">'.$row->datum.'</div>'; // pokud je příznak nastaven na 1, zobrazíme červené pozadí
	else if ($row->cervena == 0) echo '<div style="background-color: white">'.$row->datum.'</div>'; // pokud je příznak nastaven na 0, zobrazíme červené pozadí
}

?>
CZechBoY
Profil
<?php
$datumy=Array();
ForEach($_POST['datum'] as $datum)
	If(checkDateFormat($datum))
	  $datumy[]=$datum;

  $sql=("UPDATE tabulka SET cervena=1 WHERE datum IN ('".Implode("','",$datum)."')"); // vložíme červenou do databáze
@MySQL_Query($sql) Or Die(MySQL_Error());
        
function checkDateFormat($date)
{
  //match the format of the date
  If (preg_match ("/^([0-9]{2}).([0-9]{2}).([0-9]{4})$/", $date, $parts))
  {
    //check weather the date is valid of not
        return (checkdate($parts[2],$parts[3],$parts[1]))
  }
  Else
    return false;
}
?>


to je update datumů v administraci (lepší výkonnost díky použití pouze jednoho MySQL_Query a validace datumu)
v tom formuláři by samozřejmě byla bezpečnostní chyba - CSRF a vypisovaly by se i datumy z minulosti, což není někdy žádané a proto bych tam dal WHERE? který by omezoval výpis třeba na 3 měsíce zpátky
Martin 998
Profil *
Můžete mi ještě poradit s databází prosím?
Na stránkách jsem připojen k databázi pomocí configu ve kterém mám

<?
$server = "localhost"; // jméno serveru
$login = "root"; // přihlašovací jméno
$heslo = "123456"; // heslo
$databaze = "test"; // název databáze
MySQL_Connect($server, $login, $heslo) or die("Nepodařilo se připojit k databázi"); // připojení k databázi
MySQL_Select_DB($databaze) or die("Nepodařilo se otevřít databázi"); // výběr databáze
?> 

To je předpokládám dobře :)

S čím si nevím rady to je databáze:

Zatím to mám vytvořené takto ale myslím, že to není dobře
http://img8.imageshack.us/img8/5097/mysqlc.png
Martin 998
Profil *
Tak ještě trochu jinak, ještě jsem tam vytvořil jeden sloupeček:


Uvšem když dám v adinistraci Uložit, tak mi to vyhodí chybu:
Warning: Invalid argument supplied for foreach() in C:\AppServ\www\www-LACINOVA\admin.php on line 6
Martin 998
Profil *
A ještě jeden problém,
podle kódu by se měl na stránce zobrazit checkbox, ovšem nikde tam není. Nevíte kde je chyba?

http://img717.imageshack.us/img717/3447/checkph.png
stepanka
Profil *
CZechBoY:
@MySQL_Query($sql) Or Die(MySQL_Error());
Tímto jsi chtěl říct co?

Martin 998:
V databázi Ti chybí primární sloupec, dej tam:
id = INT(10), PRIMARY KEY, AUTO INCREMENT
cervena = TINYINT(1), default 0
datum = DATETIME

Ovšem když dám v adinistraci Uložit, tak mi to vyhodí chybu
Nevíme který kód jsi použil, kdyžtak ho sem musíš zkopírovat, abychom našli chybu.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0