Anonym5656 Skrevet 18. november 2007 Del Skrevet 18. november 2007 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
PHPdude Skrevet 18. november 2007 Del Skrevet 18. november 2007 (endret) 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 18. november 2007 av PHPdude Lenke til kommentar
Anonym5656 Skrevet 20. november 2007 Forfatter Del Skrevet 20. november 2007 Har fått til å liste opp tabellen, og en side for å legge til. Nå hadde vært kult om jeg kunne slette rader som har blitt lagt til. Hvordan burde jeg gå fram da? Lenke til kommentar
Anders Moen Skrevet 20. november 2007 Del Skrevet 20. november 2007 (endret) 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 20. november 2007 av Anders Moen Lenke til kommentar
Anonym5656 Skrevet 20. november 2007 Forfatter Del Skrevet 20. november 2007 Takk Begynner å ligne på noe nå. Men hva er grunnen til mysql_real_escape_string(intval... ? Etter hva jeg har skjønt gjør du den litt mer sikker, ved at det MÅ være et hel-tall. Eller misforstår jeg? Lenke til kommentar
trrunde Skrevet 20. november 2007 Del Skrevet 20. november 2007 du bruker mysql_real_escape_string for å passe på at det ikke kommer inn noe skadelig kode Lenke til kommentar
Anders Moen Skrevet 20. november 2007 Del Skrevet 20. november 2007 Ja, det er for at det skal være mer sikkert. Hva mener du med hel-tall? intval() gjør slik at man bare kan bruke tall, og hvis det ikke er et tall, så tror jeg det blir 0 (men det er jeg ikke sikker på, bare noe jeg tror) Lenke til kommentar
itsmebth Skrevet 20. november 2007 Del Skrevet 20. november 2007 Meningen med mysql_real_escape_string er å hindre SQL-injection ved å bytte ut alle ' med \'. I Anders-Moens kode er dette ikke noe vits i etter som han han forvandler det til et tall med intval. PS: Location: skal ha absolutt URL (http://www.w3.org/Protocols/rfc2616/rfc261...4.html#sec14.30)! PPS: Hva er vitsen med å slette det to ganger? Lenke til kommentar
Anders Moen Skrevet 20. november 2007 Del Skrevet 20. november 2007 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
Martin A. Skrevet 20. november 2007 Del Skrevet 20. november 2007 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
Zandar Skrevet 21. november 2007 Del Skrevet 21. november 2007 (endret) 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 21. november 2007 av Zandar Lenke til kommentar
Anonym5656 Skrevet 23. november 2007 Forfatter Del Skrevet 23. november 2007 Hvis det skulle vært med et bilde, som skulle ligge som en vanelig <img> i beskrivelsen, hvordan burde jeg gjøre det med tanke på databasen? Legge til en bilderad/bilderader i samme tabellen som inneholder tittel og beskrivelse? Lenke til kommentar
gommle Skrevet 24. november 2007 Del Skrevet 24. november 2007 Her er litt inspirasjon: http://www.wishlistr.com/ Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå