v5.dk logo
Kom ind og besøg vores Discord Chat-community
Bliv medlem her eller læs mere om Discord her
Kærlighed kan godt købes for penge
- vi elsker nemlig vores kunder :-)

Mere info Køb nu

Premium på v5.dk
v5.dk logo  v5.dk e-learning
Log på med Facebook
  • Log ind på v5.dk
  • Opret bruger
  • Log ind
  • v5.dk Premium
  • v5.dk Premium
  • Hvad siger vores kunder?
  • E-læring for begyndere
  • icon for WordPress 4 e-learning WordPress 4
  • icon for Office 365 e-learning Office 365
  • icon for Microsoft Word e-learning Microsoft Word
  • Bloggen for alle
  • E-læring for nørder
  • icon for PHP-programmering e-learning PHP-programmering
  • icon for iOS Programmering e-learning iOS Programmering
  • icon for Linux Server e-learning Linux Server
  • Bloggen for nørder
  • Arkiverede videoer
  • Fællesskab
  • Forum
  • Idéer og ønsker
  • Markedspladsen
  • v5.dk Premium
  • Gratis webhotel
  • Cloud-servere
  • Om v5.dk
  • Søg på v5.dk
  • Om v5.dk ApS
    • Om virksomheden
    • RSS-feeds og tjenester
    • Driftsmeddelelser
    • Presse-kit
    • Ledige jobs
    • Social Netværk
      • Facebook
      • Twitter
      • Instagram
    • Alt det andet
      • Forretningsbetingelser
      • Ophavsret og Copyright
  • Kontakt kundeservice
  • FAQ og Hjælp
    • Premium og abb.
    • Videoer og Afspiller
    • Forum og Points
    • Cloud-servers
  • Partner/Virksomhed
  • Partner-kanal
v5.dk logo mobile
  • Menu
  • Opret bruger

Update query med hjælp af Ajax?

  • v5.dk
  • Forum
  • PHP-programmering
  • Update query med hjælp af Ajax?
  • Sidevisninger: 3098 har set dette indlæg
Besvar #0Spørgsmål oprettet af @HrCalmar| Premium Premium | 7300 points
30 points ude 2 indlæg 6 år siden Spørgsmålet er ikke løst
avatar
 

Hey.
Så har jeg brug for lidt hjælp igen igen.. ;) (Y)

Jeg prøver at lette vores arbejde på Københavns MiddelalderMarked, hvor vi skal have flere personer indover der skal udlevere diverse ting til vores frivillige.
Lige nu lægger det på Google Drev, men den løsning har aldrig fungeret for os.

Jeg blev derfor spurgt om jeg kunne lave noget online, og det er nu det jeg prøver :)

Jeg koder på siden her

Mit problem er at jeg ikke helt ved hvordan jeg skal opdatere de enkle størrelser korrekt.

 

Ideen er (som du sikkert allerede har regnet ud) at man skal kunne trykke på + & - 

 

Min kode i Index.php ser sådan ud:

<?php
	include("app.php");
	$app = new minAwesomeApp;
	ini_set('display_errors', 1);
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">
    <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
    <title>T-Shirt Tæller</title>
    <!-- Bootstrap Core CSS -->
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <!-- Custom CSS -->
    <link href="css/round-about.css" rel="stylesheet">
    <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
        <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
        <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
    <![endif]-->

</head>
<body>
    <!-- Navigation -->
    <nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
        <div class="container">
            <!-- Brand and toggle get grouped for better mobile display -->
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="index.php">Københavns MiddelalderMarked</a>
            </div>
            <!-- Collect the nav links, forms, and other content for toggling -->
            <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
                <ul class="nav navbar-nav">
                    <li>
                        <a href="index.php">Tæller</a>
                    </li>
                    <li>
                        <a href="contact.php">Kontakt</a>
                    </li>
                </ul>
            </div>
            <!-- /.navbar-collapse -->
        </div>
        <!-- /.container -->
    </nav>

    <!-- Page Content -->
    <div class="container">

        <!-- Introduction Row -->
        <div class="row">
            <div class="col-lg-12">
            <br />
                <h1 class="page-header">Brug mig korrekt
                    <small>Læs derfor dette inden brug!</small>
                </h1>
                <p>Hver gang du udlevere en t-shirt. Skal du klikke på det grønne plus i den rigtige størrelse.</p>
            </div>
        </div>
				<!-- Team Members Row -->
				<div class="row">
						<div class="col-lg-12">
								<h2 class="page-header">Størrelser</h2>
						</div>


				<?php
					foreach ($app->DatabasePrepareQuery("SELECT * FROM tshirt", array()) as $data){

						echo '<div class="col-lg-2 col-sm-6 text-center">
                <div class="badge"><h1> ' . $data['udleveret'] . '</h1></div>
                <h3>' . $data['str'] . '</h3>
                <small>Tilbage : ' . $data['retur'] . '</small>
                <p><button id="plus"><img src="images/plus.png" alt="plus" width="" height="" value=""  /></button>  <button><img src="images/minus.png" alt="minus" width="" height="" /></button></p>
            </div>';

					}
				?>
        </div>
        <hr>
        <!-- Footer -->
        <footer>
            <div class="row">
                <div class="col-lg-12">
                    <p>Copyright &copy; Simon Calmar Petersen 2015-<?php echo "20". (date(y)); ?></p>
                </div>
                <!-- /.col-lg-12 -->
            </div>
            <!-- /.row -->
        </footer>
    </div>
    <!-- /.container -->
    <!-- jQuery -->
    <script src="js/jquery.js"></script>

    <!-- Bootstrap Core JavaScript -->
    <script src="js/bootstrap.min.js"></script>

