Mijn doel met dit script is de kolom tel ophogen dmv $tel.
Dus ieder nieuw record dat wordt aangemaakt heeft een kolom waarin vanaf 1 t/m n wordt geteld.
bijv.

rec ----- naam ---- email ------- tel --- uniek_id ---
25 ------ jan [email protected] --1-----1234adb
26 ------gijs [email protected] --2-----5645poi
27 -----alex [email protected] --3-----1893uyr
28 ------desi [email protected] --4-----82hju93
29 ----marjan [email protected] --5-----99eee88
30 -----femke [email protected] --6-----22tuk77

het lukt me niet, iedere refresh blijft de waarde van kolom tel op 1 staan.

Is mijn intentie mogelijk zonder de kolom tel opnieuw uit te lezen, of moet ik gebruik maken van $_SESSION of fopen/fwrite?



<?php   

// $uniek_id wordt random toegewezen
	
$servername = "localhost";
$username = "naam";
$password = "passwoord";
$dbname = "gegevensbank_naam";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

 
  if (empty($tel)) {
	
	$tel='';
}

 
 if ($tel == '') {
	$tel ='1'; 
 } else  {
	  $tel++ ;
  
 
  
	 
  $stmt = $conn->prepare('UPDATE tabel SET tel = ? WHERE uniek_id = ? ');
	$stmt->bind_param("is", $tel, $uniek_id);
 
  
 $stmt->execute();
 }
 
 echo $tel;
 echo '<br>';

?>

Je moet hiervoor een session gebruiken.
als dat de enige mogelijkheid is ga ik dat doen.

Bedankt voor de tip SanThe
Waarom moet je hier een sessie voor gebruiken? Een sessie is slechts een tijdelijke mogelijkheid om variabelen op te slaan en alleen per gebruiker apart. Dit is lang niet altijd de oplossing.

Anyway je kunt een kolom heel simpel laten optellen met de volgende query

UPDATE tabel SET tel = tel + 1 WHERE uniek_id = ?
Ik neem aan dat die "tel" kolom bedoeld is voor het bepalen van een volgorde? En dat, als je een record toevoegt, deze achter aan de lijst wordt toegevoegd met het juiste volgnummer?

De enige manier om dit correct te doen lijkt mij door het aantal actieve records te tellen. Het zou namelijk mogelijk in de toekomst kunnen gebeuren dat:
- er statussen (active, deleted, noem het maar op) worden toegevoegd op grond waarvan een gebruiker "bestaat", en ik neem aan dat de "tel" kolom alleen van toepassing is op "bestaande" gebruikers?
- er gebruikers verwijderd worden (of de status veranderd wordt, zoals hierboven beschreven) zodat de "tel" kolom voor een of meer gebruikers bijgewerkt dient te worden

Het tellen en updaten zou dan in één ondeelbare actie moeten verlopen, dus hier zul je een database-transactie voor moeten gebruiken. Hier is het op zijn beurt voor nodig dat je de InnoDB database-engine gebruikt. Hoe luidt het creatie-statement van deze tabel (SHOW CREATE TABLE tabel)?

Misschien is het ook handig als je uitlegt wat je precies met deze kolom wilt bereiken / hoe je deze gebruikt. Nu is het gissen naar de aanpak - we zijn nu namelijk gedrag aan het bepalen zonder dat we precies weten hoe dit gedrag nou eigenlijk luidt...

EDIT: Wat @Obelix zegt dus :p
een trigger na de insert query zou ook een optie zijn.

Maar de vraag blijft dan ook wat er moet gebeuren als "tel" niet langer een aaneengesloten reeks meer bevat.
Ivo P op 01/02/2017 15:07:44
Maar de vraag blijft dan ook wat er moet gebeuren als "tel" niet langer een aaneengesloten reeks meer bevat.


Of beter: wat er allemaal gedaan moet worden om te garanderen dat dit een aaneengesloten reeks (is en) blijft :).

Reageren