PHP MYSQL Alle Datensätze abrufen außer die mit der id ...

...komplette Frage anzeigen

2 Antworten

Wie daCypher schon schrieb, mit NOT IN() kannst du die filtern. Wenn du die Kundennummern als Array bekommst, kannst du einfach mit der Funktion implode() ein Komma setzen lassen, dann passt das genau in die WHERE-Klausel rein.

Das mit dem F5 drücken und der Datensatz wird nochmals gespeichert, kann man auf mehrere Wege lösen:

  1. Wenn der gleiche Datensatz nur einmal in der DB sein darf => UNIQUE KEY auf eine/mehrere Spalten setzen

  2. Wenn der gleiche Datensatz mehrmals vorhanden sein darf, kannst du z.B. nach dem erfolgreichen Eintragen den Besucher weiterleiten. Dann muss dieser erst auf "zurück" klicken und dann F5 drücken.

  3. Um es ganz auszuschließen, kannst du auch eine Session setzen, dass er das Formular schon genutzt hat.

  4. Wenn es benutzerkontenabhängig ist, würde ich eine weitere Tabelle erstellen, wo die UserID drin gespeichert wird. Wenn die ID des Benutzer nun inder Tabelle steht, darf er das Formular nicht nutzen. Nach dem Speichern des Formulars also einfach nur seine ID in die Sperr-Tabelle setzen.

Nun kannst du dir eine Möglichkeit aussuchen :)

Dragon970 25.10.2012, 13:35

Habe es jetzt so probiert, aber ein Fehler ist noch vorhanden:

$kunde = array($row[kunde]); $kunde2 = implode(",",$kunde);

Wenn ich $kunde2 ausgebe bekomme ich sowas: 10011002

0
Babelfish 25.10.2012, 14:38
@Dragon970

Wo ist der Fehler? Wenn du ins Array einen Wert schreibst und den „implodest“, dann kommt auch nur ein Wert raus.

0
Dragon970 25.10.2012, 14:44
@Babelfish

Ich bräuchte das ungefähr so: '1001', '1002' für NOT IN

0
Babelfish 25.10.2012, 14:49
@Dragon970

Wenn das Array stimmt, dann kommt das auch:

<?php
  echo implode(',', array(1001, 1002));
?>

>_ 1001,1002

Gruß

0
Dragon970 25.10.2012, 15:38
@Babelfish

Danke für deine Antwort. Bei mir kommt das aber komischerweise nicht:

$sql = mysql_query("SELECT * FROM kunden");
while($rowkd = mysql_fetch_assoc($sql)) {

$kundennummern = implode(',', array($rowkd[kundennr]));
}
$sqlbel = "SELECT * FROM belege WHERE zahl='ja' AND nummer='ja' AND kundennr NOT IN(".$kundennummern.") ORDER BY kundennr DESC";
0
Babelfish 25.10.2012, 15:44
@Dragon970

Kann ja auch nicht klappen, da du implode immer nur einen Wert übergibst. Du implodest in jedem Durchlauf immer nur eine Kundennummer.

$sql = mysql_query("SELECT * FROM kunden");

$kundennummern = array();

while($rowkd = mysql_fetch_assoc($sql))
{
  $kundennummern[] = $rowst['kundennr'];
}

$sqlbel = "SELECT * FROM belege WHERE zahl='ja' AND nummer='ja' AND kundennr NOT IN(".implode(',', $kundennummern).") ORDER BY kundennr DESC";

Gruß

0

SELECT * FROM `Tabelle` WHERE `KundeNr` NOT IN('1234', '5678', '9101', '2131');

Den zweiten Teil der Frage kapier ich nicht wirklich.

Pengxer 05.11.2012, 21:02

Richtig. Denk aber dran, das du das z.B. in eine Variable schreibst und mysql_query() machst!

0

Was möchtest Du wissen?