</body>

</html>

 

Min app.php ser sådan her ud.

<?php

// Sætter vores timezone
date_default_timezone_set('Europe/Copenhagen');

// Opsætter vores "locale" til dansk
setlocale(LC_ALL, 'da_DK.UTF-8');

// Opsætter fejlrappotering til alt pånær "notice"-beskeder
error_reporting(E_ALL ^ E_NOTICE);

// Definerer at vi gerne vil vise fejlbeskeder, sæt til 0 for at skjule fejlbeskeder
ini_set("display_errors", 1);

class minAwesomeApp {

    // Database information
    private static $db;
    private $MySQLUsername = '*********';
    private $MySQLPassword = '*********';
    private $MySQLHostname = '*********';
    private $MySQLDatabase = '*********';

      // Forbind til vores database
      public function __construct() {
          if (!isset(self::$db)) {
              try {
                  self::$db = new PDO('mysql:host=' . $this->MySQLHostname .
                  ';dbname=' . $this->MySQLDatabase .
                  ';charset=utf8;', $this->MySQLUsername,
                  $this->MySQLPassword);
                  self::$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
              } catch (PDOException $e) {
                  die ( "Kunne ikke logge på databasen, måske har du indtastet forkert MySQL username, password, hostname eller databasenavn. Fejlbeskeden fra systemet er: " . $e->getMessage() );
              }

          }
      }

      // Hent data ud fra vores database (flere linjer)
      // DatabasePrepareQuery( "SELECT * FROM Adressebog", array() )
      // DatabasePrepareQuery( "SELECT * FROM Adressebog WHERE navn = ?", array('Daniel') )
      // DatabasePrepareQuery( "SELECT * FROM Adressebog WHERE navn LIKE ?", array('%Daniel%') )
      public function DatabasePrepareQuery($query,$data_array) {
        try {
          $stmt = self::$db->prepare($query);
          $stmt->execute($data_array);
          return $stmt;
        } catch (PDOException $e) {
            // Catch fejlbesked og echo den ud
            echo 'Der opstod en fejl - fejlbesked: ' . $e->getMessage();
            exit;
        }
      }

      // Hent data ud fra vores database (éen linjer)
      // DatabasePrepareQueryReturnFirstField( "SELECT * FROM Adressebog WHERE id = ?", array(1) )
      public function DatabasePrepareQueryReturnFirstField($query, $data_array) {
        try {
          $stmt = self::$db->prepare($query);
          $stmt->execute($data_array);
          return $stmt->fetch();
        } catch (PDOException $e) {
            // Catch fejlbesked og echo den ud
            echo 'Der opstod en fejl - fejlbesked: ' . $e->getMessage();
            exit;
        }
      }

      // Slet noget fra vores database
      // DatabaseDelete( "Adressebog", "WHERE id = ?", array(1) )
      public function DatabaseDelete($TableName, $WhereField, $WhereValues) {
            if (is_array($WhereValues) && isset($WhereField) && isset($TableName)) {
              try {
                $prepareInsert = self::$db->prepare('DELETE FROM ' . $TableName . ' ' . $WhereField);
                $prepareInsert->execute($WhereValues);
                return $prepareInsert->rowCount();
              } catch (PDOException $e) {
                  // Catch fejlbesked og echo den ud
                  echo 'Der opstod en fejl - fejlbesked: ' . $e->getMessage();
                  exit;
              }
            } else {
                return 0;
            }
        }

