Gå til innhold

Hjelp/tips til å kode ønskeliste til jul i PHP


Anbefalte innlegg

Ganske ny i PHP verden, men har lyst til å prøve meg å lage en slags ønskeliste for julen. Noen som har noen tips på hvordan jeg burde bygge den opp? Hadde vært kult om jeg kunne fått til å lagre dataene i MySQL. Ønskelisten skal bestå av Tittel(som er lenke) og en beskrivelse under.

 

Jeg er bare ute etter hvilke funksjoner, og metoder o.l. jeg skal bruke, ikke noe full guide. :)

Lenke til kommentar
Videoannonse
Annonse
Ganske ny i PHP verden, men har lyst til å prøve meg å lage en slags ønskeliste for julen. Noen som har noen tips på hvordan jeg burde bygge den opp? Hadde vært kult om jeg kunne fått til å lagre dataene i MySQL. Ønskelisten skal bestå av Tittel(som er lenke) og en beskrivelse under.

 

Jeg er bare ute etter hvilke funksjoner, og metoder o.l. jeg skal bruke, ikke noe full guide. :)

 

Foreslått databasestruktur for et enkelt opplegg:

CREATE TABLE wishlist (
   id integer PRIMARY KEY AUTO_INCREMENT,
   name text UNIQUE,
   description text
);

 

Selv jobber jeg mest med Zend_Db på PHP-siden og jeg tror det må være en av de desidert raskeste måtene så kommer med et eksempel for å sette inn og hente ut data du kan jobbe ut ifra:

<?php

// Kobler til databasen
$db = Zend_Db::factory('PDO_MYSQL', array('host' => 'localhost', 'username' => 'root', 'password' => '', 'dbname' => 'wishlist'));
Zend_Db_Table::setDefaultAdapter($db);

// Definerer tabellen
class Wishlist extends Zend_Db_Table_Abstract
{
protected $_name = 'wishlist';
}
$wishlist = new Wishlist();

// Oppretter en ny rad i tabellen (OBS: blir ikke lagret før save() blir kjørt)
// Verdiene blir hentet fra $_POST
$newRow = $wishlist->createRow();
$newRow->name = $_POST['name'];
$newRow->description = $_POST['description'];
$newRow->save();

// Viss en ID er spesifisert vil den bli vist
if(isset($_GET['id']) && ($row = $wishlist->fetchRow(sprintf("id = %d", (int) $_GET['id'])))) {
echo "<div><h3{$row->name}</h3>{$row->description}</div>\n";
}

// Opplisting av tabellen kan gjørs slik:
echo "<ul>\n";
foreach($wishlist->fetchAll() as $item) {
echo "<li><a href=\"?id={$item->id}\">{$item->name}</a></li>\n";
}
echo "</ul>\n";

http://framework.zend.com/manual/en/zend.db.html

 

Ellers er det jo helt greit og bare bruke ext/mysqli eller ext/PDO og kjøre spørringene "manuelt"

http://no2.php.net/mysqli

http://no2.php.net/pdo

Endret av PHPdude
Lenke til kommentar

Bare lage en side, f. eks slett.php og så fra lista så lager du en link:

<a href="slett.php?id=<?php echo $row['id']; ?>">Slett</a>

 

og i slett.php:

<?php
$id = mysql_real_escape_string(intval($_GET['id']));
$query = mysql_query("DELETE FROM tabell_navn WHERE id = '$id'"); // kan hende det kan være lurt å putte på LIMIT 1, bare for sikkerhets skyld

if (mysql_num_rows($query) > 0) {
// Skal vel gå ann å bruke $query her, uten å gjøre queryen en gang til, men jeg husker ikke hvordan 
mysql_query("DELETE FROM tabell_navn WHERE id = '$id'"); // sletter
header('Location: onskeliste.php'); // sendes tilbake til lista
}
else {
echo 'Dette ønsket finnes ikke.';
}
?>

 

Håper du får til noe :)

Endret av Anders Moen
Lenke til kommentar

Hæ? Jeg pleier aldri å bruke absolutt url..pleier bare å bruke f. eks /fil/filnavn.php

 

Sletter ikke 2 ganger. Den sjekker først om den id'en man prøver å finne faktisk finnes i databasen. Men jeg husker ikke åssen jeg utfører $query under der når den har sjekka at den finnes og den finnes. Derfor skrev jeg querien på nytt sånn. Men hvis noen vet hvordan man gjør $query uten å skrive den på nytt, så kan jo noen poste det da ;)

 

 

Og nei, det var vel egentlig ikke vits i å bruke mysql_real_escape_string der, siden jeg bruker intval, men jeg skrev det nå på fordet

Lenke til kommentar

Joda, du sletter den to ganger.

Hvorfor? Du bruker mysql_query() to ganger, med samme spørring.

Man kan heller ikke bruke num_rows på en DELETE/UPDATE-spørring. Da bruker man affected_rows.

 

<?php
$id = intval( $_GET['id'] );
$query = mysql_query("SELECT id FROM tabell_navn WHERE id = '{$id}'"); 

if ( mysql_num_rows( $query ) == 1 ) {
 $q = mysql_query( "DELETE FROM tabell_navn WHERE id = '{$id}'" ); 
 if( $q === TRUE )
 {
$output .= "Ønsket er slettet";
header( "Refresh: 5; http://somesite.com/onskeliste.php" );
 }
 else
 {
die( mysql_error() );
 }
}
else 
{
 $output .= 'Dette ønsket finnes ikke.';
}
echo $output;
?>

Lenke til kommentar

Er unødvendig å gjøre en ekstra spørring for å sjekke om id eksisterer...

 

Her er et eksempel på hvordan det kan gjøres med en spørring.

Siden trådstarter sier han er ny i php-verdenen har jeg kommentert det meste og lagt til ekstra med "luft" i koden.

 

<?php

/* Sette full feilrapportering når vi driver å tester kode */
error_reporting(E_ALL);

/* Sette opp forbindelse mot databaseserver */
$database = mysql_connect('localhost', 'brukernavn', 'passord');
if (!$database) {
die('Kunne ikke koble til databasen: ' . mysql_error());
}

/* Sette hvilken database vi skal bruke */
$db_valgt = mysql_select_db('databaseskjema', $database);
if (!$db_valgt) {
die ('Kan ikke bruke gitt database : ' . mysql_error());
}


/* Sjekke om url inneholder ID for rad(er) som skal slettes */
if (isset($_GET['id']) && !empty($_GET['id'])) {

/* Sjekke at id i url inneholder heltall */
$id = (is_numeric($_GET['id'])) ? intval($_GET['id']):false;

/* Sjekke at ID har riktig format  */
if ($id) {

	/* Lage SQL-spørring som inneholder ID som skal slettes */
	$db_sp = "DELETE FROM tabell_navn WHERE id=$id";

	/* Utføre spørring */
	$resultat = mysql_query($db_sp);

	/* Sjekke resultatet av spørringen */
	if ($resultat) {

		/* Sjekke om rad(er) med gitt ID er blitt slettet. */
		if (mysql_affected_rows()) {
			echo "Raden med gitt ID er slettet!";
		}
		else {
			echo "Fant ingen rader med gitt ID!";
		}
	}
	else {
		echo "Det oppstod en feil i databasespørringen!";
	}
}
else {
	echo "ID gitt i URL men formatet på ID er ugyldig!";
}
}
else {
echo "ID ikke gitt i URL!";
}

?>

Endret av Zandar
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...