php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 19-10-2008, 14:12
fritzje610
 Registrierter Benutzer
Links : Onlinestatus : fritzje610 ist offline
Registriert seit: Mar 2004
Ort: Nahe der schönen Loreley
Beiträge: 318
fritzje610 ist zur Zeit noch ein unbeschriebenes Blatt
Standard doppelte Datensätze unterbinden

Hallo zusammen,

ich lasse den User über mehrere Seiten Daten eingeben, um diese dann am Ende gesammelt in verschiedene Tabellen zu schreiben.
Dieses schreiben soll aber nur einmal möglich sein, sprich der Reloadbutton des Browsers soll ignoriert werden, da bei dem schreiben eine eindeutige Nummer erzeugt wird.
Momentan wird bei jedem aktualisieren im Browser um eins erhöht und geschrieben. Mein Gedanke war es, über den SQL-FEhler 1062 das abzufanken, aber das haut gar nicht hin. Wie mache ich das am beten??? Hab schon nach reloadsperre gesucht. Da bin ich aber nicht wirklich fündig geworden. Hier das Script dazu:

PHP-Code:
require_once($root "/functions/db_connection.php");

$letzte_au_nr "";

$error = array();

$query "SELECT * FROM auftraege ORDER BY au_nr DESC LIMIT 1";
$result mysql_query($query);
if (!
$result)
{
    die (
'Ungültige Abfrage: ' mysql_error());
}
while(
$row mysql_fetch_assoc($result))
{
    
$letzte_au_nr $row['au_nr'];
}


$query "INSERT INTO auftraege SET au_nr='" $neue_au_nr ."'";
$result mysql_query($query);
if (!
$result)
{
    if(
mysql_errno() == 1062)
    {
        
array_push($error"AU-Nr schon vorhanden");
    }
    else
    {
        die (
'Ungültige Abfrage: ' mysql_error());
    } 
}

$neue_au_nr $letzte_au_nr 1;