        // Sæt noget ind i vores database
        // DatabaseInsert( "Adressebog", array('Navn','Email'), array('Daniel','[email protected]') )
        public function DatabaseInsert($TableName, $Fields, $Values) {
            $buildFields = '';
            if (is_array($Fields)) {
                // Loop igennem alle vores felter
                foreach($Fields as $key => $field) :
                    if ($key == 0) {
                        // Første felt
                        $buildFields .= $field;
                    } else {
                        // Efterfølgende felter starter med ","
                        $buildFields .= ', ' . $field;
                    }
                endforeach;
            } else {
                // Vi indsætter kun éet felt, ingen behov for overstgående loop
                $buildFields .= $Fields;
            }
            $buildValues = '';
            if (is_array($Values)) {
                //  Loop igennem alle vores values
                foreach($Values as $key => $value) :
                    if ($key == 0) {
                        // Første
                        $buildValues .= '?';
                    } else {
                        // Efterfølgende starter med ","
                        $buildValues .= ', ?';
                    }
                endforeach;
            } else {
                // Vi indsætter kun éet felt, ingen behov for overstgående loop
                $buildValues .= ':value';
            }
            try {
                $prepareInsert = self::$db->prepare('INSERT INTO '.$TableName.' ('.$buildFields.') VALUES ('.$buildValues.')');
                if (is_array($Values)) {
                    $prepareInsert->execute($Values);
                } else {
                    $prepareInsert->execute(array(':value' => $Values));
                }
                // Return last Insert ID
                return self::$db->lastInsertId();

            } catch (PDOException $e) {
                // Catch fejlbesked og echo den ud
                echo 'Der opstod en fejl - fejlbesked: ' . $e->getMessage();
                exit;
            }

        }

        // Opdater noget i vores database
        // DatabaseUpdate( "Adressebog", array('email'), array('[email protected]', 1), "WHERE id = ?" )
        public function DatabaseUpdate($TableName, $Fields, $Values, $WhereFields) {
            $buildFields = '';
            if (is_array($Fields)) {
                foreach($Fields as $key => $field) :
                    if ($key == 0) {
                        $buildFields .= $field . " = ?";
                    } else {
                        $buildFields .= ', ' . $field . " = ?";
                    }
                endforeach;

            } else {
                $buildFields .= $Fields . " = :value";
            }
            try {
                $prepareInsert = self::$db->prepare('UPDATE '.$TableName.' SET '.$buildFields.' '.$WhereFields);
                if (is_array($Values)) {
                    $prepareInsert->execute($Values);
                } else {
                    $prepareInsert->execute(array(':value' => $Values));
                }
                return self::$db->lastInsertId();
            } catch (PDOException $e) {
              echo 'Der opstod en fejl - fejlbesked: ' . $e->getMessage();
              exit;
            }

        }


}

 

Jeg prøvede at kigge de næste videoer igennem, men synes ikke rigtigt jeg kunne finde ud af at konvertere det over til min problem stilling :)

 


Mvh
S. Calmar
www.scalmar.dk

avatar
 
Besvar#1 @HrCalmar Premium kommenterede for 6 år siden


Mvh
S. Calmar
www.scalmar.dk

avatar
 
Besvar#2 @db Admin svarede for 6 år siden

Hej Simon,

Det kan godt lade sig gøre, du skal bruge jQuery og herfra kan du lave et kald uden siden skal refreshes. Dette er lidt en hurtig løsning, det kan lave meget pænere, men for lige at give dig lidt indsigt i teknologien, holder vi det lige på et begynder niveau. Bemærk også at dette emne vil vi komme meget mere ind på i vores kommende Brugersystem med PHP video.

Let's rock:

På din + knap laver du følgende href:

<a href="#" onclick="updateCount('inc','xxl')">+</a>

Og på din - knap laver du følgende href:

<a href="#" onclick="updateCount('dec','xxl')">-</a>

To to knapper (increment og decrement) refererer nu til en javascript-funktion og sender to parametre med, først (typen) altså om der er tale om en inc eller dec, og herefter t-shirt størrelsen (ex. xxl). Lad os nu bygge den respektive Javascript-funktion:

<script>

function updateCount(type, size) {
	
	$.get( "ajax/update.php?type=" + type + " &size=" + size, function( data ) {
	  $( "#antalTilbage_" + size ).html( data );
	});

}

</script>

Ovenstående JS kalder nu ajax/update.php filen med to $_GET-variabler, type og size. Inde i vores PHP kan vi nu behandle kaldet, eksempel:

<?php

// Godkendte typer:
$types = array('inc', 'dec')

// Godkendte størrelser:
$sizes = array('xxs','xs','m','l','xl','xxl');

if(  isset($_GET['type']) && isset($_GET['size']) && in_array(strtolower($_GET['type']), $types) && in_array(strtolower($_GET['size']), $sizes)  ) {
	
	if($_GET['type'] == "inc") {
		
		// Hent vores aktuelle antal t-shirts:
		$tshirt = $app->DatabasePrepareQueryReturnFirstField("SELECT * FROM tshirt WHERE str = ?", array($_GET['type']));
		$tshirtAntal = intval($tshirt['udleveret']);
		$tshirtNewAntal = intval($tshirtAntal-1);
		
		// Opdater:
		$app->DatabaseUpdate("tshirt", array('udleveret'), array($tshirtNewAntal, $_GET['size']), "WHERE str = ?") 
		
		// Returner nyt antal til vores Javascript:
		echo $tshirtNewAntal;
		
	}
	
}

Nu returnerer vores PHP-kode det nye antal tilbage, det skal vi have reflekteret på vores hjemmeside, bemærk at vi tidl. i vores Javascript-kode skrev følgende:

$( "#antalTilbage_" + size ).html( data );

Det betyder kort fortalt at vi i et HTML-elemenet med id-navnet antalTilbage_xxl vil indsætte resultatet fra vores PHP, altså $tshirtNewAntal. Så lad os rundt om vores html-tag indsætte et ID af samme navn:

<div class="badge"><h1 id="antalTilbage_xxl"> ' . $data['udleveret'] . '</h1></div>

Kan evt også laves dynamisk:

<div class="badge"><h1 id="antalTilbage_'.strtolower($data['str']).'"> ' . $data['udleveret'] . '</h1></div>

Uden at have testet ovenstående, så er burde det give et godt indblik i hvordan du kan løse din aktuelle opgave.

God fornøjelse :)


Med venlige hilsner

Daniel Bahls Signatur   Daniel Bahl (@db)
   CEO – v5.dk ApS

avatar
 

Du er ikke logget ind

Du skal være logget ind på v5.dk før du kan benytte vores forum. Det er ganske gratis at oprette en bruger.

Opret en ny gratis bruger Log ind

Følger med i denne tråd

HrCalmar db

Forum kategorier

  • Generelt
  • Guides & Howto85
  • Offtopic / Andet160
  • Microsoft Office
  • Microsoft Word13
  • Microsoft Excel4
  • Microsoft PowerPoint0
  • Web og hjemmesider
  • Wordpress17
  • Operativsystemer
  • Apple Mac OS X14
  • Apple iOS28
  • Microsoft Windows4
  • Linux16
  • Teknologier
  • Netværk og WiFi3
  • Internet-tjenester9
  • Programmering
  • PHP-programmering125
  • iPhone-/Xcode-programmering9

Aktive forum-tråde lige nu

pentobarbital kaufen ohne rezept
gras kaufen online - grasthc.com
online marketing
Køb juridiske dokumenter såsom kørekort, pas, visum, opholdstilladelse og andre dokumenter
Køb juridiske dokumenter såsom kørekort, pas, visum, opholdstilladelse og andre dokumenter
Weed online kaufen
Er det værd at have en "portfolio"-hjemmeside!?
Fejlkode i form af bip-lyde ved opstart af gammel stationær PC
Bygget med af v5.dk
© Copyright 2006-2023 • Forretningsbetingelser • Copyright • Persondata- og Cookiepolitik
v5.dk ApS - Åbogade 15 - 8200 Aarhus N - CVR: 36902833
v5.dk logo
Hej, vi hedder v5.dk og vi laver e-learning på dansk

v5.dk er sat i verden for at gøre teknologi tilgængeligt og anvendeligt for både professionelle og almindelige brugere på alle niveauer.

93 200 555
  Skriv til os
v5.dk bruger cookies til at huske dine indstillinger, livechat samt til statistik
 

Alle vores priser er inkl. moms Sikker SSL-beskyttet forbindelse

Dankort og Visa-Dankort  Visa  Mastercard og Mastercard Junior  Maestro

  • Produkter
  • v5.dk Premium
  • Cloud-servers
  • v5.dk
  • Om v5.dk
  • Kunderne siger
  • Kontakt os
  • Presse
  • Stay updated
  • RSS & tjenester
  • Søg på v5.dk
  • Sitemap