if(
count($error) == 0)
     {


....
Hier kommen die ganzen INSERT INTO .....


}
else
    {
        echo 
"<div id='fehler'>";
        if (isset(
$error) && count($error) > 0//Prüfen ob array $error da ist UND ob es einen Eintrag hat.
        
{
              for (
$i=0$i count($error); $i++) //Ausgabe aller Einträge des Arrays $error
             
{
                  
                echo 
$error[$i] . "<br />";
                 
            } 
        }
        echo 
"</div>";
    } 
Über Hilfe und Unterstützung würde ich mich freuen


Gruß

Michael
__________________
Gruß

Michael

Mit Zitat antworten
  #2 (permalink)  
Alt 19-10-2008, 14:56
mcmurphy
 PHP Junior
Links : Onlinestatus : mcmurphy ist offline
Registriert seit: Aug 2003
Ort: Berlin
Beiträge: 890
mcmurphy zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Zitat:
Hab schon nach reloadsperre gesucht.
http://www.contentmanager.de/magazin...erhindern.html
Vielleicht hilft dir das
__________________
"I don't want to belong to any club that would accept me as a member."

Groucho Marx
Mit Zitat antworten
  #3 (permalink)  
Alt 19-10-2008, 15:10
Griecherus
 PHP Senior
Links : Onlinestatus : Griecherus ist offline
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
Griecherus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hm, also nur dafür eine Klasse finde ich etwas oversized. Das Prinzip, das dahinter steckt, soll dabei nicht kritisiert sein.
Mit Zitat antworten
  #4 (permalink)  
Alt 19-10-2008, 19:10
fritzje610
 Registrierter Benutzer
Links : Onlinestatus : fritzje610 ist offline
Registriert seit: Mar 2004
Ort: Nahe der schönen Loreley
Beiträge: 318
fritzje610 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hmm, dass ist wirklich etwas zu dick aufgetragen. Das geht doch auch sicherlich einfacher/anders.
Ich hab zwar jetzt die Kiste ein paar Stunden aus gehabt, aber irgendwie keine neuen Ansätze entwickeln können.

Wie kann ich das am besten lösen, zumal ich kein form habe. D.h. sobald das Script startet muss geprüft werden, ob es den Satz schon gibt und wenn nein eintragen (Script wird von der vorigen Seite aufegerufen so wie es sein soll) , ansonsten eine Fehlermeldung in das error-array pushen (Reload-Fall)


Danke und Gruß

Michael
__________________
Gruß

Michael

Mit Zitat antworten
  #5 (permalink)  
Alt 19-10-2008, 19:20
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Bis auf die Tatsache, dass du $neue_au_nr erst nach der Benutzung definierst, sieht es für mich danach aus, als ob dein feld au_nr unique sein müsste. Klick
Dann könntest du das zumindest überprüfen.
Ansonsten empfielt sich für sowas immer der Typ "primary Key" mit "auto_increment".. Dann brauchst du nicht die letzte Abfragen..


mfg
Mit Zitat antworten
  #6 (permalink)  
Alt 19-10-2008, 19:37
fritzje610
 Registrierter Benutzer
Links : Onlinestatus : fritzje610 ist offline
Registriert seit: Mar 2004
Ort: Nahe der schönen Loreley
Beiträge: 318
fritzje610 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das Feld au-nr ist unique und in en entsprechenden Tabellen gibt es jeweils ein Feld id, das den primärKey bildet und auto_increment ist.

Die id kann ich aber nicht als au_nr heranziehen, denn sollte mal ein Satz gelöscht werden, stimmt die Reihenfolde der au_nr nicht mehr.
Deshalb muss diese von Hand, sprich vom Script, erzeugt werden.


Gruß

Michael
__________________
Gruß

Michael

Mit Zitat antworten
  #7 (permalink)  
Alt 19-10-2008, 19:48
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Die id kann ich aber nicht als au_nr heranziehen, denn sollte mal ein Satz gelöscht werden, stimmt die Reihenfolde der au_nr nicht mehr.
Da du ID ja Auto_increment gesetzt hast, wird weiter gezählt. Löscht du einen, entsteht eine Lücke in der ID-Reihenfolge, aber sie wird nicht aufgefüllt. (soweit ich weiß)

mfg
Mit Zitat antworten
  #8 (permalink)  
Alt 19-10-2008, 20:25
fritzje610
 Registrierter Benutzer
Links : Onlinestatus : fritzje610 ist offline
Registriert seit: Mar 2004
Ort: Nahe der schönen Loreley
Beiträge: 318
fritzje610 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wie dem auch immer sein mag (ich glaub Du hast recht, ich war da jetzt falsch), aber wie kann ich das unter den gegebenen Voraussetzungen angehen ?

Gruß

Michael
__________________
Gruß

Michael

Mit Zitat antworten
  #9 (permalink)  
Alt 19-10-2008, 20:53
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Da ist deine Methode schon recht sinnvoll..
Also gucken, ob bei unique ne Dopplung auftritt und Fehler abfangen.

mfg
Mit Zitat antworten
  #10 (permalink)  
Alt 19-10-2008, 20:56
fritzje610
 Registrierter Benutzer
Links : Onlinestatus : fritzje610 ist offline
Registriert seit: Mar 2004
Ort: Nahe der schönen Loreley
Beiträge: 318
fritzje610 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich kümmere mich morgen weiter drum. Heute gönne ich mir einen freien Abend.


Gruß

Michael
__________________
Gruß

Michael

Mit Zitat antworten
  #11 (permalink)  
Alt 20-10-2008, 09:48
fritzje610
 Registrierter Benutzer
Links : Onlinestatus : fritzje610 ist offline
Registriert seit: Mar 2004
Ort: Nahe der schönen Loreley
Beiträge: 318
fritzje610 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Guten Morgen,

was so ein freier Abend doch bewirkt. Heute morgen kam mir dann die Eingebung wie ich das ganz einfach lösen kann. Und zwar so:

PHP-Code:
if(isset($_SESSION['is_saved']) &&  $_SESSION['is_saved'] == "gespeichert")
{
    
array_push($error"Datensatz wurde bereits gespeichert");
}    
else
{
    
$query "SELECT * FROM auftraege ORDER BY au_nr DESC LIMIT 1";
    
$result mysql_query($query);
    if (!
$result)
    {
        die (
'Ungültige Abfrage: ' mysql_error());
    }
    while(
$row mysql_fetch_assoc($result))
    {
        
$letzte_au_nr $row['au_nr'];
    }

    
$neue_au_nr $letzte_au_nr 1;
}





if(
count($error) == 0)
{
    
$_SESSION['is_saved'] = "gespeichert";
        
    ... 
alle Querys werden ausgeführt ...
}

else
{
    echo 
"<div id='fehler'>";
    if (isset(
$error) && count($error) > 0//Prüfen ob array $error da ist UND ob es einen Eintrag hat.
    
{
         for (
$i=0$i count($error); $i++) //Ausgabe aller Einträge des Arrays $error
         
{
              echo 
$error[$i] . "<br />";
         } 
    }
    echo 
"</div>";


Wenn die Session-Variable gesetzt ist, sind die querys bereits durchgeführt worden. Beim Reload wird in der ersten if geprüft, ob die Session-Variable gesetzt ist. Sollte dem so sein, wird ins array gepusht und somit kann nicht mehr neu in die Tabellen geschrieben werden.
Ist die Variable nicht gesetzt, wird eine neue au_nr erzeugt und die querys werden durchgeführt.


Gruß

Michael
__________________
Gruß

Michael

Mit Zitat antworten
  #12 (permalink)  
Alt 20-10-2008, 14:07
Griecherus
 PHP Senior
Links : Onlinestatus : Griecherus ist offline
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
Griecherus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Noch ein kleiner Hinweis zur Optimierung:
Zitat:
PHP-Manual:
Note: If you use array_push() to add one element to the array it's better to use $array[] = because in that way there is no overhead of calling a function.
Grüße

Geändert von Griecherus (20-10-2008 um 14:18 Uhr)
Mit Zitat antworten
  #13 (permalink)  
Alt 20-10-2008, 14:13
fritzje610
 Registrierter Benutzer
Links : Onlinestatus : fritzje610 ist offline
Registriert seit: Mar 2004
Ort: Nahe der schönen Loreley
Beiträge: 318
fritzje610 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ok, wird noch nachgerüstet. Danke !


gruß

Michael
__________________
Gruß

Michael

Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 09:39 Uhr.